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

发布者:学富五车最新更新时间:2017-02-20 来源: eefocus关键字:FreeRTOS  CortexM3  中断优先级 手机看文章 扫描二维码
随时随地手机看文章

前言

本文将说明在FreeRTOS嵌入式操作系统中,如何设置STM32 Cortex M3和M4系列MCU的中断优先级。

总结

【1】STM32L1系列,STM32F1系列,STM32F4系列,设置NVIC时需要使用NVIC_PriorityGroup_4。

【2】抢占优先级的要比“MAX”更大,而比“LOWEST”更小。例如

configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY=5

configLIBRARY_LOWEST_INTERRUPT_PRIORITY=15

那么NVIC抢占优先级设置的具体值应该比MAX=5更大(包括等于),比LOWEST=15更小(包括等于),也就是说5,6,7,8,9,10,11,12,13,14,15肯定是合法值。

【3】FreeRTOS中,数值越大优先级越高,这种优先级可以成为逻辑优先级。Cortex M3/M4中断中,数值越大优先级越低,这种优先级成为中断优先级。两者相反,所以才会出现比"MAX"更大而比“LOWEST”更小的情况。

示意代码

【FreeRTOSConfig.h】


  1. /* Use the system definition, if there is one */  

  2. #ifdef __NVIC_PRIO_BITS  

  3.     #define configPRIO_BITS       __NVIC_PRIO_BITS  

  4. #else  

  5.     #define configPRIO_BITS       4        /* 15 priority levels */  

  6. #endif  

  7.   

  8. #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY         15  

  9. #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY    5  

  10. /* The lowest priority. */  

  11. #define configKERNEL_INTERRUPT_PRIORITY     ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )  

  12. /* Priority 5, or 95 as only the top four bits are implemented. */  

  13. /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! 

  14. See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */  

  15. #define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )  

【NVIC设置】

【示例A】


  1. NVIC_InitTypeDef NVIC_InitStructure;  

  2. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  

  3.   

  4. NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;  

  5. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY;  

  6. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  7. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  8. NVIC_Init(&NVIC_InitStructure);  

【示例A】


  1. NVIC_InitTypeDef NVIC_InitStructure;  

  2. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  

  3.   

  4. NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;  

  5. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY-1;  

  6. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  7. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  8. NVIC_Init(&NVIC_InitStructure);  

参考博文

【FreeRTOS STM32移植笔记】

【FreeRTOS学习笔记——任务间使用队列同步数据】

【FreeRTOS学习笔记——二值型信号量】

【FreeRTOS学习笔记——互斥型信号量】

【如何在FreeRTOS下实现低功耗——MSP430F5438平台】


参考资料

【1】http://www.freertos.org/RTOS-Cortex-M3-M4.html


关键字:FreeRTOS  CortexM3  中断优先级 引用地址:FreeRTOS CortexM3 M4中断优先级设置总结

上一篇:LwIP学习笔记——STM32 ENC28J60移植与入门
下一篇:STM32使用问题总结

推荐阅读最新更新时间:2024-03-16 15:34

【STM32】中断和中断优先级理解
  在嵌入式系统开发过程中,不可避免的会和“中断”打交道。很多初学者对中断的理解不深,往往是看到中断绕着走。其实不然,费点时间搞懂中断能解决不少问题。   中断英文“Interrupt”,字面很好理解,就是打断的意思。在程序中“Interrupt”打断的自然也是程序。举个例子,有一个遥控的自动避障小车,小车在向前跑的过程中程序一直监测周围环境,实现避障功能,这个时候你想遥控小车停个三分钟,就要用到中断了,也就是打断原有的“监测环境——避障”程序流程。打断的目的就是执行“别跑啦,停下来歇歇”这个程序,我们称中断之后执行的程序为“中断服务函数”。一般情况下,中断服务函数执行完后(小车休息三分钟,或者干其他的事情完事后),会清理一下中断
