背景:
有一个功能要在frreertos启动前完成ADC采集。ADC采用的是ADC+中断+DMA的方式。在freertos的任务里面跑,是没有问题的。但当把这段代码放到freertos启动之前发现ADC竟然读不到数据了!后来在调试中发现原来adc的中断没有进去。看到这个问题当时就有点懵了。后来就开始网上查找资料,发现了一个帖子,瞬间乌云消散。传送门 FreeRTOS-中断相关坑 - 一地鸡毛- - 博客园
原因:
freertos会控制一些中断的优先级,在FreeRTOSConfig.h文件中有一个宏
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
当设置的中断优先级的数字大于这个宏定义的优先级的时候,那这个中断就受freertos控制。在freertos启动之前,这个中断是失效的。而我当时对adc中断的设置正好是5,是受freertos控制的中断的。问题找到了,解决办法就有了!
解决办法:
在进行adc采集之前,将adc的优先级设置为4,让adc中断不受freertos控制。在采集完之后再修改为5。这样代码改动量最小,风险最低。问题解决。