当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式实时操作系统μCOS-Ⅱ的移植

1、引言

  嵌入式系统由于它具有软件代码小、高度自动化、响应速度快等特点已经使它在许多领域得到广泛的应用[3]。从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等。嵌入式系统通常由硬件环境和操作系统构成。在嵌入式操作系统的统一调度管理下实现对所有系统资源的合理利用和分配,达到提高系统性能和有效利用有限资源的目的。μCOS-Ⅱ作为一个源码开放的嵌入式实时操作系统,同时具有良好的可移植性、可裁剪性、可剥夺性、稳定性和可靠性等优点,使其成为许多嵌入式操作系统的首选。本文将μCOS-Ⅱ在Freescale的8位处理器芯片HC9S08上移植实现。

2、μCOS-Ⅱ系统结构

  μCOS-Ⅱ是一个完整的可移植可固化可裁剪的抢占式实时多任务内核。可以在不需要做很大修改的基础上方便的移植到多种处理器上。条件是:该处理器要具有一定数量的堆栈,能够使用软件中断,产生定时器中断,此外,编译器要支持可重入代码,并且要能使用汇编实现对处理器内部寄存器的相关操作[2][4]。通过μCOS-Ⅱ的管理,使多个任务之间相互协调,分时的占用CPU,实现充分利用资源和实时等相应的功能。
任务通常是一个死循环,用来完成某一特定的功能;一个任务相当于一个线程。μCOS-Ⅱ可以管理多达64个任务,每个任务都具有一个唯一的合法优先级。但是,优先级最低的那个任务已经被系统定义为空闲任务,用户不能使用。用户可以通过函数OSTaskCreate()来创建任务,通过OSTaskDel()来删除任务。任务可能有以下五种状态:睡眠态、就绪态、运行态、等待状态、中断服务态。利用不同的系统函数可以实现任务在各状态之间的转换。μCOS-Ⅱ通过对就绪表的操作总是选择在就绪任务中优先级最高的那个任务开始运行。任务级的调度是由函数OSSched()来完成的;而中断级的调度是由OSIntExt()完成的。任务切换的过程分为两步:将被挂起任务的处理器寄存器状态保存在它的任务堆栈中;将将要执行的任务堆栈中保存的寄存器值弹到处理器中,然后执行中断返回指令。这样新的任务就拥有了CPU,开始执行。直到它挂起,或者是被更高优先级的任务中断。μCOS-Ⅱ就是在对各种任务的切换之间起协调作用的协调者。

3、HC9S08的硬件结构

  每个HCS08 系列的MCU 都是由HCS08 核加上几个存储器以及外设模块组成。HCS08 核主要包括:

  ①HCS08 CPU
  ②背景调试控制器(BDC)
  ③支持多达32个中断/复位源
  ④芯片级地址译码

  HCS08CPU包括和M68HC08相同的寄存器。其中包括一个8位累加器(A),一个可分别存取高8位和低8位的16位变址寄存器(HX),一个16位栈指针(SP),一个16 位程序计数器(PC)和一个状态码寄存器(CCR),该CCR 包含5个处理器状态标志(V,H,N,Z 和C)和全局中断屏蔽标志(I)。HCS08核定义的5个主要的存储空间。

  直接页寄存器主要包括I/O 端口寄存器和大部分的外设控制和状态寄存器;RAM区的地址紧接在直接页寄存器地址的后面并且向高地址延伸,堆栈空间就落在RAM中。一般将堆栈的栈顶初始化在RAM的高地址部分。和大部分的处理器一样,HCS08的堆栈增长方向是向下的。高地址页寄存器位于$1800到$182B之间,由于这些寄存器比直接页寄存器的使用频率要少的多,所以它们没有安排在珍贵的直接页地址空间中;FLASH存储器分配64K字节的存储空间最终分配到地址$FFFF。这一块的起始地址取决于MCU有多少FLASH存储空间;向量区是FLASH区的一部分,位于$FFC0-$FFFF中,但是它是单独解码的,所以当中断向量取出时别的HCS08模块可以识别出来。[!--empirenews.page--]

