现在意法半导体的配套软件做得很全面了,简直可以说是保姆式的服务。从芯片选型,引脚定义,到代码模板生成,一条龙服务,很方便。但是方便也有方便的坏处,那就是有些细节的规则会造成天然的bug。
比如,在stm32cubeIDE里新建工程的时候,如果勾选了FREERTOS
那么,程序后台会默认把RTOS可控的优先级范围设定成5-15(目前还看不见,生成后在FreeRTOSConfig.h中可以查到):
接下来继续配置串口。
可以看到,串口中断的优先级已经被锁定成5,且不可更改。
实际上这样暂时还没有什么问题,生成代码后,做基本的串口收发一时半会儿也看不出有什么问题。
但是,一旦让程序多跑跑,就会发现,串口中断早晚会卡死,而其他程序还可以正常跑。
这是为什么呢?
在串口中断接收的函数中,有LOCK这样的功能。如果在LOCK期间程序被打断,那么就再也不能解锁,导致卡死。