2.FreeRTOS中断优先级和任务优先级 您所在的位置:网站首页 freertos中断优先级 2.FreeRTOS中断优先级和任务优先级

2.FreeRTOS中断优先级和任务优先级

2024-05-21 23:08| 来源: 网络整理| 查看: 265

FreeRTOS中断优先级和任务优先级

架构:Cortex-M3

版本:FreeRTOS V9.0.0

前言:

最开始,我并没有搞清楚什么是中断优先级和任务优先级,但看了部分资料后发现这两个并没有半毛钱关系,于是便有了这篇笔记,本篇文章以Cortex-M3(STM32F103)为例子。

目录FreeRTOS中断优先级和任务优先级1.Cortex-M3的中断优先级1.1 PendSV和SysTick的中断优先级1.1.2 在FreeRTOS中关闭中断1.1.3 FreeRTOS利用关闭中断实现临界代码区的保护1.1.3.1普通临界区1.1.3.2中断临界区2. FreeRTOS 的任务优先级

1.Cortex-M3的中断优先级

​ 根据Cortex-M3权威指南,每个外部中断都有一个可编程的中断优先级寄存器。并且记住优先级越大在这个寄存器的值是越小的。在STM32F103中,该寄存器的高四位才是代表优先级值,低四位没用。

​ 优先级分组寄存器PRIGROUP,把优先级分为抢占优先级和子优先级,一般为了方便,我们把它设为NVIC_PriorityGroup_4,意思就是4个bit都为抢占优先级,所以一共是0~15个级别的优先级,0的最优先级大,15的最优先级小。

1.1 PendSV和SysTick的中断优先级

​ 在FreeRTOS中SysTick和PendSV的优先级都是最低的,具体在开启调度器函数BaseType_t xPortStartScheduler( void )里面赋值:

/* Make PendSV and SysTick the lowest priority interrupts. */ portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;

portNVIC_SYSPRI2_REG实际上是0xE000_ED20-0xE000_ED23(一共四字节),22-23分别是设置PendSV和Systick优先级的寄存器。portNVIC_PENDSV_PRI和portNVIC_SYSTICK_PRI**的值具体展开:

1. #define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */ 2. #define configPRIO_BITS __NVIC_PRIO_BITS 3. #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //中断最低优先级 4. #define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有