导言
现在,商场以及院校科研用嵌入式体系产品,如Vxworks,Linux和Windows CE等都现已适当老练,供给了有力的开发和调试东西,但有些开发本钱贵重,周期较长,而μC/OS-Ⅱ是一种多使命实时源代码的揭露操作体系,内核精简,移植性较强,十分合适用于一些小型操控和试验体系的开发。
1 、操作体系及CPU介绍
μC/OS-Ⅱ是依据优先级的占先式实时多使命操作体系,包含有使命办理、时刻办理、使命间同步通讯(信号量,邮箱,音讯行列)和内存办理等功用。绝大部分代码用C言语写成,很少部分与处理器密切相关的代码用汇编言语编写,便于移植。作为一个源代码揭露的实时操作体系,最多能够办理64个使命,并支撑信号量、邮箱、音讯行列等多种进程间的通讯机制,一起用户能够依据需求对内核中的功用模块进行裁剪。
LPC2378是一款依据ARM7TDMI-S内核的嵌入式精简指令集微操控器,包含了1个支撑仿真的ARM7TDMI-SCPU,适用于为了各种意图而需求进行串行通讯的运用。该体系组织支撑用户、软间断、间断、办理、间断、未界说、体系等7种处理器形式,ARM7TDMI-S处理器内部有31个通用32位寄存器,6个状况寄存器。LPC2378包含了1个10/100 EthernetMAC,USB 2.0全速接口,4个UART接口,2路CAN通道,1个SPI接口,2个同步串行端口(SSP),3个I2C接口,1个I2S接口和MiniBus(MiniBus仅用于LPC2378,它是8位数据/16位地址并行的总线)。下面以μC/OS-Ⅱ在工业级芯片LPC2378上的移植为例,通过剖析操作体系内核来介绍μC/OS-Ⅱ操作体系移植的一般办法和进程及相关问题的处理。
2 、μC/OS-Ⅱ内核结构及作业原理
2.1 内核根本结构
图1是挨近μC/OS-Ⅱ的简略内核体系结构图,内核保留给上层运用的接口有3个,分别是软维护、ITC和DSR。因为μC/OS-Ⅱ操作体系内核是可掠夺型实时多使命内核,因而最高优先级的使命一旦安排妥当,总能得到CPU的运用权。假如是间断服务子程序使一个高优先级的使命进入安排妥当态,则间断完结时,间断了的使命被挂起,优先级高的使命开端运转。
2.2 μC/OS-Ⅱ内核根本作业原理
多使命体系中,操作体系内核担任办理各个使命,或许说为每个使命分配CPU,并且担任各使命之间的通讯和协同,使命切换是内核供给的根本服务。μC/OS-Ⅱ多使命操作体系的根本作业原理如下:
(1)在运用μC/OS-Ⅱ的一切服务之前,有必要调用初始化函数OSInit(),初始化一切的变量和数据结构,一起创立闲暇使命OSTaskIdle(),并赋予最低的优先等级和永久的安排妥当态,一起完结使命操控块(TCB)的初始化、TCB优先级表的初始化、TCB链表的初始化和作业操控块(ECB)链表的初始化。
(2)调用OSTaskCreate()或OSTaskCreateExt()创立至少一个新使命,并给使命赋予必定的优先级,并且它们有各自的一套CPU寄存器和自己的栈空间。
(3)调用OSSTART()函数,通过从使命安排妥当表中找出用户树立的优先等级最高的使命操控块,然后开端多使命调度。
3、 μC/OS-Ⅱ在LPC2378上的移植进程及相关问题剖析
现以LPC2378微操控器上的移植为例,剖析μC/OS-Ⅱ操作体系移植的一般办法,所选用的开发环境为ARM公司的集成开发环境ADS1.2。
3.1 移植代码
(1)μC/OS-Ⅱ与CPU类型无关的代码有μC/OS-Ⅱ.H,μC/OS-Ⅱ.C,OS_CORE.C,OS_TASK.C,OS_TIME.C,OS_SEM.C,OS_MBOX.-C,OS_MUTEX.C,OS_FLAG.C,也便是说这些文件能够不必修正就直接添加。
(2)μC/OS-Ⅱ与CPU类型有关的代码有OSCPU.H,OS_CPU_A.ASM,OS_CPU_C.C,也便是说用户需求依据所选CPU的类型将这些函数进行修正后才干添加入内核。
3.2 OS_CPU.H文件的界说与修正
OS_CPU.H文件界说了与编译器及CPU相关的数据类型、仓库的宽度和添加方法以及开关间断的宏界说。因为微处理器和微操控器所支撑的仓库添加方法不同,这儿需求依据所选芯片LPC2378支撑的类型对宏OS_STK_GRWOTH进行界说,因为ARM7 TD-MI-S内核仓库支撑从上往下的成长方法,所以应做如下界说:
#define OS_STK_GROWTH 1 //仓库是从上往下长的OS_CPU.H文件中别的3个宏OS_CRITICAL_METHOD,OS_ENTER_CRITICAL(),OS_EXIT_CRITICAL()用于界说开关间断的方法及开关间断的完成。通过调用开关间断2个宏来维护临界代码如下:
3.3 OS_CPU_C.C文件中首要函数的界说及编写
OS_CPU_C.C中要求用户编写10个简略的函数:
其他9个函数有必要声明,但并不必定包含使命代码。
3.4 μC/OS-Ⅱ的移植
μC/OS-Ⅱ的移植,还要求编写4个简略的汇编言语函数;即OSStartHighRdy(),OSintCtxSw(),OSTIckISR(),OSCtxSw()。
3.4.1 函数OSStart()调用OSStartHighRdy()
函数OSStart()用于调用OSStartHighRdy(),以使使安排妥当态使命中优先级最高的使命开端运转:
3.4.2 时钟节拍间断服务程序
μC/OS-Ⅱ要求用户供给一个周期性的时钟源,以完成时刻延迟和超时承认功用,时钟节拍每秒发生10~100次。有必要在开端多使命后,发动时钟节拍间断,但因为Osatart()函数不会回来,用户无法完成这一操作,所以能够在OSStart()运转之后,μC/OS发动的第1个使命中初始化节拍间断。依据LPC2378移植下OSTicklSR()的简易代码编写如下:
当时钟节拍间断发生时,CPU会主动把CPU寄存器推入仓库,但并不包含存储页面寄存器PPAGE,假如单片机体系的寻址规模超越64 KB,则需求通过给PPAGE赋值来差异不同的16 KB地址,需求把PPAGE也推入仓库。当某使命的使命操控块中时刻延时项OSTCBDly减到了零,OSTi-mtick()就进入了安排妥当态。OSIntExit()会调用间断级的使命切换函数OSIntCtxSw履行使命切换,而不再履行后边的指令。假如没有更高优先级的使命进入安排妥当态,则CPU会回来间断前状况。
3.4.3 使命级使命切换
实际上使命级的切换便是通过履行软间断指令,或许依据处理器的不同,履行TRAP指令来完成。间断服务子程序、TRAP或许反常处理的向量地址有必要指向OSCtXSW(),使用体系在跳转到间断服务程序时会主动把断点指针压入仓库的功用,把断点指针存入仓库,而使用间断回来指令IRET,能把断点指针推入CPU的PC寄存器功用,康复待运转使命的断点,这样就能够完成断点的保存和康复。
3.4.4 间断级使命切换
OSIntExit()通过调用OSIntSw(),在ISR中履行使命切换函数。因为OSIntCtxSw()是在ISR中被调用的,所以假定一切的处理器寄存器都被正确地保存到了被间断使命的仓库中。OSIntSw()函数的绝大多数代码与OSCtxSw()函数是相同的,差异仅仅:因为ISR现已保存了CPU的寄存器,而不再需求在OSIntSw()函数中保存CPU的寄存器。在进行操作体系移植时,该段程序的代码如下:
3.5 移植中的问题
ARM处理器的软件调试通过JTAG口直接在体系的外部SRAM运转,因而在程序调试之前,ARM处理器的开发环境软件首要调用初始化文件(*.ini),用户能够依据自己体系的外部存储器和设备的地址来修正文件。假如该文件有误,开发环境软件将无法通过JTAG与处理器通讯。体系调试进程中,常常会呈现程序跑飞的现象,通过测验与剖析,首要有4个方面原因:
(1)间断处理程序的间断矢量地址没有正确赋值,然后导致发生间断后CPU无法运转到间断处理程序方位;
(2)在OsctxSw和OSIntctxSw中的使命切换句子后加人几条NOP空句子,保证使命切换的相应指令履行完毕,假如在这些方位没有加相应的空操作指令,也会导致程序跑飞;
(3)因为仓库的空间分配不行,以及没有给CPU的各个作业形式分配空间,导致使命切换时,仓库溢出;
(4)μC/OS-Ⅱ要求用户供给一个时钟资源来完成时钟节拍,时钟节拍应该每秒钟发生10~100次,用户有必要在开端多使命调度后(即调用OSStart后)答应时钟节拍间断。一般的过错是在调用OSlnit()和OSStart()之间答应时钟节拍间断,一起用户不要单纯地寻求实时性,而将体系的时钟节拍频率添加太高。以上几个方面的问题处理后,体系的作业十分安稳。
4 、体系测验
移植完结后的体系包含4个部分:自发动程序、μC/OS-Ⅱ体系文件、移植代码、运用程序。开发环境是ARM公司供给的ADSl.2(ARM Dev-eloper Suite)。该体系创立了以下3个使命来验证μC/OS-Ⅱ的移植成功:
在为自己的微处理器做完μC/OS-Ⅱ的移植后,首要树立3个使命,之后不加任何其他运用代码来测验移植好的μC/OS-Ⅱ,也便是说应该先测验内核自身的运转状况。这样做有2个原因:不期望将作业复杂化;假如有些当地没有作业能够理解是移植自身的问题,而不是运用代码发生的问题。通过测验和修正,无相关过错发生,阐明移植成功。
5 、结语
μC/OS-Ⅱ具有很强的移植性,具有多使命实时可掠夺型内核,并且代码量较小,源代码敞开,可被广泛移植到8位、16位等许多微处理器上。国外比如APC,ROTEK等企业都在产品中成功地运用了μC/OS-Ⅱ内核,不只开发本钱低,并且体系精简,因而将μC/OS-Ⅱ移植到LPC-2378这种工业级的芯片上,具有适当的商业价值。
责任编辑:gt