4、μCOS-Ⅱ的移植

  μCOS-Ⅱ绝大部分的代码是用ANSI C编写的,可移植性好。但是用户在移植时还需要修改相应的几个文件。与应用相关部分需要用户根据自己实际应用的需要进行配置,与处理器相关的部分需要用户根据不同处理器的结构修改相应的代码,以使操作系统能够准确的进行任务的切换等[1]。主要需要修改的函数如下:

  1.OS_CPU.H 它主要包括了用#define语句定义的、与处理器相关的常数、宏以及类型。比如:typedef unsigned char INT8U、#define OS_TASK_GROUTH 1以及如何处理临界代码段等。

  2.OS_CPU_C.C 在这个文件中要求用户编写10个简单的C函数,但是唯一必须要修改的是OSTaskInit();这个函数初始化堆栈,应该按照中断时系统保护现场的进栈顺序来初始化堆栈结构。对于HCS08系列单片机来说,当中断发生时,依次进栈的是PCL、PCH、X、A、和CCR寄存器值。同时为了保证系统的稳定还把额外的一个变址寄存器H进栈,有时还要保存页值。初始化完成后,将栈顶位置SP保存在任务控制块TCB中。

  3.OS_CPU_A.ASM 在这个文件中需要修改关键的四个函数。

  (1)OSStartHighRdy() OSStart()函数调用它来是就绪任务中优先级最高的任务开始运行。这部分一般要求用户把它转化成汇编语言实现。本文中代码如下:

OSTaskSwHook();
asm lda #$01
asm sta OSRunning
asm ldhx OSTCBHighRdy
asm ldhx 0, x
asm txs
asm pulh
asm pula
asm sta PAGE
asm rti

  (2)任务级切换函数OSCtxSw() 主要通过执行软中断或TRAP来实现在任务级的切换功能。其中中断向量指向OSCtxSw()函数的入口地址。在OSSched()的最后操作系统调用OS_TASK_SW执行软中断或TRAP指令,该指令找到对应的OSCtxSw()实现任务的切换。OSCtxSw()首先要保存当前运行任务的各寄存器状态到自己的堆栈中,并且保存当前栈顶位置;然后找到将要运行的任务,并且把保存该任务堆栈中的寄存器弹到CPU内部寄存器中,执行中断返回指令,这样使CPU从新的任务处执行,直到下一个任务切换的到来。执行代码如下:[!--empirenews.page--]

asm psha
asm pshh
asm tsx
asm pshx
asm pshh
asm ldhx OSTCBCur
asm pula
asm sta 0, x
asm pula
asm sta 1, x
OSTaskSwHook();
asm lda OSPrioHighRdy
asm sta OSPrioCur
asm ldhx OSTCBHighRdy
asm sthx OSTCBCur
asm ldhx 0, x
asm txs
asm pulh
asm pula
asm sta PAGE
asm rti

  (3)中断级任务切换函数OSIntCtxSw() 该函数在ISR中执行任务的切换功能。由于是在中断中执行的,处理器的大部分寄存器值都已经自动保存在堆栈中了,所以该函数的大部分代码都和OSCtxSw()相同,只是前半部分保存寄存器的功能不要了。

  (4)OSTickISR()时钟节拍服务函数μCOS-Ⅱ要求用户提供一个周期性的时钟源,来实现时间的定时和超时功能。这部分功能由该函数实现。这个函数首先保存寄存器的值,然后设置中断标志、清中断,再调用OSTimeTick()递减延时计数,判断是否要在中断中切换任务,最后恢复处理器寄存器,执行中断返回指令,返回到中断处继续执行。代码如下:

SRTISC_RTIACK = 1;
asm lda PAGE
asm psha
asm pshh
asm lda OSIntNesting
asm add #1
asm sta OSIntNesting
asm cmp #1
asm bne Tmr_TickISR1
asm tsx
asm pshx
asm pshh
asm ldhx OSTCBCur
asm pula
asm sta 0, x
asm pula
asm sta 1, x
asm Tmr_TickISR1:
OSTimeTick();
OSIntExit();
asm pulh
asm pula
asm sta PAGE
asm rti

5、结论

  本文将μCOS-Ⅱ移植到8位系列单片机上,并且在MC9S08AW60上稳定的运行,有效提高了该系统的性能,充分利用系统资源,使系统的实时性能得到很大的提高,开阔了应用范围。同时,作者也将该系统在HCS08的另外两款单片机MC9S08QE128和MC9S08GB60上移植实现。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