咨询热线:021-80392549

用协处理器提高IJLC/OSn,Il的实时性

放大字体缩小字体发布日期:2014-10-21 来源:[标签:出处] 作者:[标签:作者] 浏览次数: 88
核心提示:
引 言
μC/OS-II最多支持63个任务,并支持信号量、邮箱、消息队列等多种进程间通信机制;同时,用户可以根据需求对内核中的功能模块进行裁剪。将μC/OS-II应用到嵌入式系统中,对于提高产品的质量、缩短开发周期和降低成本都有重要的意义。
为了保证系统的实时性,μC/OS-II采用查表策略,使优先级最高的任务一旦进入就绪态就立刻可以运行。这种查表算法与应用系统的任务数目无关,执行时间是固定值,从而保证了系统的硬实时性。μC/OS-II实时内核中唯一一个执行时间受任务数目影响的函数是时钟节拍,时钟节拍的中断服务子程序需要遍历所有使用延迟函数的任务,故执行时间与任务数目有关,为非固定值。此外,时钟节拍的频率也不能太高,否则会因为CPU频繁加载中断服务子程序,导致加重了CPU负荷,影响μC/OS-II的实时性。
Freescale公司的16位HCS12X(简称“S12X”)系列单片机引入了一个协处理器,名为“XGATE”。与普通意义上的浮点协处理器不同,这个协处理器主要用来处理中断。如果采用协处理器来处理μC/OS-II时钟节拍的中断,那么主CPU无需频繁加载中断服务子程序,从而保证μC/OS-II内核的所有函数执行时间都为固定值。这样,μC/OS-II的实时性就得到了保证,还能以提高时钟节拍中断频率的方法提高应用系统定时的精度。


1 单片机中的协处理器
HCS12X系列单片机中的XGATE协处理器是精简指令集(RISC)结构的处理器,它的工作时钟频率是S12X主CPU的2倍。主CPU初始化系统时可决定使用或禁用XGATE。若使用,则XGATE在初始化后就独立地运行,并通过双端口RAM与CPU交换数据,必要时向主CPU发中断请求。
XGATE处理完所有的中断后进入休眠态,停止运行,直到下一次中断发生。XGATE比较适合响应的中断主要是加载频率高的中断,或不带通信缓冲区的I/O中断,例如SCI发送或接收中断、PWM输出中断等。而对于本身带发送、接收缓冲区的中断(如CAN中断、USB中断等),采用协处理器处理中断优势不明显。
μC/OS-II的时钟节拍中断是一个频繁发生的中断,所以很适合采用XGATE来响应。以下重点介绍如何用XGATE协处理器响应μC/0S—II的时钟节拍中断。


2 用XGATE实现μC/OS-II的时钟节拍
μC/0S-11的时钟节拍中断可以采用单片机的实时中断(Real-Time Interrupt,RTI)来实现。当然也可以使用定时器中的计数器来产生时钟节拍,原理相同,方法近似。使用XGATE来响应RTI中断,实现时钟节拍时,XGATE协处理器和主CPU的分工如表1所列。

XGATE负责响应RTI中断,实现时钟节拍,并完成任务延时计数;在任务延时完成后,通知CPU进行任务调度。另外,XGATE还用来响应其他中断,在需要任务调度时通知CPU。主CPU则只负责运行任务(包括系统任务)和任务调度,只有在需要任务调度时才会加载中断服务子程序。使用XGATE来实现时钟节拍的具体设置步骤如下所述。
2.1 将RTI中断的控制权交给XGATE
为了将RTI中断交由XGATE来处理,系统初始化时需要设置S12X单片机中RTI中断对应的中断控制寄存器。中断控制寄存器组成如下:

在S12X单片机中,每一个I/O中断都有一个中断控制寄存器与之对应。中断控制寄存器控制相应的中断是由S12X CPU响应还是由XGATE来响应,以及该中断的优先级。
中断控制寄存器中,RQST位为1时,中断由XGATE来响应;为0时,中断由S12X CPU响应。为了使用XGATE来响应RTI中断,需要将RTI中断对应的中断控制寄存器的RQST位置1。PRIOLVL[2:0]保存的是对应中断的优先级,值越大,对应中断的优先级越高。如果这3位均为0,那么对应中断会被禁用。
设置中断控制寄存器可以调用编译器提供的一个函数ROUTE_INTERRUPT。这个函数需要的参数是对应中断的中断向量相对中断向量表基址(0xFF00)的偏移量,以及中断控制寄存器的值。设置RTI中断控制寄存器的代码如下:
RUUTE_INTERRUPT (0xF0,0x81);
其中,0xF0是RTI中断向量相对中断向量表基址的偏移量,0x81是要设置的中断控制寄存器的值。
2.2 XGATE与S12X CPU的数据共享
XGATE实现μC/OS-II的时钟节拍和S12X CPU实现任务调度,都需要访问与系统的任务控制块链表相关的变量,因此这些变量需要声明为XGATE和S12X CPU的共享变量。共享变量的声明需要加上“volatile”类型声明,并使用“#pragma”预处理命令将其放在共享内存中。

S12 CPU的程序中声明如下:


在XGATE的程序中,需要使用extern声明这些变量,具体语句如下:

工博士工业品商城声明:凡资讯来源注明为其他媒体来源的信息,均为转载自其他媒体,并不代表本网站赞同其观点,也不代表本网站对其真实性负责。您若对该文章内容有任何疑问或质疑,请立即与商城(www.m.eepottsltd.com)联系,本网站将迅速给您回应并做处理。
联系电话:021-31666777
新闻、技术文章投稿QQ:3267146135投稿邮箱:syy@m.eepottsltd.com

Baidu
map