FreeRTOS中断调用api卡死

stm32+freertos。



这里我要说的是发生这种情况的另一种解决办法。


先说背景。


本来是要实现一个简单的功能,就是从串口接收数据通过队列发送给其中一个任务进行处理。


最先的问题是由于stm32的串口没有fifo,按照网上的资料实现了dma加空闲中断,这个问题就出现在空闲中断上。

反映出来的现象就是出现中断后程序没反映了,但是打断点调试又能正常运行了(只要在中断中停一下就可以)。

最后找到的问题是中断标志位没清掉,准确的说是清除方式不对。

用如下方法不对:

USART_ClearITPendingBit(USART1,USART_IT_IDLE);


正确的应该是如下用一个变量来读取两个寄存器(顺序不能反):

i=UartPort->SR;
i=UartPort->DR;


仔细看了手册才发现这个问题的。


接下来就是一个坑爹的问题了,上面的问题解决后,我觉得应该就没什么大问题了吧。于是就使用API

xQueueSendFromISR


发送数据到其中一个任务当中,但是,只要发送数据,程序就不跑了,调试时让其停下来,发现一直在空闲任务中转。


于是又到网上搜刮,看到最多的说法是中断优先级的问题,但是出现的现象却不一样,不管了,先改一下再看,很不幸,

试了好多方式都不行。。。。


就这样两天过去了,依旧没解决问题,最后走了一个贱招,在官网重新下载了一个新版本的系统再试,这一试让我泪流满面

呀,一切都正常了,这就是此问题坑爹的原因。


最后提醒一下,有问题的那个版本是8.0.0的,使用者千万要注意。


你可能感兴趣的:(stm32)