MicroPython:Библиотеки/pyb/Класс CAN/CAN.recv()

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

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


Класс 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)

См.также

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