MQX实时操作系统在M CF52259上移植的研究与实现

摘要:木文详细分析了嵌入式实时操作系统MQX的组成结构、内核功能、启动和初始化过程,描述了MQX移植到MC F52259的实现过程,详细说明了移植过程中要修改的文件)以小灯程序作为实例,说明了MQX任务的创建和执行的过程)木文对MQX在嵌入式控制领域的应用有启发指导作用)

关键词:MQX;内核功能;移植;MCF52259

1引言

ERTOS(Embedded Rcal Time Operating System,嵌入式实时操作系统)是指在叫确定的时间内执行其功能,并对外部中断事件做出及时、有效响应的系统软件。它是嵌入式系统重要的组成部分,是嵌入式系统中连接软硬件的枢纽、嵌入式系统资源的管理者、嵌入式系统硬件的扩允。嵌入式实时操作系统般包括系统内核、时钟、信号、设备驱动接口、图形界面、通信协议、与硬件相关的底层驱动软件等。MQX(Mcssagc Qncnc cXccntivc)是山Precise Software Technologic、公司1991年开发的一个嵌入式实时操作系统。20003月,MQXARC公司收购,并应用在新的处理器体系中(主要包含:Frccscal。的ColdFirc系列、IBM ./Frccscal。的PowcrPCARM)。目前,MQX主要应用在工业控制、网络、存储和消费电子中。

MCF5225X是飞思卜尔公司推出的基于ColdFirc V2高集成的犯位精简指令集计算机微控制器家族的代表,集成了网络模块、USB模块和CAN模块等,具有稳定性好、可靠性高、接口丰富、存储空间大等优点,己经广泛应用于工业控制领域。

目前,由于嵌入式开发人员而临着用更少资源做更多事情的压力,他们小但要增强性能应用和连通性,而且要降低成本,加快产品上市。为了帮助开发人员成功应对设计挑战,飞思卡尔半导体推出了“站式”工业连接解决方案,将集成度最高的32ColdFir。微控制器(MCU)MCF5225X系列和信受赞誉的Frccscalc MQX实时操作系统((RTOS)集于身,从而为开发人员提供了个用于工业连接的综介嵌入式平台。

基于上述特点,本文对嵌入式实时操作系统MQX的的基本功能进行详细的研究和分析,描述了MQX移植到MC F52259的实现过程,并给出测试实例,说明了MQX任务的创建和执行的过程。

2  MQX的基本功能

MQX由核心组件(必选)和叫选性组件构成。对于核心组件,只有MQX或应用程序调用的函数包含在映像中。为了满足要求,应用程序叫通过加入叫选组件来扩展和配置核心组件。图1MQX的组成结构,位于中心的是核心组件,是必选的;位于边缘的是核心组件。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

MQXISR内核用汇编语言编写,这个内核会在其它任何ISR运行之前运行,并完成如下任务:保护活动任务的现场、切换到中断堆栈、调用介适的ISR、当ISR返回后,恢复具有最高优先级的就绪任务的现场。

MQX使用ISR来处理硬件中断和异常。ISR并小是个任务,而是个能快速响应硬件中断和异常的小而是一个快速的例程。图2给出了MQX的中断处理框图。

2.5时间管理

MQX从硬件计数器中获取时间,因此应用程序可获取比较精确的时间。定时器是核心组件,提供消逝时间和绝对时间,用秒/毫秒、时间滴答或个日期表示。消逝时间是MQX处理器上开始运行所经历的时间。当消息使用基于共同参考时间的时间戳时,为了使小同处理器的任务叫以交换消息,定时器组件提供绝对时间。

3 MQXMCF52259上的移植的实现

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

③复制BSPPSP构建工程(位于MQX安装目录中mqx/bnild/codcwarrior),在每个构建工程中修改工程设置。即:

一从工程(<board>.*)中移除老的电路控制板源代码文件,添加创建新的文件;

    一对新的配置目录重新指定包含搜索路径;

    一对新的输出目录重新指定输出库路径;

    一更改止在构建的输出库名称为:MCF52259.a;

    一在build/bat目录复制批文件,并且在工程设置中设置它们为后连接行为;

    一重新编译、链接、生成工程,从而生成新的链接库。

⑥在所有的文件中,将所有老的BSP或处理器名称更改为新的BSP或处理器名称。

 (2)复制选择的BSPPSP工程配置和源代码。

(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; //内核使用IRAM末地址

一,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在嵌入式控制领域的应用有启发指导作用。

本文作者创新点:研究了MQXMCF52259的移植的实现过程并对移植代码进行了测试验证了移植的可行性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值