引 言
FREESCALE公司的16位HCS12X(简称“S12X”)系列单片机引入了一个协处理器,名为“XGATE”。与一般含义上的浮点协处理器不同,这个协处理器首要用来处理中止。假如选用协处理器来处理μC/OS-II时钟节拍的中止,那么主CPU无需频频加载中止服务子程序,然后确保μC/OS-II内核的一切函数执行时间都为固定值。这样,μC/OS-II的实时性就得到了确保,还能以进步时钟节拍中止频率的办法进步运用体系守时的精度。
μC/OS-II最多支撑63个使命,并支撑信号量、邮箱、音讯行列等多种进程间通讯机制;一起,用户能够依据需求对内核中的功能模块进行裁剪。将μC/OS-II运用到嵌入式体系中,关于进步产品的质量、缩短开发周期和降低成本都有重要的含义。
为了确保体系的实时性,μC/OS-II选用查表战略,使优先级最高的使命一旦进入安排妥当态就马上能够运转。这种查表算法与运用体系的使命数目无关,执行时间是固定值,然后确保了体系的硬实时性。μC/OS-II实时内核中仅有一个执行时间受使命数目影响的函数是时钟节拍,时钟节拍的中止服务子程序需求遍历一切运用推迟函数的使命,故执行时间与使命数目有关,为非固定值。此外,时钟节拍的频率也不能太高,否则会由于CPU频频加载中止服务子程序,导致加剧了CPU负荷,影响μ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声明这些变量,详细句子如下:
2.3 XGATE与S12X CPU的指针变量改换
由于XGATE的内存空间编址与S12X CPU的内存空间编址不一样,所以在指针变量同享时会存在问题。CPU的内存空间和XGATE的内存空间的不同如图1所示。
从图1中能够看出,在S12X CPU的寻址空间中,0x1000~0x3FFF为RAM空间;而对XGATE来说,RAM空间的地址规模为Ox8000~0xFFFF。假如XGATE的程序直接运用CPU的指针变量,则会导致XGATE拜访地址空间0x1000~0x3FFF,该区域关于XGATE是Flash,然后犯错。为了正确地同享指针变量,在XGATE中运用S12x CPU的指针变量时,需求对指针变量进行改换。S12X系列中不同单片机成员的地址分配或许有所不同。以MC9S12XDT512单片机为例,其内部共有8 KB非分页RAM,可全都设为S12X CPU和