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)