单片机/MCU论坛
直播中

王飞

7年用户 1061经验值
私信 关注

PSOC6在使用freertos时,从中断向任务中发送信息时出错怎么解决?

TP触摸中断后,在中断中读取数据,然后通过队列把坐标数据发送给对应任务,当我把TP中断脚接到中断component时,rtosApiResult = xQueueSendFromISR(tpCommandQ,  tpCommand,0);这个函数是可以正常运行的,但是这种中断component只支持上升沿中断,不支持下降沿中断(无论我设置成上升沿还是下降沿甚至BOTH EDGE,但是始终只有上升沿中断);为了解决这个问题,就将中断component删掉,用Global Signal来代替,代替后,下降沿中断有了,但是出现新的问题,那就是所有带ISR的fressrtos的函数都用不了,更改前后的两个中断的优先级是一样的,唯一变化的是中断号。出错代码请见图片。请帮忙解答一下,是否所有Global Signal中断都不能用于freertos中?如果是,请告知其他的解决办法,谢谢

                                                                                                                                                                                                                                                                                                                                                                                                

回帖(1)

fanB

2024-2-19 17:05:05
要解决从中断向任务中发送信息的问题,可以尝试以下方法:

1. 确保在中断中正确读取数据,并且数据已经准备好发送到队列中。
2. 确保任务创建时已正确初始化队列,并且队列能够接收正确的数据类型。
3. 检查任务的优先级设置是否正确。如果任务的优先级低于中断的优先级,可能导致任务无法及时处理中断发送的消息。可以尝试增加任务的优先级。
4. 检查任务的堆栈大小是否足够。如果任务的堆栈大小不够,可能会导致任务在处理中断消息时出现错误。可以尝试增加任务的堆栈大小。
5. 检查中断的触发方式是否设置正确。确保中断触发条件符合预期,以确保中断能够正确触发和处理。
6. 如果使用的中断组件不支持下降沿触发方式,可以尝试使用其他方式实现下降沿中断的检测,例如使用GPIO的中断功能或其他外部硬件来检测下降沿触发条件。
7. 如果使用全局信号替代中断组件,需要确保全局信号的处理函数正确注册并能够处理中断事件。同时,需要注意全局信号的互斥保护,以防止竞争条件和数据错误。

对于无法使用带ISR的FreeRTOS函数的问题,可能是因为使用全局信号替代中断组件后,需要对相关代码进行适当的修改和调整。可以尝试使用RTOS原生的API函数来替代ISR函数,或者使用其他方式实现中断的处理。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分