1. # 该示例串口触发中断/回调,防止读取串口及串口数据处理延时,通过消息队列控制专门线程对串口数读取及处理。
    2. import _thread
    3. from machine import UART
    4. from queue import Queue
    5. # 串口数据读取线程函数入口,通过消息队列触发消息读取。
    6. def thread_entry():
    7. while True:
    8. len = uart_msg_q.get()
    9. data = UART2.read(len)
    10. print('uart read len {}, recv: {}.'.format(len, data))
    11. def callback(para):
    12. print("uart call para:{}".format(para))
    13. if(0 == para[0]):
    14. uart_msg_q.put(para[2])
    15. uart_msg_q = Queue()
    16. UART2 = UART(UART.UART2, 115200, 8, 0, 1, 0)
    17. UART2.set_callback(callback)
    18. # 创建线程
    19. _thread.start_new_thread(thread_entry, ())
    • 在多线程处理中,对于提供的中断/回调接口是其他线程的操作,在使用时需要注意不要在中断/回调中做延时任务,延时任务会导致后续中断/回调阻塞,从而导致中断/回调触发接口异常。对于在接收中断/回调后处理过程中需要耗时操作,一般是通过线程间通信方式,交给其其他独立线程进行任务处理。
    • 如下示例实操对于串口数据中断触发,通过消息队列控制另一个接口进行数据读取及处理,防止对中断/回调接口阻塞丢包等问题