ucos 时钟节拍_UCOS----时钟节拍源码分析

时钟节拍类似于人体心脏的跳动,人体依赖心脏的跳动将血液输入身体各个部位,支撑生命活动。时钟节拍的是操作系统的时基,操作系统依赖于时钟节拍推动 CPU 去执行指令。

1 时钟节拍原理

时钟节拍是系统以固定的频率产生中断(时基中断),并在中断处理与时间相关的事件,推动所有任务向前运行。时钟节拍需要依赖于硬件定时器,STM32 通常使用 systick 时钟作为 MCU 的内核定时器。

2 系统时钟初始化

初始化流程

void BSP_Tick_Init (void)

{

CPU_INT32U cpu_clk_freq;

CPU_INT32U cnts;

//获取CPU内核时钟频率(SysTick 工作时钟)

cpu_clk_freq = BSP_CPU_ClkFreq();

//根据用户设置的时钟节拍频率计算 SysTick 定时器的计数值

#if (OS_VERSION >= 30000u)

/* Determine nbr SysTick increments */

cnts = (cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz);

#else

/* Determine nbr SysTick increments. */

cnts = (cpu_clk_freq / (CPU_INT32U)OS_TICKS_PER_SEC);

#endif

//调用 SysTick 初始化函数,设定定时器的计数值,并启动定时器

/* Init uC/OS periodic time src (SysTick). */

OS_CPU_SysTickInit(cnts);

}

3 系统时钟中断管理

根据系统时钟的初始化,在系统计数达到后,产生时钟中断,并调用中断处理函数 OS_CPU_SysTickHandler。

/*

*********************************************************************************************************

* SYS TICK HANDLER

*

* Description: Handle the system tick (SysTick) interrupt, which is used to generate the uC/OS-II tick

* interrupt.

*

* Arguments : None.

*

* Note(s) : 1) This function MUST be placed on entry 15 of the Cortex-M3 vector table.

*********************************************************************************************************

*/

void OS_CPU_SysTickHandler (void)

{

CPU_SR_ALLOC(); //分配保存中断状态的局部变量,后面关中断的时候可以保存中断状态

//ISR表示 interrupt service routine

//CPU_CRITICAL_ENTER 和 CPU_CRITICAL_EXIT 之间形成临界区,避免期间程序运

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值