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