ucosii的系统时钟来源

demi的头像

在ucosii中,系统时钟如同一个人的心跳,它为整个系统提供一个运行基时,对任务调度至关重要。

ucosii的系统时钟一般是由MCU内部定时器产生(可靠性高),也可以使用协处理器或者外部时钟提供(可靠性低)。使用时钟源有一个特别需要注意的地方:用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。

下面对使用MCU内部定时器方式产生系统时钟方式做个解析。

在main()函数中,我们会建立一个AppTaskStart()任务,此任务中,我们会初始化硬件BSP_Init()。其中,最重要的一点就是初始化时钟BSP_Tick_Init(),实际上就是分配一个MCU的定时器给ucosii使用。定时器必须打开中断,因为定时器中断服务程序中,我们必须要调用OS_CORE.c中的系统时钟节拍函数OSTimeTick()。看到这里,我们终于找到系统时钟和MCU的定时器之间的关系了。

既然系统时钟是如此的重要,它的主要工作是做什么,又是怎样服务于ucosii系统的呢?

翻看ucosii源码,一切都呈现在眼前,部分截图如下:
ucosii的系统时钟来源

OSTimeTick()最重要的工作就是将调用延时的任务的OSTCBDly减1,然后看任务延时是否到达。但注意:OSTimeTick()并不会进行任务调度,只是将满足条件的任务放入到就绪表中而已。

来源:博客园 - xiaokangkp0602