[单片机]
STM32开发笔记41: 移植FreeRTOS程序后,编译报错的解决方法
单片机型号:STM32F070F6P6 项目希望使用FreeRTOS操作系统,将其移植到自己的工程中后,编译保存,如下图所示。 这个问题,我在https://blog.csdn.net/qingwufeiyang12346/article/details/79782075日志中已经介绍过,在这次移植的开始时,也希望仍然采用原先的方法加以解决,但是涉及到的语句非常多,更改起来非常麻烦。解决这个问题的另外一种方法是,去除CPP11编译,但如果这样就不能使用C++语言。所以还需使用静态库的方法加以解决,具体的就是将FreeRTOS涉及到的所有源文件,去除CPP11编译后,用C99编译为静态库,与其它C++写的程序进行链接使
[单片机]
STM32开发笔记41: 移植<font color='red'>FreeRTOS</font>程序后,编译报错的解决方法
新唐ARM Cortex- M0/M4 MCU新品发表会
台湾新竹-11/05/2013-新唐科技自2010年成功推出以ARM® Cortex™-M0 为内核的32位微控制器 - NuMicro™ 家族后,持续在高性价比微控制器解决方案上开发新产品,迄今已发表多款市场耳熟能详的NUC100、M051、Mini51、Nano100 超低功耗等系列。今年新唐将再度发表多款性能增强之新系列产品:高性能多管脚M058S系列、带内嵌2.0 B标准双CAN (Controller Area Network) 控制器局域网络总线与多组UART串口之NUC230/240系列、最佳成本优势低管脚Mini51F系列与带LCD之超低功耗Nano112系列。且将正式发表基于ARM® Cortex™-M4 内核 3
[单片机]
【二代示波器教程】第15章 FreeRTOS操作系统版本二代示波器实现
15.1 注意事项(重要必读) 1、学习本章节前,务必保证已经学习完毕前面章节。另外,工程代码注释已经比较详细,了解了框架后,直接看源码即可。 2、仅支持800*480分辨率显示屏,如果是电容屏,无需校准。如果是电阻屏,需要校准,按下按键K1即可进入校准界面。 3、由于按键不够用,K1按键的消息处理做了三个条件编译,详情见本章15.6小节。默认K1按键执行触摸校准,也可以选择执行截图或者串口打印任务执行情况。另外,不管当前处于任何界面都可以进行触摸校准,仅电阻屏需要校准,电容屏无需校准。 4、STemWin5.40版本的截图功能有bug,详情看此贴: http://forum.armfly.com/forum.ph
[测试测量]
【二代示波器教程】第15章 <font color='red'>FreeRTOS</font>操作系统版本二代示波器实现
东芝推出TXZ+TM族高级系列基于Arm® Cortex®-M4的新款M4G组MCU
东芝推出TXZ+TM族高级系列中用于高速数据处理基于Arm® Cortex®-M4的新款M4G组微控制器 中国上海,2021年9月8日——东芝电子元件及存储装置株式会社(“东芝”)今日宣布,已开始量产M4G组中用于高速数据处理的20种新器件。M4G组是TXZ+TM族高级系列的新成员,采用40nm工艺制造。这些产品采用带FPU的Arm Cortex-M4内核,运行频率高达200MHz,内部集成2MB代码闪存和32KB数据闪存,具有10万次的写入周期耐久性,此外还提供了丰富的接口和通信选项。因此,M4G组器件非常适用于办公设备、楼宇和工厂自动化应用。 M4G组中的微控制器配置增强型的通信功能,除UART、FUART、TS
[单片机]
东芝推出TXZ+TM族高级系列基于Arm® Cortex®-<font color='red'>M4</font>的新款M4G组MCU
【STM32】NVIC中断优先级管理(中断向量表)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第9章 中断和事件 Cortex-M3内核支持256个中断,其中包含了16个内核中断(异常)和240个外部中断,并且具有256级的可编程中断设置。但是,STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有84个中断,包括16个内核中断(异常)和68个可屏蔽中断,具有16级可编程的中断优先级。而STM32F103系列上面,16个内核中断(异常)不变,而可屏蔽中断只有60个(在107系列才有68个)。 注意一下:CM3的外部中断和STM32的外部中断不是一个概念。CM3:除了内核异常之外的都是外部中断;STM32:外部中断EXTI只有6个
[单片机]
【STM32】NVIC<font color='red'>中断优先级</font>管理(中断向量表)
STM32中断优先级分组概念
在进行STM32f103的时候,进行中断分组的相关概念 Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下: 第0组:所有4位用于指定响应优先级 第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级 第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级 第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级 第4组:所有4位用于指定抢占式优先级 可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种: NV
[单片机]
MCS-51系统中断优先级的软扩展
摘要:鉴于MCS-51系统只提供“二级中断嵌套”,提出扩展51系统中断优先级的纯软件方法。其利用51系统内建的中断允许寄存器IE和中断优先级寄存器IP,通过屏蔽字机制来实现;以C51的形式,给出这种扩展方法的函数库实现,为该方法的使用赋予友好、简洁的用户接口。 关键词:MCS-51单片机 中断优先级 软扩展 C51 引言 众所周知,MCS-51系统只提供“二级中断嵌套”,而大多数嵌入式系统希望有多于两级的优先级别。因为一般来说,系统都有掉电中断,且应置为最高优先级,这样所有其它中断只能共用一个最低优先级,如此,往往不能满足实际的逻辑需求。为了使系统具有多于两级的中断优先级别,可以利用8259A之类的中断控制芯片实现中断优先
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved