#define   configPRIO_BITS                4#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 */

1、#define configPRIO_BITS 4

此宏定义用于配置STM32的8位优先级设置寄存器实际使用的位数。对于M3和M4内核的MCU,每个中断的优先级都是用寄存器中的8位来设置的。8位的话就可以设置2^8 = 256级中断,实际中用不了这么多,所以芯片厂商根据自己生产的芯片做出了调整。比如ST的STM32F1xx和F4xx只使用了这个8位中的高四位[7:4],低四位取零,这样2^4=16,只能表示16级中断嵌套。Reset、NMI、Hard Fault 优先级为负数,高于普通中断优先级,且优先级不可配置。

2、#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5

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

实际使用FreeRTOS报错:

Error:…\FreeRTOS\port\RVDS\ARM_CM4F\port.c,769
中断管理出现问题,定时器优先级太高不受RTOS管理,导致中断服务函数不能调用RTOS的API函数。

3、#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15

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

4、#define configKERNEL_INTERRUPT_PRIORITY 240

这个数值是赋值给寄存器basepri使用的是实际的优先级数值而我们说的NVIC里面的抢占优先级和子优先级配置是仅考虑高4bit即可,因为我们调用NVIC配的时候已经帮我们配置好了。其中SysTick和PendSV中断的优先级240就是15左移4位的结果。这里为什么要左移四位呢,STM32的优先级设置仅使用高4位。而SVC的优先级就是0,可以理解为0左移4位还是0。

5、#define configMAX_SYSCALL_INTERRUPT_PRIORITY 80

是实际的优先级数值,而我们说的NVIC里面的抢占优先级和子优先级配置是仅考虑高4bit即可,因为我们调用NVIC配的时候已经帮我们配置好了)这个数值是赋值给寄存器basepri使用的,8bit的数值才可以实际赋值给相应中断的优先级寄存器。这里的宏定义数值赋给寄存器basepri后就可以实现全局的开关中断操作了。比如:我们这里配置宏定义configLIBRARY_LOWEST_INTERRUPT_PRIORITY是0x05,经过4bit偏移后就是0x50,即80。调用了FreeRTOS的关中断后,所有优先级数值大于等于80的中断都会被关闭。优先级数值小于 80 的中断不会被关闭,对寄存器 basepri 寄存器赋值 0, 那么被关闭的中断会被打开。
优先级数值小于80的中断不会被关闭,对寄存器basepri寄存器赋值0,那么被关闭的中断会被打开。这里的80不是指真正的抢占优先级,而是为了给basepri 寄存器赋值,真正对应的是抢占优先级5,也就是抢占优先级大于5的中断进入临界区会被屏蔽。

