硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1033|回复: 5
收起左侧

[FreeRTOS] 临界段的一些问题

[复制链接]

7

主题

9

回帖

30

积分

新手上路

积分
30
发表于 2022-2-22 11:19:36 | 显示全部楼层 |阅读模式
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY                        15     

//系统可管理的最高中断优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY        5

#define configKERNEL_INTERRUPT_PRIORITY                 ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )        /* 240 */

#define configMAX_SYSCALL_INTERRUPT_PRIORITY         ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) /* 80 */

调用了 FreeRTOS 的关中断后,所有优先级数值大于等于 80 的中断都会被关闭。优先级数值
小于 80 的中断不会被关闭,对寄存器 basepri 寄存器赋值 0, 那么被关闭的中断会被打开。

我的问题是抢占优先级是0-15,怎么会有大于80的优先级,临界区屏蔽的中断到底和哪个宏定义有关。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106441
QQ
发表于 2022-2-22 11:31:54 | 显示全部楼层
这么算有点乱,理解本质,以STM32为例,仅使用8bit定义的高4bit。

4bit数据能表达0-15个数值。
NVIC的抢占配置API都帮我计算好了,只有就是高4bit使用。
回复

使用道具 举报

7

主题

9

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-2-22 11:47:46 | 显示全部楼层
eric2013 发表于 2022-2-22 11:31
这么算有点乱,理解本质,以STM32为例,仅使用8bit定义的高4bit。

4bit数据能表达0-15个数值。

#define configMAX_SYSCALL_INTERRUPT_PRIORITY         ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) /* 80 */

那这个宏定义屏蔽的是大于80的中断吗?那这样临界段就没意义了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106441
QQ
发表于 2022-2-22 11:53:48 | 显示全部楼层
liguoye105 发表于 2022-2-22 11:47
#define configMAX_SYSCALL_INTERRUPT_PRIORITY         ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORIT ...

不是,看来你的稍微补充点NVIC的基础了

configMAX_SYSCALL_INTERRUPT_PRIORITY  是实际的优先级数值,而我们说的NVIC里面的抢占优先级和子优先级配置是仅考虑高4bit即可,因为我们调用NVIC配的时候已经帮我们配置好了。

第12章 FreeRTOS中断优先级配置(重要)
https://www.armbbs.cn/forum.php? ... id=21094&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

7

主题

9

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-2-22 11:54:22 | 显示全部楼层
liguoye105 发表于 2022-2-22 11:47
#define configMAX_SYSCALL_INTERRUPT_PRIORITY         ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORIT ...

5、#define configMAX_SYSCALL_INTERRUPT_PRIORITY         80
这个数值是赋值给寄存器basepri使用的,也就是80  对应抢占优先级5,那就是屏蔽中断优先级大于5的,对于basepri就是屏蔽大于80的。这样理解对吗
回复

使用道具 举报

7

主题

9

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-2-22 11:57:18 | 显示全部楼层
eric2013 发表于 2022-2-22 11:53
不是,看来你的稍微补充点NVIC的基础了

configMAX_SYSCALL_INTERRUPT_PRIORITY  是实际的优先级数值, ...

明白了,多谢硬汉哥
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-21 00:34 , Processed in 0.191983 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表