13.4.2 触发PendSV中断和开启节拍定时器SysTick

更新于 2026年10月10日 版权声明
13.4.2 触发PendSV中断和开启节拍定时器SysTick

FreeRTOS在ARM Cortex-M3内核的处理器上运行,任务切换是通过内核的一种软件中断PendSV来实现的,要理解任务切换,这是重要的知识。

为什么会开启节拍定时器SysTick呢?因为RTOS通过节拍定时器SysTick的中断服务来实时检测各任务的运行情况,让任务在就绪、运行、阻塞和挂起间切换。FreeRTOS在节拍定时器SysTick中断过程中调用xTaskIncrementTick()函数,节拍定时器SysTick就好比人的心脏,在不停地发生跳动。

触发PendSV中断和开启节拍定时器SysTick是通过xPortStartScheduler()函数来实现的,该函数位于“port.c”文件中,主要的内容如下。

图示

主要语句功能如下。

①设置PendSV优先级为最低。(https://www.daowen.com)

②设置SysTick优先级为最低。

③初始化节拍定时器SysTick,此处是直接采用寄存器的方式配置初值,代码如下。

图示

以上程序中的configSYSTICK_CLOCK_HZ是STM32 F1系列MCU的系统时钟,应用时要特别注意,它是通过一个宏来定义的,与CPU的系统时钟对应。configTICK_RATE_HZ是节拍值,在配置文件中定义,可以修改。第一条语句是装载初值,第二条语句是开启节拍定时器SysTick。

④初始化临界区嵌套计数器,也就是中断的嵌套层数。

⑤调用prvStartFirstTask()函数开启第一个任务,第一次启动调用。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)