操作系统需要有一个系统的滴答来提供任务管理的时间依据,bcos中的任务延时及tasklet的定时都是依据系统滴答。系统滴答需要一个定时器来提供时间基准,几乎所有的CPU都会提供一个滴答定时器(SYSTICK)来提供给操作系统使用。我们现在使用的STM32也不例外,下面我们就来看看bcos是如何利用Systick定时器实现系统滴答的。
几乎所有的处理器都会提供一个硬件的Systick定时器用来实现操作系统的滴答计时。下面我们以STM32的Systick为例做简单的介绍。
STM32的Systick定时器是一个24位的向下定时计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的 COUNTFLAG
标志会置位,触发中断 (如果中断使能情况下)。
一般ARM Cortex-M的CMSIS中已经提供了启动Systic的接口(SysTick_Config),用户只要调用该接口就可以设置Systick的reload值并启动计数。启动Systick后每次Systick计数到0后就会触发Systick中断。
b