首页 理论教育 嵌入式系统中的时钟节拍及应用

嵌入式系统中的时钟节拍及应用

时间:2023-11-23 理论教育 版权反馈
【摘要】:时钟节拍是特定的周期性中断,这个中断可以看作系统心脏的脉动。中断之间的时间间隔取决于不同应用,一般为10 ~200 ms,时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。时钟节拍的实际频率取决于用户应用程序的精度。这种错误导致时钟节拍中断有可能在μC/OS-Ⅱ启动第一个任务之前发生,由于此时μC/OS-Ⅱ是处在一种不确定的状态之中,用户应用程序有可能会崩溃。

嵌入式系统中的时钟节拍及应用

μC/OS 需要用户提供周期性信号源,用于实现延时和确认超时。 时钟节拍是特定的周期性中断,这个中断可以看作系统心脏的脉动。 中断之间的时间间隔取决于不同应用,一般为10 ~200 ms,时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。 时钟节拍率越快,系统的额外开销就越大。 时钟节拍的实际频率取决于用户应用程序的精度。

用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。 换句话说,在调用OSStart()之后做的第一件事是初始化定时器中断。 允许时钟节拍器中断放在系统初始化函数OSInit()之后,在调用多任务系统启动函数OSStart()之前是错误的。 这种错误导致时钟节拍中断有可能在μC/OS-Ⅱ启动第一个任务之前发生,由于此时μC/OS-Ⅱ是处在一种不确定的状态之中,用户应用程序有可能会崩溃

μC/OS-Ⅱ中的时钟节拍服务是通过在中断服务子程序中调用OSTimeTick()实现的。OSTimtick()的调用由用户定义的时钟节拍外连函数OSTimTickHook()开始,这个外连函数可以将时钟节拍函数OSTimtick()予以扩展。 首先调用OSTimTickHook()是在时钟节拍中断服务开始的时候,以给用户能完成许多苛刻工作的机会。 OSTimtick()中大量的工作是给每个用户任务控制块OS_TCB 中的时间延时项OSTCBDly 减“1”(如果该项不为零的话)。 OSTimTick()从OSTCBList 开始,沿着OS_TCB 链表做,一直做到空闲任务。 当某任务的任务控制块中的时间延时项OSTCBDly 减到了零,这个任务就进入了就绪态。 而确切被任务挂起函数OSTaskSuspend()挂起的任务,则不会进入就绪态。 OSTimTick()的执行时间直接与应用程序中建立的任务个数成正比。(www.xing528.com)

OSTimeTick()还通过调用OSTime()累加开机以来的时间,用的是一个无符号32 位变量。 需要注意的是,在给OSTime 加“1”之前使用了关中断,因为多数微处理器给32 位数加“1”的操作都得使用多条指令,时钟节拍中断服务子程序利用信号量或邮箱发送信号给这个高优先级的任务。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