摘要:木文详细分析了嵌入式实时操作系统MQX的组成结构、内核功能、启动和初始化过程,描述了MQX移植到MC F52259的实现过程,详细说明了移植过程中要修改的文件)以小灯程序作为实例,说明了MQX任务的创建和执行的过程)木文对MQX在嵌入式控制领域的应用有启发指导作用)
关键词:MQX;内核功能;移植;MCF52259
1引言
ERTOS(Embedded Rcal Time Operating System,嵌入式实时操作系统)是指在叫确定的时间内执行其功能,并对外部中断事件做出及时、有效响应的系统软件。它是嵌入式系统重要的组成部分,是嵌入式系统中连接软硬件的枢纽、嵌入式系统资源的管理者、嵌入式系统硬件的扩允。嵌入式实时操作系统般包括系统内核、时钟、信号、设备驱动接口、图形界面、通信协议、与硬件相关的底层驱动软件等。MQX(Mcssagc Qncnc cXccntivc)是山Precise Software Technologic、公司1991年开发的一个嵌入式实时操作系统。2000年3月,MQX被ARC公司收购,并应用在新的处理器体系中(主要包含:Frccscal。的ColdFirc系列、IBM ./Frccscal。的PowcrPC和ARM等)。目前,MQX主要应用在工业控制、网络、存储和消费电子中。
MCF5225X是飞思卜尔公司推出的基于ColdFirc V2高集成的犯位精简指令集计算机微控制器家族的代表,集成了网络模块、USB模块和CAN模块等,具有稳定性好、可靠性高、接口丰富、存储空间大等优点,己经广泛应用于工业控制领域。
目前,由于嵌入式开发人员而临着用更少资源做更多事情的压力,他们小但要增强性能应用和连通性,而且要降低成本,加快产品上市。为了帮助开发人员成功应对设计挑战,飞思卡尔半导体推出了“站式”工业连接解决方案,将集成度最高的32位ColdFir。微控制器(MCU)MCF5225X系列和信受赞誉的Frccscalc MQX实时操作系统((RTOS)集于身,从而为开发人员提供了个用于工业连接的综介嵌入式平台。
基于上述特点,本文对嵌入式实时操作系统MQX的的基本功能进行详细的研究和分析,描述了MQX移植到MC F52259的实现过程,并给出测试实例,说明了MQX任务的创建和执行的过程。
2 MQX的基本功能
MQX由核心组件(必选)和叫选性组件构成。对于核心组件,只有MQX或应用程序调用的函数包含在映像中。为了满足要求,应用程序叫通过加入叫选组件来扩展和配置核心组件。图1为MQX的组成结构,位于中心的是核心组件,是必选的;位于边缘的是核心组件。MQX包括如下基本功能:
2.1 MQX启动和初始化
程序下载后,从复位向量处取出程序执行的首地址,跳转并按该地址执行;执行vcctors.c文件中的boot()函数,进行系统的初始化,并跳转到_start主函数入口继续执行;址终,跳到,naiv函数,调用_mqx0运行,启动MQX} MQX启动时,创建被应用程序称为自启动的任务。
通过任务模板列表((TASKTEMPLATE-STRUCT)定义了一组初始化模板(必须包含个自启动的任务,MQX-AU-TO-START TASK),基于此,可以在处理器上生成任务。初始化时,MQX生成每个任务的个实例。当应用程序运行时,它能按任务模板生成其它任务。任务模板列表如下:
typedef street task_ template-street
{
_ mqx hint TASKTEMPLATE_ INDEX; //模板索引void_ CODE_ PTR_ TASKADDRESS)(uint_ 32); //}T务函数一mcm_sizc TASKSTACKSIZE; //任务栈大小_mqx hint TASKPRIORITY; //任务优先级char_ PTR_ TASK_NAME; //任务函数名称_mqx hint TASKATTRIBUTES; //任务属性hint_ 32 CREATION_ PARAMETER; //}T务参数_mqx hint DEFAULT TIME_SLICE;//默认时间片};
2.2 (I务调度与同步
MQX任务调度遵从POSIX.4标准(实时扩展)并且一支持如下策略:
(1) FIFO(先来先服务)调度,将调度等待时间最长的任务。
(2)轮转(时间片)调度,将调度等待时间最长且末消耗自身时间片的千毛务。
(3)显式调度,使用任务队列明确地调度任务或创建相对复杂的同步机制。任务同步是通过事件、轩量级事件、信号量、轩量级信号量、轻量级、消息等机制来实现的。
2.3内存管理
内存是操作系统的主要资源。MQX可以静态或动态的从内存池中分配和释放可变大小的存储片(即区块)。MQX的内存管理包含以下五个方而:叫变大小内存管理、固定大小内存管理、高速缓存控制、内存管理单元((MMU)控制、轩量级内存管理。
2.4中断管理
MQX中断管理包含ISR(中断服务例程)内核和ISR。
MQX的ISR内核用汇编语言编写,这个内核会在其它任何ISR运行之前运行,并完成如下任务:保护活动任务的现场、切换到中断堆栈、调用介适的ISR、当ISR返回后,恢复具有最高优先级的就绪任务的现场。
MQX使用ISR来处理硬件中断和异常。ISR并小是个任务,而是个能快速响应硬件中断和异常的小而是一个快速的例程。图2给出了MQX的中断处理框图。
2.5时间管理
MQX从硬件计数器中获取时间,因此应用程序可获取比较精确的时间。定时器是核心组件,提供消逝时间和绝对时间,用秒/毫秒、时间滴答或个日期表示。消逝时间是MQX在处理器上开始运行所经历的时间。当消息使用基于共同参考时间的时间戳时,为了使小同处理器的任务叫以交换消息,定时器组件提供绝对时间。
3 MQX在MCF52259上的移植的实现
MQX与硬件电路板(如MCF52259)相关的包有:BSP(Boardsupport package)和PSP(Proccssor Support Packagc)o BSP包含与电路控制板相关的代码。PSP包含平台相关(如ColdFir州均代码。因为实时编译配置文件来源于电路控制板的。onfig/<board>目录,所以独立于电路控制板的PSP库也被编译到与电路控制板相关的输出目录中。
若MQX没有提供个新的电路控制板的样例程序,此时,需要根据N己的电路控制板(如MCF52259)来开发新的BSP。具体步骤如下:
(1)选择个基准BSP进行修改。可以以同系列的BSP作为基准的BSP。
①创建个新的BSP源目录为:source/bsp/MC F52259 0
②进入基准目录,复制基准目录中的所有内容到新目录。
③在新目录中,将IH的电路控制板名称<board>.*更改为:MCF52259.* 。
④创建与新BSP相关的其他的文件和目录。新的BSP配置目录,如:config/bsp/ MCF52259;新的构建输出目录,如lib/MCF52259 。
③复制BSP和PSP构建工程(位于MQX安装目录中mqx/bnild/codcwarrior中),在每个构建工程中修改工程设置。即:
一从工程(<board>.*)中移除老的电路控制板源代码文件,添加创建新的文件;
一对新的配置目录重新指定包含搜索路径;
一对新的输出目录重新指定输出库路径;
一更改止在构建的输出库名称为:MCF52259.a;
一在build/bat目录复制批文件,并且在工程设置中设置它们为后连接行为;
一重新编译、链接、生成工程,从而生成新的链接库。
⑥在所有的文件中,将所有老的BSP或处理器名称更改为新的BSP或处理器名称。
(2)复制选择的BSP和PSP工程配置和源代码。
(3)准备电路控制板BSP调试配置,并修改电路控制板BSP的包含文件。BSP特有的包含文件保存在MQX的安装目录mqx/son rcc/bsp/MCF52259/中,主要修改以下文件:bsp.h,bsp_prvh,MCF52259.h等。
(4)准备电路控制板PSP调试配置,并修改电路控制板PSP的包含文件。BSP特有的包含文件保存在,nqx/sonrcc/psp/cold-fire中。
(5)修改启动代码。MQX通过调用_mqx}启动,该函数将控制权传递给MQX内核。启动代码位于BSP内的特定编译器子目录中。主要修改以下两个函数:boot和<compiler >.c编译器工具的缩写)。Boot且是启动程序,它主要做以下工作:禁!不中断、建立初始化堆栈、初始化硬件寄存器(如中断基址地址、外设寄存器基址地址、内部存储器基址地址等)、设置关键的处理器资源(如时钟源、PLL、外部总线等)、把控制权传递给编辑器启动函数并调用,nain}函数。
(6)修改源代码。主要修改以下源文件:init_ bsp.c, mqx-init.C, bCt-LISCC.C, bCt-nSCC.C等。其中mqx-init.。包含电路控制板默认的MQX初始化结构,其结构定义如下:
typcdcf strnct mqx-initialization-strnct
{
_ mqx-hint PROCESSOR-NUMBER;//处理器号 pointer START-OF-KE RNEL-MEMORY; //内核使用的
RAM首地址
pointer END_ OF-KERNEL MEMORY; //内核使用I均RAM末地址
一,nqx-hint INTERRUPT-STACKSIZE; //中断栈大小
TASK TEMPLATE STRUCT PTR TASK TEM-
PLATE_ LIST; //任务模板列表地址
_ mqx-hint MQX-HARDWARE_ INTERRUPT_ LEV-EL MAX; //i+x大硬件中断优先级
_ mqx-hint MAX-MSGPOOLS;//址大消息缓冲IX:
一 mqx-hint MAX-MSGQS; //址大消息队列数
char_ PTR- IO-CHANNEL; //标识那个设备被用为默认I/0
char_ PTR- IO-OPEN_ MODE; //默认I/0的打开标志
一,nqx-hint RESERVED}2};//保umin
MQX-INITIALIZATION-STRUCT,_ PTR- MQX-INI-TIALIZATION-STRUCT-PTR;
(7)在init_ <dcv>。文件中,创建对I/0设备驱动的默认初始化设置。
(8)修改与链接器和调试器相关的文件:Link.con ip与链接器相关的文件,*.cfg, *.mct, *.txt与调试器相关的文件。
4移植代码测试与结果
我们设计的测试程序的主要功能是使4个小灯交替亮暗,包含的一个任务,分别是init_ task,lcdl_ task,lcd2_ task,lcd3_ task,lcd4一 task init一 task为自启动任务,调用其他的任务。此外,在测试程序还添加了两个文件,分别为iodrivcr.。和task.c
iodrivcr。相当于硬件与操作系统之间的中间层,其内容如下:
(1)定义要使用的端口号,以及端口对应的引脚。
(2)InitializcIO}:初始化IO引脚为低电平(使用fopcn函数实现),并设置引脚为输出引脚(使用RcsctOntpnt、函数实现)。
(3)SctOutput}:设置输出引脚的电平。调用Ioctl()函数:设置弓}脚的电平
(4)RcsctOutputs}:设置引脚电平为低。
Task.c给文件主要用于创建如下5个任务:init_ task()(用于创建5个任务,调用InitializcIO)函数和_task_ create)函数)、lcdl_ task()(小kJ- 1亮暗t7J换)、lcd2-task()(小kJ- 2亮暗t7J换)、lcd3_ taskQ(小kJ- 3亮暗t7J换),lcd4_ taskQ(小kJ- 4亮暗t7J换)。
经过实际运行测试,如图3所示测试结果表明,MQX移植到MCF52259上完全能够正常运行,任务调度、控制逻辑准确可靠,实时性及稳定性都能满足应用要求。
5结束语
本文研究了嵌入式实时操作系统MQX内核功能、启动和初始化过程等,完成了MQX移植到MC F52259的具体实现,并通过测试实例说明了MQX任务的创建和执行过程。测试表明,MQX移植到MCF52259准确可靠,具有较好的实时性和稳定性。对MQX在嵌入式控制领域的应用有启发指导作用。
本文作者创新点:研究了MQX在MCF52259的移植的实现过程并对移植代码进行了测试验证了移植的可行性