同步操作将从 micropython/micropython 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
try:from pyb import CANexcept ImportError:print("SKIP")raise SystemExitfrom array import arrayimport micropythonimport pyb# test we can correctly create by id (2 handled in can2.py test)for bus in (-1, 0, 1, 3):try:CAN(bus, CAN.LOOPBACK)print("CAN", bus)except ValueError:print("ValueError", bus)CAN(1).deinit()CAN.initfilterbanks(14)can = CAN(1)print(can)# Test state when de-init'dprint(can.state() == can.STOPPED)can.init(CAN.LOOPBACK)print(can)print(can.any(0))# Test state when freshly createdprint(can.state() == can.ERROR_ACTIVE)# Test that restart can be calledcan.restart()# Test info returns a sensible valueprint(can.info())# Catch all filtercan.setfilter(0, CAN.MASK16, 0, (0, 0, 0, 0))can.send("abcd", 123, timeout=5000)print(can.any(0), can.info())print(can.recv(0))can.send("abcd", -1, timeout=5000)print(can.recv(0))can.send("abcd", 0x7FF + 1, timeout=5000)print(can.recv(0))# Test too long messagetry:can.send("abcdefghi", 0x7FF, timeout=5000)except ValueError:print("passed")else:print("failed")# Test that recv can work without allocating memory on the heapbuf = bytearray(10)l = [0, 0, 0, memoryview(buf)]l2 = Nonemicropython.heap_lock()can.send("", 42)l2 = can.recv(0, l)assert l is l2print(l, len(l[3]), buf)can.send("1234", 42)l2 = can.recv(0, l)assert l is l2print(l, len(l[3]), buf)can.send("01234567", 42)l2 = can.recv(0, l)assert l is l2print(l, len(l[3]), buf)can.send("abc", 42)l2 = can.recv(0, l)assert l is l2print(l, len(l[3]), buf)micropython.heap_unlock()# Test that recv can work with different arrays behind the memoryviewcan.send("abc", 1)print(bytes(can.recv(0, [0, 0, 0, memoryview(array("B", range(8)))])[3]))can.send("def", 1)print(bytes(can.recv(0, [0, 0, 0, memoryview(array("b", range(8)))])[3]))# Test for non-list passed as second arg to recvcan.send("abc", 1)try:can.recv(0, 1)except TypeError:print("TypeError")# Test for too-short-list passed as second arg to recvcan.send("abc", 1)try:can.recv(0, [0, 0, 0])except ValueError:print("ValueError")# Test for non-memoryview passed as 4th element to recvcan.send("abc", 1)try:can.recv(0, [0, 0, 0, 0])except TypeError:print("TypeError")# Test for read-only-memoryview passed as 4th element to recvcan.send("abc", 1)try:can.recv(0, [0, 0, 0, memoryview(bytes(8))])except ValueError:print("ValueError")# Test for bad-typecode-memoryview passed as 4th element to recvcan.send("abc", 1)try:can.recv(0, [0, 0, 0, memoryview(array("i", range(8)))])except ValueError:print("ValueError")del can# Testing extended IDscan = CAN(1, CAN.LOOPBACK, extframe=True)# Catch all filtercan.setfilter(0, CAN.MASK32, 0, (0, 0))print(can)try:can.send("abcde", 0x7FF + 1, timeout=5000)except ValueError:print("failed")else:r = can.recv(0)if r[0] == 0x7FF + 1 and r[3] == b"abcde":print("passed")else:print("failed, wrong data received")# Test filtersfor n in [0, 8, 16, 24]:filter_id = 0b00001000 << nfilter_mask = 0b00011100 << nid_ok = 0b00001010 << nid_fail = 0b00011010 << ncan.clearfilter(0)can.setfilter(0, pyb.CAN.MASK32, 0, (filter_id, filter_mask))can.send("ok", id_ok, timeout=3)if can.any(0):msg = can.recv(0)print((hex(filter_id), hex(filter_mask), hex(msg[0]), msg[3]))can.send("fail", id_fail, timeout=3)if can.any(0):msg = can.recv(0)print((hex(filter_id), hex(filter_mask), hex(msg[0]), msg[3]))del can# Test RxCallbackscan = CAN(1, CAN.LOOPBACK)can.setfilter(0, CAN.LIST16, 0, (1, 2, 3, 4))can.setfilter(1, CAN.LIST16, 1, (5, 6, 7, 8))def cb0(bus, reason):print("cb0")if reason == 0:print("pending")if reason == 1:print("full")if reason == 2:print("overflow")def cb1(bus, reason):print("cb1")if reason == 0:print("pending")if reason == 1:print("full")if reason == 2:print("overflow")def cb0a(bus, reason):print("cb0a")if reason == 0:print("pending")if reason == 1:print("full")if reason == 2:print("overflow")def cb1a(bus, reason):print("cb1a")if reason == 0:print("pending")if reason == 1:print("full")if reason == 2:print("overflow")can.rxcallback(0, cb0)can.rxcallback(1, cb1)can.send("11111111", 1, timeout=5000)can.send("22222222", 2, timeout=5000)can.send("33333333", 3, timeout=5000)can.rxcallback(0, cb0a)can.send("44444444", 4, timeout=5000)can.send("55555555", 5, timeout=5000)can.send("66666666", 6, timeout=5000)can.send("77777777", 7, timeout=5000)can.rxcallback(1, cb1a)can.send("88888888", 8, timeout=5000)print(can.recv(0))print(can.recv(0))print(can.recv(0))print(can.recv(1))print(can.recv(1))print(can.recv(1))can.send("11111111", 1, timeout=5000)can.send("55555555", 5, timeout=5000)print(can.recv(0))print(can.recv(1))del can# Testing asynchronous sendcan = CAN(1, CAN.LOOPBACK)can.setfilter(0, CAN.MASK16, 0, (0, 0, 0, 0))while can.any(0):can.recv(0)can.send("abcde", 1, timeout=0)print(can.any(0))while not can.any(0):passprint(can.recv(0))try:can.send("abcde", 2, timeout=0)can.send("abcde", 3, timeout=0)can.send("abcde", 4, timeout=0)can.send("abcde", 5, timeout=0)except OSError as e:if str(e) == "16":print("passed")else:print("failed")pyb.delay(500)while can.any(0):print(can.recv(0))# Testing rtr messagesbus1 = CAN(1, CAN.LOOPBACK)while bus1.any(0):bus1.recv(0)bus1.setfilter(0, CAN.LIST16, 0, (1, 2, 3, 4))bus1.setfilter(1, CAN.LIST16, 0, (5, 6, 7, 8), rtr=(True, True, True, True))bus1.setfilter(2, CAN.MASK16, 0, (64, 64, 32, 32), rtr=(False, True))bus1.send("", 1, rtr=True)print(bus1.any(0))bus1.send("", 5, rtr=True)print(bus1.recv(0))bus1.send("", 6, rtr=True)print(bus1.recv(0))bus1.send("", 7, rtr=True)print(bus1.recv(0))bus1.send("", 16, rtr=True)print(bus1.any(0))bus1.send("", 32, rtr=True)print(bus1.recv(0))# test HAL error, timeoutcan = pyb.CAN(1, pyb.CAN.NORMAL)try:can.send("1", 1, timeout=50)except OSError as e:print(repr(e))
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。