MicroPython:Библиотеки/pyb/Класс CAN/CAN.recv(): различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =Класс CAN – коммуникационна...»)
 
Нет описания правки
 
Строка 5: Строка 5:
=Класс CAN – коммуникационная шина CAN<ref>[http://docs.micropython.org/en/latest/library/pyb.CAN.html docs.micropython.org - class CAN – controller area network communication bus]</ref>=
=Класс CAN – коммуникационная шина CAN<ref>[http://docs.micropython.org/en/latest/library/pyb.CAN.html docs.micropython.org - class CAN – controller area network communication bus]</ref>=


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
CAN.recv(fifo, list=None, *, timeout=5000) – принимает данные на шине:
CAN.recv(fifo, list=None, *, timeout=5000) – принимает данные на шине:
</syntaxhighlight>
</syntaxhighlight>
Строка 25: Строка 25:
Например:
Например:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
buf = bytearray(8)
buf = bytearray(8)
lst = [0, 0, 0, memoryview(buf)]
lst = [0, 0, 0, memoryview(buf)]

Текущая версия от 17:31, 24 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс CAN – коммуникационная шина CAN[1]

CAN.recv(fifo, list=None, *, timeout=5000)  принимает данные на шине:
  • fifo – это целое число, обозначающее то, какой FIFO будет принимать данные.
  • list – это опциональный списковый объект, который будет использоваться в качестве возвращаемого значения.
  • timeout – таймаут в миллисекундах для ожидания приема данных.

Возвращаемое значение – это кортеж с 4 элементами:

  • ID сообщения.
  • Булево значение, сообщающее о том, является ли сообщение RTR-сообщением.
  • Значение FMI («filter match index», т.е. «индекс совпадения фильтра»).
  • Массив, содержащий данные.

Если в list задано None, система выделит память под новый кортеж и новый объект bytes – для хранения данных (в виде четвертого элемента этого кортежа).

Если в list будет задано не None, то это должен быть списковый объект, содержащий как минимум 4 элемента. Четвертым элементом должен быть объект memoryview, который создается либо из массива байтов, либо из массива типа «B» или «b», и этот массив должен быть достаточно велик, чтобы вместить как минимум 8 байтов. Затем этот списковый объект будет наполнен первыми тремя возвращенными значениями из списка выше, а размер объекта memoryview будет изменен в соответствии с размером присланных данных и заполнен этими данными. При последующих вызовах этого метода этот же список и объект memoryview можно будет использовать повторно, что позволяет получать данные без использования кучи.

Например:

buf = bytearray(8)
lst = [0, 0, 0, memoryview(buf)]
# При следующем вызове память в куче выделена не будет.
can.recv(0, lst)

См.также

Внешние ссылки