当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]μC/OSII中的时钟中断技术研究

1 系统中断与时钟节拍

1.1 系统中断

  中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被系统识别,CPU则保存部分(或全部)现场(context),即部分(或全部)寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后执行任务调度,程序回到就绪态优先级最高的任务开始运行(对于可剥夺型内核)。

  中断使得CPU可以在事件发生时才予以处理,而不必让微处理器连续不断地查询(polling)是否有事件发生。通过两条特殊指令:关中断(disable interrupt)和开中断(enable interrupt)可以让微处理器不响应或响应中断。在实时环境中,关中断的时间应尽量的短,关中断影响中断响应时间,关中断时间太长可能会引起中断丢失。中断服务的处理时间应该尽可能的短,中断服务所做的事情应该尽可能的少,应把大部分工作留给任务去做。

1.2 系统时钟节拍

  时钟节拍是特定的周期性中断(时钟中断),这个中断可以看作是系统心脏的脉动。操作系统通过时钟中断来确定时间间隔,实现时间的延时及确定任务超时。中断之间的时间间隔取决于不同的应用,一般在10~200 ms之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时提供等待超时的依据。时钟节拍频率越快,系统的额外开销就越大。系统定义了32位无符号整数OSTime来记录系统启动后时钟滴答的数目。用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。μC/OSII中的时钟节拍服务是通过在中断服务子程序中调用OSTimeTick()实现的。时钟节拍中断服务子程序的示意代码如下:

void OSTickISR(void) {
  保存处理器寄存器的值;
  调用OSIntEnter ()或是将OSIntNesting加1;
  调用OSTimeTick ();
  调用OSIntExit ();
  恢复处理器寄存器的值;
  执行中断返回指令;
}

2 时钟管理系统

2.1 μC/OSII时钟管理系统

  μC/OSII原有的时钟管理系统类似于Linux,但是比Linux简单得多。它仅向用户提供一个周期性的信号OSTime,时钟频率可以设置在10~100 Hz,时钟硬件周期性地向CPU发出时钟中断,系统周期性响应时钟中断,每次时钟中断到来时,中断处理程序更新一个全局变量OSTime。μC/OSII时钟中断服务程序的核心是调用OSTimeTick ()函数。OSTimeTick ()函数用来判断延时任务是否延时结束从而将其置于就绪态。其程序伪代码如下:

void OSTimeTick(void) {
 OSTimeTickHook();// 调用用户定义的时钟节拍外连函数
 while { (除空闲任务外的所有任务)
  OS_ENTER_CRITICAL();//关中断
  对所有任务的延时时间递减;
  扫描时间到期的任务,并且唤醒该任务;
  OS_EXIT_CRITICAL();//开中断
  指针指向下一个任务;
  }
  OSTime++;//累计从开机以来的时间
}

  在μC/OSII的时钟节拍函数中,需要执行用户定义的时钟节拍外连函数OSTimeTickHook (),以及对任务链表进行扫描并且递减任务的延时。这样就造成了时钟节拍函数OSTimeTick ()有两点不
足:

  ① 在时钟中断中处理额外的任务OSTimeIickHook (),这样增加了中断处理的负担,影响了定时服务的准确性;

  ② 在关中断情况下扫描任务链表,任务越多所需要时间越长,而长时间关中断对中断响应有不利影响,是中断处理应当避免的。

2.2 改进的时钟管理系统

  针对上述OSTimeTick ()的不足之处,需加以改进来优化时钟节拍函数。在Linux中一般对中断的响应分为两部分:立即中断服务和底半中断处理(bottom half)。立即中断服务仅仅做重要的并且能快速完成的工作,而把不太重要的需要较长时间完成的工作放在底半处理部分来完成,这样就可以提高中断响应速度。

  μC/OSII不支持底半处理,为了减轻时钟中断处理程序的工作量来提高μC/OSII的时钟精确度,可以将一部分在每次时钟中断需处理的工作内容放在任务级来完成。这样就可以减少每次时钟中断处理的CPU消耗,从而提高中断响应速度和μC/OSII的时钟精确度。为此,定义任务OSTimeTask (),由它来处理原来在OSTimeTick()中需要处理的操作。因为μC/OSII采用基于优先级的抢占式调度策略,而每次时钟中断处理程序结束后需要首先调度该任务执行,因此让任务OSTimeTask()具有系统内最高优先级。由它执行用户定义的时钟节拍外连函数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的时钟精确度。

                  参考文献

1 Labrosse Jean J. 嵌入式实时操作系统μC/OSII.邵贝贝译. 北京:北京航空航天大学出版社,2003
2 吴君钦.ARM嵌入式系统中断向量表的动态配置.单片机与嵌入式系统应用,2004(12)
3 刘岚,张凯.ARM7嵌入式系统的中断设计与中断处理优化.武汉理工大学学报,2004(4)
4 沈绪榜.2001嵌入式系统及单片机国际学术交流会论文集.北京:北京航空航天大学出版社,2001
5 Stanly B. Lippman, Josee Lajoie. C++ Primer. Third Edition. Addison Wesley
6 Liunx Kernel Archives. http://www.kernel.org

------------

关于μC/OS-II系列软件版权的说明

