在使用FREERTOS时,外部中断的优先级是应该大于RTOS的最大优先级,还是都让RTOS管理?

在使用FREERTOS时,外部中断的优先级是应该大于RTOS的最大优先级,还是都让RTOS管理?

硬件中断的优先级都是大于RTOS的任务优先级的 不受RTOS管理的硬件优先级 不能在中断中调用RTOS的函数 如果你的外部中断实时性要求很高 又不需要调用RTOS相关的函数 可以不让RTOS管理

终端被触发时,task就会被打断,处理完中断之后再继续task。

要记住一个点: 即使是优先级最低的中断,它的优先级也高于任务
任务只有在没有中断的情况下,才能执行

那如果我既需要中断跟任务间进行同步,又要保证中断的实时性 该怎么做呢

1.中断永远可以打断任务,所以中断的实时性是可以保证的
2.中断要跟任务同步?比如任务休眠,在中断函数里把任务唤醒。这就是同步

不知道你说的“同步”是不是我理解的,可以举例说明

比如我通过SPI接收LCD显示数据至BUF里,然后TASK里比较后有差异才会刷到LVGL。这里我就需要在TASK进行比较及刷新时,SPI不能修改BUF数据

是的,并且你的需求lvgl本身有机制也是这么处理的

如果RTOS管理的中断优先级为1-15,task的优先级1-9,ISR使用10-15,会影响ISR的实时性吗?

首先,中断优先级、任务优先级,这2类优先级是不能比较的。它们的数值,不在一个体系里。最低优先级的中断,可以打断最高优先级的任务。这就像语文的1~10分,跟数学的1~10分,是两个体系,不能比较。但是在汉语专业里,语文的1分,永远高于数学的10分。

1 个赞

那就是RTOS不能管理ISR了?

RTOS可以关闭中断

所以在具体设置上,我试着说下您看对不对。M4设置0-15的优先级,RTOS设置5-15,SPI设置NVIC = 10, UART = 2, TASK1 的优先级=1。这时候SPI中断扔可以打断任何TASK,但是RTOS关中断的时候,SPI就不可用,而UART不受影响

1. M4有0~15级中断
2.设置RTOS,让它管理5~15的中断
3.UART中断设置为2
4.SPI中断设置为10
5.TASK1的任务优先级是1

结论:RTOS关中断时,可以关掉5~15级的中断;所以SPI中断被关了,但是UART中断没有被关

就算是优先级最低的中断也比所有任务的优先级高