liguoye105 发表于 2021-9-28 10:58:42

英汉哥的 freertos 中断管理教程有点问题

#define configMAX_SYSCALL_INTERRUPT_PRIORITY            5
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY      15


感觉硬汉哥解释得复杂了,中断管理得核心就这两个宏定义。

[*]#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY        5
[*]就是说当这个宏定义配置为 5 的时候,中断优先级数值在 0、 1、 2、 3、 4 的这些中断是不受 FreeRTOS 屏蔽的, 也就是说即使在系统进入临界段的时候,这些中断也能被触发而不是等到退出临界段的时候才被触发,
[*]当然,这些中断服务函数中也不能调用 FreeRTOS 提供的 API 函数接口,而中断优先级在 5 到 15 的这些中断是可以被屏蔽的,也能安全调用 FreeRTOS 提供的 API 函数接口。
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY      15

configLIBRARY_LOWEST_INTERRUPT_PRIORITY 是用于配置 SysTick 与 PendSV 的。也就是让 SysTick 与 PendSV配置为最低优先级。写成15的原因是因为NVIC都是抢占优先级0-15,15是最低优先级。

硬汉哥说 basepri 寄存器和define configLIBRARY_LOWEST_INTERRUPT_PRIORITY有关。(宏定义 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 是 0x01,经过 4bit 偏移后就是 0x10,
即 16。 调用了 FreeRTOS 的关中断后,所有优先级数值大于等于 16 的中断都会被关闭。优先级数值
小于 16 的中断不会被关闭,对寄存器 basepri 寄存器赋值 0, 那么被关闭的中断会被打开。)

我认为临界段中断的屏蔽是和define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY有关。

希望硬汉哥回复!!!!!

eric2013 发表于 2021-9-28 11:15:44

这里写教程的时候,复制粘贴错了,不再修改了。
configKERNEL_INTERRUPT_PRIORITY 对应的是 configLIBRARY_LOWEST_INTERRUPT_PRIORITY的偏移
configMAX_SYSCALL_INTERRUPT_PRIORITY 对应的是 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY的偏移#define configKERNEL_INTERRUPT_PRIORITY               ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
#define configMAX_SYSCALL_INTERRUPT_PRIORITY      ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

liguoye105 发表于 2021-9-28 11:28:11

eric2013 发表于 2021-9-28 11:15
这里写教程的时候,复制粘贴错了,不再修改了。
configKERNEL_INTERRUPT_PRIORITY 对应的是 configLIBRARY ...

不修改的话理解起来特别绕:lol

eric2013 发表于 2021-9-28 11:41:53

liguoye105 发表于 2021-9-28 11:28
不修改的话理解起来特别绕
我开个帖子,做个勘误,方便需要的人看,教程不再修改了。倒腾一次都不够油钱。

liguoye105 发表于 2021-9-28 13:47:38

好的。特别好奇硬汉哥时间怎么规划的,感觉都不用睡觉,太高产了,每周的工作量是我一个月的。佩服!!!
页: [1]
查看完整版本: 英汉哥的 freertos 中断管理教程有点问题