Micrium 公司产品包括μC/OS-II,μC/GUI,uC/FS,μC/TCP-IP,μC/USB等。Micrium 公司提供嵌入式系统应用方面的产品,并对其软件拥有知识产权。Micrium花费了大量的时间和财力为嵌入式领域提供高质量的软件产品。所有上述产品都以源代码的形式提供给客户,具有极大的适用性。产品不是免费软件,也不是开放源码的软件,因此,不能免费使用,需要清楚的阐明μC/OS-II和系列的软件不是开放源码的免费软件,这是和Linux完全不一样的。

开发和研究者可以通过购买Micrium公司的Jean先生的μC/OS-II的书籍,而得到μC/OS-II源代码,但是仅可以作为个人和学校学习使用,所有和μC/OS-II直接和间接相关的商业目的行为,必须购买使用μC/OS-II及系列产品的商业授权,包括芯片/单板/系统厂家的任何参考设计,教学设备和最终的产品,如果没有得到Micrium公司Jean先生签字的合法授权都是不合法的使用, 这在μC/OS-II的书籍Micrium公司(www.micrium.com)和中国代理商-北京麦克泰软件公司网站(www.bmrtech.com)上面中有明确规定。

Micrium公司其它软件如μC/GUI,μC/FS,μC/TCP-IP,μC/USB 等的销售模式与μC/OS-II不同,如果没有购买使用授权,完全不可以拥有该源代码,也不能将源代码用于产品的设计,培训,教学和生产。

μC/OS-II, μC/GUI,μC/FS,μC/TCP-IP,μC/USB 等授权方式有:单个产品、产品线(系列)、按照CPU 划分的产品三种形式,μC/OS-KA,μC/OS-VIEW 等工具是按照使用人的数目收取费用的,相对起传统的RTOS 动辄2-3万美圆的开发费用和每块单板的使用费(根据数量从数百到几个美圆),μC/OS-II及系列产品是采用一次性的收费方式,应该只是大约相当于传统RTOS 的10-20% 的总体费用。

如果您正在将μC/OS-II系列软件用于您的产品,您需要购买并获得正式使用授权。

北京麦克泰软件技术有限公司

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

(全球TMT2023年9月11日讯)罗克韦尔自动化将亮相第23届中国国际工业博览会(工博会)6.1馆E010展台,围绕智慧城市、产业数字化、碳中和与跨界创新等方面,从不同维度集中展示在各领域的先进技术、产品与解决方案。...

关键字: 自动化 数字化 智能运维 CK

苏州2023年8月29日 /美通社/ -- 8月28日晚,协鑫能科公告,下属控股子公司年产20GWh储能系统项目在张家港经济技术开发区投产。这标志着协鑫集团正式完成从上游储能...

关键字: AC CK 电力系统 电源

纽约2023年8月4日 /美通社/ -- Resuticks因不懈追求创新性受众参与解决方案而受到认可,现在正在重新定义这一领域,专注于通过其旗舰产品RESUL为品牌及其受众...

关键字: TI IC CK RAM

中位随访三年数据显示,欧狄沃辅助治疗组患者的无病生存期、尿路外无复发生存期、无远处转移生存期和无二次进展生存期对比安慰剂组均获得显著改善 所有随机人群中,欧狄沃组的无病生存时间依然维持是安慰剂组的两倍以上; ...

关键字: TE CK PD BSP

欧狄沃是首个且目前唯一经全球III期临床研究证实,用于尿路上皮癌辅助治疗可显著降低患者术后复发风险的PD-1抑制剂。 与对照组相比,欧狄沃用于肌层浸润性尿路上皮癌辅助治疗可使全人群患者的中位无病生存期(DFS)...

关键字: BSP PD CK AD

全球领先的投资公司选择亚马逊云科技作为首选云服务供应商,以获取业务洞察,提高工作场所安全性,实现水电、风能和太阳能的自动化运营 博枫可再生能源将为亚马逊在三大洲的运营提供清洁能源电力 北京2022年12月...

关键字: 亚马逊 可再生能源 电力 CK

GoPro宣布HERO11 Black Mini现已在官网上发售。这款小巧轻便的HERO11 Black是专为运动员和创新者设计的。HERO11 Black Mini支持电影级的5.3K60、2.7K240视频,且可以从...

关键字: 相机 NI GO CK

(全球TMT2022年11月7日讯)罗克韦尔自动化以"引领未来无限可能"为主题再度亮相第五届中国国际进口博览会技术装备展区4.1展馆B4-02展台,并正式向公众发布其与多个先锋合作伙伴发起的开放型非盈利组织 --&nb...

关键字: 自动化 智能运维 CK 智慧城市

罗克韦尔自动化再度亮相第五届中国国际进口博览会技术装备展区4.1展馆B4-02展台,并正式向公众发布其与多个先锋合作伙伴发起的开放型非盈利组织“智能运维Rockii联盟”。智能运维Rockii联盟是罗克韦尔自动化继推出连...

关键字: 自动化 智能运维 CK 线性

上海2022年11月7日 /美通社/ -- 11月5日,第五届中国国际进口博览会(简称"进博会")在国家会展中心(上海)隆重开幕。作为工业自动化、信息化和数字化转型领域的全球领先企业之一,罗克韦尔自动...

关键字: 自动化 智能运维 CK 数字化
关闭
关闭