文章目录
一、前言
在实际的项目上,消息队列主要用于线程同步。所谓线程同步就是一个线程或者ISR中断往某个消息队列发送一个消息后,触发调度器将另外一个线程(等待这个消息队列的线程)马上从阻塞态切换至运行态,读取消息与解析消息。线程标志组与事件标志组也可以用于线程同步,但是它们传递的消息只能是一个uint32的变量,所以传递的内容非常有限。
UART中断与CAN中断等ISR,我都会用消息队列同步一个线程来处理消息队列里的消息。这样做的好处是中断回调函数里的代码量少,执行时间短,符合“快进快出”的原则。借助消息队列的同步功能,读取与处理的线程会尽快执行。
Note:
通过消息队列,将ISR函数与线程同步运行是精通RTOS的必修课,务必掌握!
STM32工程:
链接:https://pan.baidu.com/s/1h4dPUhRAxZJw9fXSrGwrzQ
提取码:k2jk
二、实验目的
- 使用串口助手发送字符同步线程A。(一般情况下,线程A处于阻塞态。一直等待,直到串口中断回调函数ISR向消息队列发送字符时,才进行运行态。)
三、API
3.2、osMessageQueueGet
四、代码
4.1、main.h
4.2、stm32f1xx.it.c
板子上的UART转USB芯片连接USART1。
4.3、main.c