FreeRTOS - 中断使用注意

Posted 流水灯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeRTOS - 中断使用注意相关的知识,希望对你有一定的参考价值。

注意点:
1:首先要将中断的嵌套全部设置为抢占优先级。
2:将freertos系统内核中断(configKERNEL_INTERRUPT_PRIORITY)的优先级设置成最低。
3:将freertos的最大系统调用中断优先级(configMAX_SYSCALL_INTERRUPT_PRIORITY)设置为合适的优先级,比如11。
4:如果有用户中断函数调用到freertos提供的系统函数,一定要使用带FromISR的freertos提供的系统函数,并且这个用户中断的优先级一定要在configKERNEL_INTERRUPT_PRIORITY和configMAX_SYSCALL_INTERRUPT_PRIORITY的优先级之间,比如FREERTOS中的优先级数值设定的参数是configMAX_SYSCALL_INTERUPT_PRORITY。默认值是5,所以要想在中断中使用操作系统函数需要将中断的优先级设置的大于等于5

(原因分析:

1、执行带FromISR的FreeRTOS提供的系统函数会进入临界区,屏蔽了任务的切换,否则有高优先级的任务调用了这个系统函数,但这个系统函数的使用资格被用户中断函数霸占(低优先级),高优先级任务因为得不到操作这个系统函数的资格而被阻塞,就好像高优先级任务不能打断低优先级任务

2、如果用户中断的优先级高于configMAX_SYSCALL_INTERRUPT_PRIORITY,还调用系统函数,由于系统被此用户中断打断而不能正常运行,会导致程序出错(猜测)


5:其他没有调用到freertos提供的系统函数的中断的优先级没有特别要求。

以上是关于FreeRTOS - 中断使用注意的主要内容,如果未能解决你的问题,请参考以下文章

在 STM32 上使用 FreeRTOS 处理多个中断

[FreeRTOS].FreeRTOS CortexM3 M4中断优先级设置总结

STM32 FreeRTOS - UART延迟中断问题

如何用freertos接收串口数据

Stm32的中断在测试FREERTOS的时候的问题

带有 STM32 HAL 驱动程序的 FreeRTOS 中的 UART 中断