精华内容
下载资源
问答
  • FreeRTOS CortexM3 M4中断优先级设置总结

    万次阅读 2016-12-08 13:13:23
    前言本文将说明在FreeRTOS嵌入式操作系统中,如何设置STM32 Cortex M3和M4系列MCU的中断优先级。总结【1】STM32L1系列,STM32F1系列,STM32F4系列,设置NVIC时需要使用NVIC_PriorityGroup_4。【2】抢占优先级的要比...
    前言
    本文将说明在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】
    /* Use the system definition, if there is one */
    #ifdef __NVIC_PRIO_BITS
    	#define configPRIO_BITS       __NVIC_PRIO_BITS
    #else
    	#define configPRIO_BITS       4        /* 15 priority levels */
    #endif
    
    #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY			15
    #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	5
    /* The lowest priority. */
    #define configKERNEL_INTERRUPT_PRIORITY 	( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
    /* Priority 5, or 95 as only the top four bits are implemented. */
    /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
    See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
    #define configMAX_SYSCALL_INTERRUPT_PRIORITY 	( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
    【NVIC设置】
    【示例A】
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    【示例A】
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY-1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    参考资料
    【1】 http://www.freertos.org/RTOS-Cortex-M3-M4.html


    展开全文
  • 前言本文将说明在FreeRTOS嵌入式操作系统中,如何设置STM32 Cortex M3和M4系列MCU的中断优先级。总结 【1】STM32L1系列,STM32F1系列,STM32F4系列,设置NVIC时需要使用NVIC_PriorityGroup_4。 ...

    转自:https://blog.csdn.net/xukai871105/article/details/53516857

    前言
    本文将说明在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】

    /* Use the system definition, if there is one */
    #ifdef __NVIC_PRIO_BITS
    #define configPRIO_BITS __NVIC_PRIO_BITS
    #else
    #define configPRIO_BITS 4 /* 15 priority levels */
    #endif
    
    #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY    15
    #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY    5
    /* The lowest priority. */
    #define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
    /* Priority 5, or 95 as only the top four bits are implemented. */
    /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
    See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
    #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

    【NVIC设置】
    【示例A】

    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    【示例A】

    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY-1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

     

    转载于:https://www.cnblogs.com/aaronLinux/p/11108140.html

    展开全文
  • 在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这两个宏: ... FreeRTOSCortex-M内核可谓是绝配,以至于让移植和使用FreeRT

          在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这两个宏:

    • configKERNEL_INTERRUPT_PRIORITY
    • configMAX_SYSCALL_INTERRUPT_PRIORITY

           FreeRTOS与Cortex-M内核可谓是绝配,以至于让移植和使用FreeRTOS都变得更简单起来。根据FreeRTOS官方反馈,在Cortex-M内核上使用FreeRTOS大多数的问题点是由不正确的优先级设置引起的。这个问题也是在意料之中的,因为尽管Cortex-M内核的中断模式是非常强大的,但对于那些使用传统中断优先级架构的工程师来说,Cortex-M内核中断机制也有点笨拙(或者是说使用比较繁琐),并且违反直觉(这个主要是因为Cortex-M中断优先级数值越大代表的优先级反而越小)。本章打算描述Cortex-M的中断优先级机制,并描述怎样结合RTOS内核使用。

           说明:虽然Cortex-M内核的优先级方案看上去比较复杂,但每一个官方发布的FreeRTOS 接口包(在FreeRTOSV7.2.0\FreeRTOS\Source\portable文件夹中,一般为port.c)内都会有正确配置的演示例程,可以以此为参考。

    1.有效优先级

    1.1Cortex-M 硬件详述

           首先需要清楚有效优先级的总数,这取决于微控制器制造商怎么使用Cortex内核。所以,并不是所有的Cortex-M内核微处理器都具有相同的中断优先级级别。

           Cortex-M构架自身最多允许256级可编程优先级(优先级配置寄存器最多8位,所以优先级范围从0x00~0xFF),但是绝大多数微控制器制造商只是使用其中的一部分优先级。比如,TI Stellaris Cortex-M3和Cortex-M4微控制器使用优先级配置寄存器的3个位,能提供8级优先级。再比如,NXP LPC17xx Cortex-M3微控制器使用优先级配置寄存器的5个位,能提供32级优先级。

    1.2应用到RTOS

           RTOS中断嵌套方案将有效的中断优先级分成两组:一组可以通过RTOS临界区屏蔽,另一组不受RTOS影响,永远都是使能的。宏configMAX_SYSCALL_INTERRUPT_PRIORITY在FreeRTOSConfig.h中配置,定义两组中断优先级的边界。逻辑优先级高于此值的中断不受RTOS影响。最优值取决于微控制器使用的优先级配置寄存器的位数。

    2.与数值相反的优先级值和逻辑优先级设置

    2.1Cortex-M 硬件详述

           有必要先解释一下优先级值和逻辑优先级:在Cortex-M内核中,假如有8级优先级,我们说优先级值是0~7,但数值最大的优先级7却代表着最低的逻辑优先级。很多使用传统传统中断优先级架构的工程师会觉得这样比较绕,违反直觉。以下内容提到的优先级要仔细区分是优先级数值还是逻辑优先级。

           接下来需要清楚的是,在Cortex-M内核中,一个中断的优先级数值越低,逻辑优先级却越高。比如,中断优先级为2的中断可以抢占中断优先级为5的中断,但反过来就不行。换句话说,中断优先级2比中断优先级5的优先级更高。

           这是Cortex-M内核最容易让人犯错之处,因为大多数的非Cortex-M内核微控制器的中断优先级表述是与之相反的。

    2.2应用到 RTOS

           以“FromISR”结尾的FreeRTOS函数是具有中断调用保护的(执行这些函数会进入临界区),但是就算是这些函数,也不可以被逻辑优先级高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断服务函数调用。(宏configMAX_SYSCALL_INTERRUPT_PRIORITY定义在头文件FreeRTOSConfig.h中)。因此,任何使用RTOSAPI函数的中断服务例程的中断优先级数值大于等于configMAX_SYSCALL_INTERRUPT_PRIORITY宏的值。这样就能保证中断的逻辑优先级等于或低于configMAX_SYSCALL_INTERRUPT_PRIORITY。

           Cortex中断默认情况下有一个数值为0的优先级。大多数情况下0代表最高级优先级。因此,绝对不可以在优先级为0的中断服务例程中调用RTOSAPI函数。

    3.Cortex-M 内部优先级概述

    3.1Cortex-M 硬件详述

           Cortex-M内核的中断优先级寄存器是以最高位(MSB)对齐的。比如,如果使用了3位来表达优先级,则这3个位位于中断优先级寄存器的bit5、bit6、bit7位。剩余的bit0~bit4可以设置成任何值,但为了兼容,最好将他们设置成1.

           Cortex-M优先级寄存器最多有8位,如果一个微控制器只使用了其中的3位,那么这3位是以最高位对齐的,见下图:


          某微控制器只使用了优先级寄存器中的3位,下图展示了优先级数值5(二进制101B)是怎样在优先级寄存器中存储的。如果优先级寄存器中未使用的位置1,下图也展示了为什么数值5(二进制0000 0101B)可以看成数值191(二进制1011 1111)的。


          某微控制器只使用了优先级寄存器中的4位,下图展示了优先级数值5(二进制101B)是怎样在优先级寄存器中存储的。如果优先级寄存器中未使用的位置1,下图也展示了为什么数值5(二进制0000 0101B)可以看成数值95(二进制0101 1111)的。


    3.2应用到 RTOS

          上文中已经描述,那些在中断服务例程中调用RTOS API函数的中断逻辑优先级必须低于或等于configMAX_SYSCALL_INTERRUPT_PRIORITY(低逻辑优先级意味着高优先级数值)。

          CMSIS以及不同的微控制器供应商提供了可以设置某个中断优先级的库函数。一些库函数的参数使用最低位对齐,另一些库函数的参数可能使用最高位对齐,所以,使用时应该查阅库函数的应用手册进行正确设置。

          可以在FreeRTOSConfig.h中设置宏configMAX_SYSCALL_INTERRUPT_PRIORITY和configKERNEL_INTERRUPT_PRIORITY的值。这两个宏需要根据Cortex-M内核自身的情况进行设置,要以最高有效位对齐。比如某微控制器使用中断优先级寄存器中的3位,设置configKERNEL_INTERRUPT_PRIORITY的值为5,则代码为:

    #define     configKERNEL_INTERRUPT_PRIORITY  (5<<(8-3))

           宏configKERNEL_INTERRUPT_PRIORITY指定RTOS内核使用的中断优先级,因为RTOS内核不可以抢占用户任务,因此这个宏一般设置为硬件支持的最小优先级。对于Cortex-M硬件,RTOS使用到硬件的PendSV和SysTick硬件中断,在函数xPortStartScheduler()中(该函数在port.c中,由启动调度器函数vTaskStartScheduler()调用),将PendSV和SysTick硬件中断优先级寄存器设置为宏configKERNEL_INTERRUPT_PRIORITY指定的值。

           有关代码如下(位于port.c):

    /*PendSV优先级设置寄存器地址为0xe000ed22
     SysTick优先级设置寄存器地址为0xe000ed23*/
    #define portNVIC_SYSPRI2_REG     ( * ( ( volatile uint32_t * ) 0xe000ed20 ))
     
    #define portNVIC_PENDSV_PRI ( ( (uint32_t)configKERNEL_INTERRUPT_PRIORITY ) << 16UL )
    #define portNVIC_SYSTICK_PRI ( ( (uint32_t)configKERNEL_INTERRUPT_PRIORITY ) << 24UL )
    /* …. */
    /*确保PendSV 和SysTick为最低优先级中断 */
    portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
    portNVIC_SYSPRI2_REG |=portNVIC_SYSTICK_PRI;

    4.临界区

    4.1Cortex-M 硬件详述

          RTOS内核使用Cortex-M内核的BASEPRI寄存器来实现临界区(注:BASEPRI为优先级屏蔽寄存器,优先级数值大于或等于该寄存器的中断都会被屏蔽,优先级数值越大,逻辑优先级越低,但是为零时不屏蔽任何中断)。这允许RTOS内核可以只屏蔽一部分中断,因此可以提供一个灵活的中断嵌套模式。

          那些需要在中断调用时保护的API函数,FreeRTOS使用寄存器BASEPRI实现中断保护临界区。当进入临界区时,将寄存器BASEPRI的值设置成configMAX_SYSCALL_INTERRUPT_PRIORITY,当退出临界区时,将寄存器BASEPRI的值设置成0。很多Bug反馈都提到,当退出临界区时不应该将寄存器设置成0,应该恢复它之前的状态(之前的状态不一定是0)。但是Cortex-M NVIC决不会允许一个低优先级中断抢占当前正在执行的高优先级中断,不管BASEPRI寄存器中是什么值。与进入临界区前先保存BASEPRI的值,退出临界区再恢复的方法相比,退出临界区时将BASEPRI寄存器设置成0的方法可以获得更快的执行速度。

    4.2应用到RTOS kernel

          RTOS内核通过写configMAX_SYSCALL_INTERRUPT_PRIORITY的值到BASEPRI寄存器的方法创建临界区。中断优先级0(具有最高的逻辑优先级)不能被BASEPRI寄存器屏蔽,因此,configMAX_SYSCALL_INTERRUPT_PRIORITY绝不可以设置成0。

    展开全文
  • 说明:本文翻译自Erich Styger的文章《Implementing FreeRTOS Performance Counters on ARM Cortex-M》,文章的权属属于原作者。 当使用像FreeRTOS这样的RTOS时,迟早要问一个问题:每个任务花费多少时间?基于...

    说明:本文翻译自Erich Styger的文章《Implementing FreeRTOS Performance Counters on ARM Cortex-M》,文章的权属属于原作者。

    当使用像FreeRTOS这样的RTOS时,迟早要问一个问题:每个任务花费多少时间?基于EclipseMCUXpresso IDE具有很好的视图,准确显示了此类信息:

                                                                            FreeRTOS运行时信息

    为了使FreeRTOS(或任务列表视图)显示非常有用的信息,开发人员必须提供帮助,以便RTOS可以收集此信息。本文说明如何在ARM Cortex-M上完成此操作。

    1、概述

    不久前,我从处理器专家的角度讨论FreeRTOS的性能和运行时分析中的该主题。这次是关于使用本机” FreeRTOS和使用NXP MCUXpresso SDK,但是相同的原理将适用于Cortex-M处理器和微控制器的所有其他环境。至于FreeRTOS端口,我正在使用https://github.com/ErichStyger/McuOnEclipseLibrary中的端口,因为该端口已经存在所有需要的钩子。GitHub提供了本文中使用的所有文件和源。

    2、如何工作

    操作系统使用计数器来衡量任务执行时间。因此,在任务上下文切换时间,此计数器用于确定该任务使用的时间。重要的一点是,该时间不是绝对的(例如37毫秒),而是一些滴答声(例如241个滴答声)。RTOS知道总体上使用了多少滴答声RTOS知道系统中有多少个任务,因此它可以显示每个任务花费了总时间的百分比。另一个要注意的是,时间*包括*在中断中花费的时间。

    这是一种非常简单但功能强大的估算任务执行时间的方法,通常就是您所需要的。它可以通过一种非常简单的方式来实现:使用一个使计数器递增的计时器和一个用于读取计数器值的函数。

    要打开性能测量,我必须启用两个FreeRTOS配置设置:

    #define configUSE_TRACE_FACILITY 1 /* 1: include additional structure members and functions to assist with execution visualization and tracing, 0: no runtime stats/trace */
    
    #define configGENERATE_RUN_TIME_STATS 1 /* 1: generate runtime statistics; 0: no runtime statistics */

    要配置计时器并读取计数器,我必须使用两个宏来告诉函数名称:

    #define configGET_RUNTIMER_COUNTER_VALUE_FROM_ISR   AppGetRuntimeCounterValueFromISR
    
    #define configCONFIGURE_TIMER_FOR_RUNTIME_STATS     AppConfigureTimerForRuntimeStats

    3、使用滴答计数器

    一种非常简单的衡量任务执行情况的方法是使用FreeRTOS滴答计数器本身。可以通过以下方式启用

    #define configGENERATE_RUN_TIME_STATS_USE_TICKS     (1)

    但是,这仅在任务执行时间超过RTOS滴答周期时才能测量任务执行时间。对于更快的任务,此方法没有用。根据Nyquist-Shannon采样定理,我最好使用2倍(更好:10倍)的测量频率。

    4、使用Cortex-M周期计数器

    实现该计数器的另一种方法是使用Cortex-M周期计数器,该计数器已在许多设备上实现,并给出了很好的结果。最好的是:无需中断或额外的计时器。可能的实现如下所示:

    static uint32_t prevCycleCounter, cycleCntCounter = 0;
    
    void AppConfigureTimerForRuntimeStats(void) {
      cycleCntCounter = 0;
      McuArmTools_InitCycleCounter();
      prevCycleCounter = McuArmTools_GetCycleCounter();
    }
    
    uint32_t AppGetRuntimeCounterValueFromISR(void) {
      uint32_t newCntr, diff;
    
      newCntr = McuArmTools_GetCycleCounter();
      diff = newCntr-prevCycleCounter;
      prevCycleCounter = newCntr;
      cycleCntCounter += diff>>12; /* scale down the counter */
      return cycleCntCounter;
    }

    5、使用定期定时器中断

    标准方法是使用定期中断计时器,该计时器增加计数器。对于1 kHz滴答计时器,推荐的频率是FreeRTOS滴答计时器频率的10倍,在这种情况下为10 kHz100 us):

    static uint32_t perfCounter = 0;
    
    #define PIT_BASEADDR       PIT
    #define PIT_SOURCE_CLOCK   CLOCK_GetFreq(kCLOCK_BusClk)
    #define PIT_CHANNEL        kPIT_Chnl_0
    #define PIT_HANDLER        PIT0_IRQHandler
    #define PIT_IRQ_ID         PIT0_IRQn
    
    void PIT_HANDLER(void) {
      PIT_ClearStatusFlags(PIT_BASEADDR, PIT_CHANNEL, kPIT_TimerFlag);
      perfCounter++;
      __DSB();
    }
    
    void AppConfigureTimerForRuntimeStats(void) {
      pit_config_t config;
    
      PIT_GetDefaultConfig(&config);
      config.enableRunInDebug = false;
      PIT_Init(PIT_BASEADDR, &config);
      PIT_SetTimerPeriod(PIT_BASEADDR, PIT_CHANNEL, USEC_TO_COUNT(100U, PIT_SOURCE_CLOCK));
      PIT_EnableInterrupts(PIT_BASEADDR, PIT_CHANNEL, kPIT_TimerInterruptEnable);
      NVIC_SetPriority(PIT_IRQ_ID, 0);
      EnableIRQ(PIT_IRQ_ID);
      PIT_StartTimer(PIT_BASEADDR, PIT_CHANNEL);
    }
    
    uint32_t AppGetRuntimeCounterValueFromISR(void) {
      return perfCounter;
    }

    6、摘要

    FreeRTOS包含一项功能,可以测量相对于系统中其他任务的任务执行时间。我需要提供的是计时器或某种计数器的初始化例程,以及获取计数器值的方法。如果您对检查FreeRTOS计时的其他方式感兴趣,请查看Percepio TracealyzerSegger SystemView。如果您希望应用程序本身显示性能数据,请查看“ 使用FreeRTOS进行性能和运行时分析介绍的Shell / Commandline实现。

    7、链接

    欢迎关注:

    展开全文
  • 0. FreeRTOS配置 1. void prvStartFirstTask( void ) 2. void vPortSVCHandler( void ) 3. void xPortPendSVHandler( void ) 4. StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunctio.....
  • 在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这...FreeRTOSCortex-M内核可谓是绝配,以至于让移植和使用FreeRTOS都变得更简单起来...
  • 在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这两个宏: ...根据FreeRTOS官方反馈,在Cortex-M内核上使用FreeRTOS大多数的问题点...
  • ARM Cortex-M3与Cortex-M4权威指南.pdf, 1.深入了解Cortex-M架构 2.学习FreeRTOS之前,详细学习的基础知识
  • FreeRTOS系列第5篇---FreeRTOSCortex-M3上的移植

    万次阅读 多人点赞 2015-11-27 16:38:46
    1. FreeRTOS下载包的文件结构 在FreeRTOS官方网站可以下载到最新版...《FreeRTOS入门指南》一文的第3节详细描述了下载包文件结构,我们这里只是简单提一下。 下载包根目录下包含两个子目录:FreeRTOSFreeRTOS-Plus
  • 关中断 //关闭所有中断 void INTX_DISABLE(void) { __ASM volatile("cpsid i"); } 开中断 //开启所有中断 void INTX_ENABLE(void) { __ASM volatile("cpsie i"); }
  • 在ARM CORTEX-M内核上运行FreeRTOS

    千次阅读 2017-02-16 11:41:18
    英文原文:http://www.freertos.org/RTOS-Cortex-M3-M4.html 注意 文章中关于中断嵌套的信息仅适用于Cortex-M3,Cortex-M4,Cortex-M4F和Cortex-M7,文章不适用于CORTEX-M0和CORTEX-M0+内核,因为CORTEX-M0和CORTEX...
  • 翻译自FreeRTOS官网文档,原文网址:http://www.freertos.org/RTOS-Cortex-M3-M4.html ... 数以千计的FreeRTOS应用运行在ARM Cortex-M内核上。令人惊奇的是,RTOS与Cortex-M内核组合使用,使得技术支持请求变得...
  • FreeRTOS:在ARM Cortex-M内核上运行RTOS

    千次阅读 2019-02-17 17:24:41
    注意:以下关于中断嵌套的信息适用于Cortex-M3...数以千计的应用在ARM Cortex-M内核上运行FreeRTOS。令人吃惊的是,很少有关于这个RTOS和ARM Cortex内核组合的技术支持请求。但是,确实存在大量由于不正确设置中断优...
  • 一,Cortex-M内核的MCU都有NVIC  1,中断是由硬件产生的。  2,与中断有关的寄存器都在NVIC和SCB中。只能在特权级下访问。  3Cortex-M3和M4的NVIC最多支持240个IRQ、1个NMI、一个SysTick定时器中断和多个...
  • FreeRTOS下载包的文件结构 ...《FreeRTOS入门指南》一文的第3节详细描述了下载包文件结构,我们这里只是简单提一下。 下载包根目录下包含两个子目录:FreeRTOSFreeRTOS-Plus。其中,FreeRTOS-Plus文件夹中包含...
  • Cortex - M中断
  • 在ARM Cortex-M平台上移植FreeRTOS

    千次阅读 2018-10-18 15:48:19
    1、 在Cortex-M3硬件下,FreeRTOS使用SysTick作为系统节拍时钟,使用SVC和PendSVC进行上下文切换。异常中断服务代码位于port.c文件中,其入口地址可以在启动文件中设置。打开启动文件startup.s,并在__heap_limit...
  • 移植过程 1 添加RTOS核心代码 将tasks.c、queue.c和list.c这三个内核代码加入...port.c位于FreeRTOS\Source\portable\RVDS\ARM_CM3文件夹下,heap_1.c位于FreeRTOS/Source/portable/MemMang文件夹下。 2 添加头文件...
  • FreeRTOS入门指南》一文的第3节详细描述了下载包文件结构,我们这里只是简单提一下。 下载包根目录下包含两个子目录:FreeRTOSFreeRTOS-Plus。其中,FreeRTOS-Plus文件夹中包含一些FreeRTOS+组件和演示例程...
  • cortex m

    2021-06-14 15:10:08
    startup.s 初始化堆栈,BLX SystemInit后,BX __main stm32固件库\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup中startup_stm32f10x_ld.s freertos例程中STM32F10x.s 华大模板中startup_hc32f460keta.s Q:堆栈...
  • CortexM角度 Cortex-M构架自身最多允许256级可编程优先级(优先级配置寄存器最多8位,所以优先级范围从0x00~0xFF), 是绝大多数微控制器制造商只是使用其中的一部分优先级 NXP 1062 使用了其中的高4bits,所以中断...
  •   由于不同的Cortex-M系列,其中断优先级是不一样的,所以事先搞清楚所用MCU的中断优先级有几种。在CMSIS 库中的头文件中可以查看优先级的数量 __NVIC_PRIO_BITS   FreeRTOS的中断嵌套结构被分为两组,一组为被...
  • CortexM1.rar

    2019-08-19 21:38:51
    使用Xilinx ZYNQ搭建的Cortex-M1软核工程,展示软核如何搭建嵌入式,配合教程使用。
  • STM32F10xxx/20xxx/21xxx/L1xxxx Cortex ® -M3 programming manual STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced Arm ® -based 32-bit MCUs Reference manual Procedure Cal...
  • 知识点1 /*< STM32G0xx uses 2 Bits for the Priority Levels */ ...在Cortex-M0 上,FreeRTOS内核的临界区屏蔽了所有中断(除了NMI、HardFault、复位)。 知识点3 FreeRTOS 任务优先级从0开始,作为最低的紧...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,178
精华内容 471
关键字:

cortexm3的freertos