微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 解析UC/OS-II时钟中断技术

解析UC/OS-II时钟中断技术

时间:08-01 来源:互联网 点击:

用户定义的时钟节拍外连函数OSTimeTickHook (),以及对所有任务的延时时间进行递减,并把到期的任务链入到链表OSTCBRList中,OSTCBRList管理所有到期任务。OSTimeTask()函数伪代码如下:

void OSTimeTask() {

OSTimeTickHook()//用户定义的时间处理函数

while { (除空闲任务外的所有任务)

对所有任务的延时时间进行递减;

把所有要到期的任务链入到OSTCBRList链表中;

}

任务状态改为睡眠,调用OSSched ()进行任务调度;

}

在任务OSTimeTask()中,执行原来在时钟中断处理的用户函数OSTimeIickHook (),并实现将延时到期的任务链入到OSTCBRList链表中,这样在时钟中断程序中就只需要扫描任务到期的链表而不需要扫描整个链表,减少了关中断的时间。OSTCBRList为新建链表,它管理所有到期的任务。

同时,需要减少OSTimeTick ()的执行工作量,只对OSTCBRList链表扫描,这样也减少了关中断时间。OSTimeTick ()伪代码如下:

void OSTimeTick(void) {

OSTime++;

OS_TCB* ptcb=OSTCBList;// OSTCBRList指向所有到期任务的链表

while(ptchb!=null){

关中断;

唤醒任务;

开中断;

指针指向下一个任务;

}

}

3、 小结

本文以开源的嵌入式操作系统μC/OSII为例,分析了操作系统的中断机制和中断应满足的条件。介绍了μC/OSII系统时钟节拍,探讨了时钟中断函数中存在的不足,并且给出了解决方案,从而有效提高了中断响应速度和μC/OSII的时钟精确度。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top