我们来看这段程序:
上面这段程序,是串口2的中断服务函数,在这里面完成的是接收一帧\r\n的数据。
这样看来,这段程序保护得挺好,在串口在执行接收的过程中不会被中断打断。但它存在隐藏的BUG,我们来看下面这种情况。
如果是使用stm32cubeMX生成代码,我们会看到在main.c中调用了串口初始化函数,在代码编写规则制定的区域定义了一个信号量,用于处理传感器数据。
这样看来没毛病,编程思路都是对的,但是灾难就快要发生了,于是我们在msp初始化函数里添加这么一段。
我们来看这段程序:
上面这段程序,是串口2的中断服务函数,在这里面完成的是接收一帧\r\n的数据。
这样看来,这段程序保护得挺好,在串口在执行接收的过程中不会被中断打断。但它存在隐藏的BUG,我们来看下面这种情况。
如果是使用stm32cubeMX生成代码,我们会看到在main.c中调用了串口初始化函数,在代码编写规则制定的区域定义了一个信号量,用于处理传感器数据。
这样看来没毛病,编程思路都是对的,但是灾难就快要发生了,于是我们在msp初始化函数里添加这么一段。