FreeRTOS中断调用api卡死

stm32+freertos。



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


先说背景。


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


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

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

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

用如下方法不对:

USART_ClearITPendingBit(USART1,USART_IT_IDLE);


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

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


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


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

xQueueSendFromISR


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


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

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


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

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


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


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值