Qus:我的问题是抢占优先级是0-15,怎么会有大于80的优先级,临界区屏蔽的中断到底和哪个宏定义有关。
Ans:80(是实际的优先级数值,而我们说的NVIC里面的抢占优先级和子优先级配置是仅考虑高4bit即可,因为我们调用NVIC配的时候已经帮我们配置好了。

1、我认为临界段中断的屏蔽是和
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY有关,把这个宏定义理解透,然后把系统优先级NVIC全配置成抢占优先级,中断管理也就理解了。
2、还有必须分清楚中断优先级和任务优先级,两者本身没有联系,中断优先级永远可以打断任务优先级,除非任务优先级受到临界段保护。

Free RTOS 中断优先级配置相关推荐

  1. FreeRTOS的中断优先级配置小结

    NVIC 的全称是 Nested vectored interrupt controller,即嵌套向量中断控制器.对于 M3 和 M4 内核的 MCU,每个中断的优先级都是用寄存器中的 8 位来设置 ...

  2. 【TDA2x学习】Vision SDK 编译Linux+RTOS的配置

    文章目录 一.安装lib 1.1.编译VSDK必须的lib 1.2.其他的lib 二.Linux+RTOS编译 2.1.声明`INSTALL_DIR`路径: 2.2.修改Rules.make的MAKE ...

  3. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

  4. 嵌入式中断:如何正确设置中断优先级 (万字总结) - 基于Cortex-M和FreeRTOS

    嵌入式中断:深入探讨如何正确设置中断优先级 - 基于Cortex-M和FreeRTOS 1. 如何正确设置中断优先级 2. 从Cortex-M角度 configPRIO_BITS 3. 从RTOS角度 ...

  5. 开发板移植RTOS操作系统,RTOS操作系统适配开发板整理大全

    文章目录 一.单片机/嵌入式有无操作系统的区别 二.操作系统时的分层架构图 三.移植FreeRTOS到小熊派开发板(STM32L431RC) 1. 硬件准备 2. 下载FreeRTOS源码 2.1. ...

  6. FreeRTOS EFM32 中断配置

    FreeRTOS: FreeRTOSConfig.h中定义了两个宏,分别是: /* Interrupt nesting behaviour configuration. */ #define conf ...

  7. RTOS随笔之FreeRTOS

    RTOS几点思考 为什么使用RTOS? 1. 先考虑OS有什么特点? 2. 再考虑什么情况下使用OS? FreeRTOS调试技巧 任务管理 1. 任务调度流程 2. 任务栈大小,栈溢出检测 3. 中断 ...

  8. FreeRTOS 中断优先级嵌套错误引发HardFault异常解决

    最近在使用FreeRTOS的时候,突然发现程序在运行了几分钟之后所有的任务都不再调用了,只有几个中断能正常使用,看来是系统挂掉了,连续测试了几次想找出问题,可是这个真的有点不知所措. 我先看了下文档里 ...

  9. stm32中断优先级快速入门

    1.基本概念 STM32(Cortex-M3架构)中有两个优先级的概念--抢占式优先级和响应优先级.有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级. 具有高抢占式优 ...

最新文章

  1. 二叉树的遍历:前序、中序、后序遍历
  2. Activity的LaunchMode和taskAffinity
  3. 《Windows via C/C++》学习笔记(二):Working with Characters and String
  4. VMware 8.0不能手动安装Linux5.5(命令行)问题解决方法
  5. jquery 背景特效实现_html5实现的仿网页版微信聊天界面效果源码
  6. java命令_Java程序员,不得不会的JDK jstack命令工具
  7. Hibernate的持久化对象状态的方法
  8. Windows系统如何修改Hosts文件
  9. vscode中怎样格式化js代码_vscode格式化配置
  10. python程序设计基础答案第七章_Python语言程序设计基础(第2版) 课后题 第七章...
  11. 百度云网盘一直显示“下载请求中”,一个 解决办法
  12. Linux审计以及主机的入侵检测系统HIDS编写
  13. 尚硅谷《全套Java、Android、HTML5前端视频》
  14. 手机保护壳让手机信号变更差?
  15. [转载]无盘网吧实际施工过程中的注意事项(转)
  16. ClickOnce踩坑记录
  17. gMap使用简单介绍
  18. MDK的HardFault硬件异常和NMI异常原因总结
  19. qbxt国庆水题记day3
  20. Vue Node vue-socket.io 联合使用 简易聊天程序

热门文章

  1. c语言注释两种,C语言有几种注释方式
  2. 使用Jmeter对服务器的压力测试
  3. AD中 Top Solder和Top Paste的区别
  4. c语言intrins头文件,结合单片机学习板学习c语言之流水灯制作 intrins.h头文件
  5. PHP,POST页面无法传值跳转,请大神帮助。
  6. 第十章 DCEP简介
  7. CleanMyMac X是干嘛的?及最新版功能介绍
  8. kaggle竞赛:泰坦尼克幸存者预测
  9. 基于C#winform的学生信息管理与成绩评价系统
  10. 华为路由器连接小米电视无法联网问题