【FreeRTOS中使用xQueueSendToBackFromISR()函数导致freertos.c文件中变量全部置零】

标题@FreeRTOS中使用xQueueSendToBackFromISR()函数导致freertos.c文件中变量全部置零

在我进行freeRTOS程序的开发时,出现了十分莫名的变量置零问题

我的程序思路是,按键检测来控制屏幕显示的内容。我使用了系统中断检测按键的下降延。如果检测有效则使用xQueueSendToBackFromISR(Queue_KeysFlagHandle,&(KEY[0].KeyName),portMAX_Delay);来将按键名发送到freertos.c中的任务函数中去。在任务函数中调用软件定时来消抖。最后在软件定时器的回调函数中判断且得到最终的按键建值,也用队列的方式把最终按键名发送给屏幕显示任务。
因为按键存在一些屏幕切换功能,所以我用了一些全局变量(一开始是任务内的私有变量,但是后来run不动,为了debug改成了全局静态变量)
问题就出现在我开始按按键还可以正常屏幕切换,多按几次后(不确定,有时3次,有时更多),屏幕切换就出了问题。debug显示我的标志位变量在某次按键按下后全部变成了0(凡事freertos中定义的,且使用了的全局变量)。
在不断打断点后,发现问题出在xQueueSendToBackFromISR(Queue_KeysFlagHandle,&(KEY[0].KeyName),portMAX_Delay);中
我在isr回调函数的源程序为:
在这里插入图片描述
某一次按键按下执行完xQueueSendToBackFromISR();函数后变量就置零了。因为我修改过任务的栈值,发现内存没有溢出,所以一开始没有想到这里的问题。
我将portMAX_Delay改为0,问题就解决了,但其深层次的原因我还没找到,先发个帖子记录后面找到原因后再补充。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值