当前位置:首页 > 单片机 > 单片机
[导读]1 引言目前,嵌入式系统在家电、移动电话、PDA等各种领域的应用日益广泛,程序设计也越来越复杂,这就需要采用一个通用的嵌入式操作系统来对其进行管理和控制。移植了操作系统的嵌入式系统开发,可大大减轻程序员的负

1 引言

目前,嵌入式系统在家电、移动电话、PDA等各种领域的应用日益广泛,程序设计也越来越复杂,这就需要采用一个通用的嵌入式操作系统来对其进行管理和控制。移植了操作系统的嵌入式系统开发,可大大减轻程序员的负担,操作系统提供了多任务的管理功能,只需专注于每个任务的管理。对于不同的应用,可以按照相同的步骤完成系统设计。如果更换硬件平台,则只需要对操作系统进行少量的移植工作,与硬件无关的应用代码完全无需修改,同时,可增强代码的可读性、可维护性和可扩展性。

µC/OS-II是一种专门为微处理器设计的抢占式实时多任务操作系统,具有源代码公开、可移植性和可靠性高等特点。由于µC/OS-II是为嵌入式应用编写的通用软件,故在具体应用时需根据不同单片机的特点进行移植,其大部分代码是用标准C语言所写,只有与处理器相关的一部分代码用汇编语言编写,因而具有很强的移植性,能在从8位到64位单片机以及DSP等超过40种不同构架的微处理器上实现运行。本文主要介绍µC/OS-II在Samsung公司的一款ARM7TDMI的嵌入式处理器S3C44B0X上移植应用。

要实现µC/OS-II在S3C44B0X的构建、裁剪和移植,需要有S3C44B0X的编译器,本文采用的是英蓓特公司推出的EmbestIDE for ARM编译器。

2 µC/OS-II在S3C44B0X上移植的可行性分析

所谓移植,就是使一个实时内核能在某个微处理器或微控制器上运行。要使µC/OS-II能够正常运行,处理器必须满足以下几个条件:

(1)处理器的C编译器能产生可重人代码;

(2)在程序中可以打开或者关闭中断;

(3)处理器支持中断,并且能产生定时中断(通常在l0~l000Hz之间);

(4)处理器支持能够容纳一定量数据的硬件堆栈;

(5)处理器有将堆栈指针和其他CPU寄存器存储和读出到堆栈(或者内存)的指令。Samsung公司的S3C44BOX处理器能够满足以上的要求,所以可以将µC/OS-II移植到S3C44B0X上。

3 µC/OS-II在S3C44B0X上移植的概要

µC/OS-II硬件和软件的体系结构如图1所示。从图中可以看出,对µC/OS-II的移植实际上就是对与处理器有关的代码进行重写或修改。本文中移植代码结构由四部分组成,分别是用户代码部分、核心代码部分、设置代码部分、与处理器相关的移植代码部分。用户代码即应用软件,用来实现用户的具体要求,例如本文中和PC机的串口通讯代码;核心代码部分, 包含OS_CORE.C、COS_FLAG.C、OS_MBOX.C、OS_MEME.C、OS_Q.C、OS_SEM.C、OS_TASK.C、 OS_TIME.C、µC/OS-II.C、µC/OS-II.H 十个文件;设置代码部分,即µC/OS-II配置代码,包含OS_CFG.H、INCLUDES.H 两个文件,用来配置事件控制块的数目以及是否包含消息管理相关代码等;与处理器相关代码即µC/OS-II要移植的处理器配置代码,包含 OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C三个文件,在µC/OS-II的移植过程中,用户所需要关注的就是这部分文件。


图1  µC/OS-II软硬件体系结构

4 µC/OS-II在S3C44B0X上移植代码分析

4.1 OS_CPU.H文件分析

OS_CPU.H包括用#define定义的与处理器有关的常量、宏和类型定义。

(1)定义与编译器相关的数据类型。

µC/OS-II为了保证可移植性,程序中没有直接使用int、unsigned int等定义,而是自己定义了一套数据类型,例如,INT8U表示8位无符号整型,INT16U表示16位无符号整型等。对于ARM这样的32位内核,INT16U是unsigned short型;若是16位的处理器,则是unsigned int型。不能使用bit型变量,把BOOLEAN型定义成unsigned char型。另外S3C44B0X数据宽度和堆栈宽度都是32位,分别将OS_STK和OS_CPU_SR定义成unsigned int型。

(2)义堆栈增长方向

在µC/OS-II中,用OS_STK_GROWTH来设置堆栈的增长方向,OS_STK_GROWTH为0表示堆栈从低地址向高地址增长;OS_STK_GROWTH为l表示堆栈从高地址向低地址增长,其宏定义为:

#define  OS_STK_GROWTH  l; //堆栈从高地址向低地址增长

#define  OS_STK_GROWTH  0; //堆栈从低地址向高地址增长

(3)代码临界区

µC/OS-II在进入系统临界代码区之前需关中断,退出临界区后再开中断,则µC/OS-II能够保护临界区代码免受多任务或中断服务例程的破坏。在S3C44B0X中,通过设置状态寄存器CPSR中的中断禁止位来实现。µC/OS-II中的宏#define OS_ENTER_CRITICAL()  IRQFIQDE定义将状态寄存器中的中断禁止位置位,以禁止所有的中断;#define OS_EXIT_CRITICAL()  IRQFIQRE定义将状态寄存器的中断禁止位置零,以允许所有的中断。

(4) 定义OS_TASK_SW宏

OS_TASK_SW宏是µC/OS-II从低优先级任务切换到高优先级任务时的调度,可以采用下面两种方式定义:一种是如果处理器支持软中断,那么可以使用软中断将中断向量指向OSCtxSw函数;另一种是直接调用OSCtxSw函数。本文用的是后一种方式。

4.2  OS_CPU_A.ASM文件分析

(1) OSStartHighRdy()函数

OSStart()函数调用OSStartHighRdy(),使就绪态任务中优先级最高的任务开始执行。

其示意性代码如下:

Void OSStartHighRdy (void)
{
调用用户定义的OSTaskSwHook();
OSRunning=TRUE;
得到将要恢复运行任务堆栈指针;
SP=OSTCBHighRdy->OSTCBStkPtr;
从新任务堆栈中恢复处理器的所有寄存器;
执行中断返回指令;
}

(2) OSCtxSw函数

该函数由OS_TASK_SW宏调用。OS_TASK_SW宏由OSSched函数调用。OSSched函数负责任务之间的切换。OSCtxSw函数在OSSched函数中负责将当前任务对应的处理器寄存器保存到堆栈中,并将任务中需要恢复的处理器寄存器从堆栈中恢复出来。(3)OSIntCtxSw()函数

该函数由OSIntExit函数调用。OSIntExit函数由OSTickISR函数调用。OSIntCtxSW负责在定时中断任务之间的切换。目前提到的函数OSCtxSW和函数OSIntCtxSW均负责任务之间的切换,区别主要在于是否在定时中断期间负责任务切换。OSIntCtxSW函数主要当前任务堆栈指针,并将新任务对应的处理器寄存器从堆栈中恢复出来。

(4)OSTickISR()函数

时间节拍函数,由定时中断产生。主要负责在进入时保存处理器寄存器,完成任务时切换,推出时恢复寄存器并返回。OSTickISR()函数完成的操作和OSCtxSw()类似,只不过OSTickISR()是由硬件定时器溢出中断触发。其示意性代码如下:

Void OSTickISR (void)
{
保存处理器寄存器;
调用OSIntEnter()或者直接给OSIntNesting加1;
if(OSIntNesting==1){
OSTCBCur->OSTCBStkPtr=SP;
给产生中断的设备清中断;}
OSTimeTick();OSIntExit();
恢复处理器寄存器;执行中断返回;
}

4.3  OS_CPU_C.C 文件分析

这个源文件中有6个函数需要移植,即OSTaskStkInit()、OSTaskCreatHook()、OSTaskDelHook()、 OATaskSwHook()、OSTaskStatHook()和OSTASKTickHook()。后面5个函数又称为钩子函数,主要用来扩展µC/OS-II功能。但必须声明,并不一定要包含任何代码。唯一必须移植的函数是OSTaskStkInit()。该函数在任务创建时被调用,它负责初始化任务的堆栈结构。这个函数在大部分ARM处理器中移植时都可以采用一种形式。      

                                                                                    

5 测试移植代码

在EmbestIDE编译器上编译基于S3C44B0X的µC/OS-II操作系统代码。编译结果表明,裁剪后的µC/OS-II操作系统的代码占用的空间少,代码通过了编译。为了验证基于S3C44B0X的µC/OS-II操作系统移植的是否成功,本文创建了两个测试任务来验证其合理性。

创建的2个测试任务及源码如下:

OSTaskCreate (TestTransplantA, (void *) 0, &TestTransplantAStk[StackSize-1], 2);
OSTaskCreate (TestTransplantB, (void *) 0, &TestTransplantBStk[StackSize-1], 3);
void TestTransplantA (void *pdata)
 { pdata=pdata;
   while(1) {
uart_printf("TaskA ");
OSTimeDly (400);
}
}
Void TestTransplantB (void *pdata) {
  pdata=pdata;
   while(1)  {
   uart_printf("TaskB ");
OSTimeDly(200);
}
  }

多任务调度开始后,通过超级终端接收的UART0的数据为:taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB ……。高优先级的任务TestTransplantA()首先被调度运行,说明OSTaskStkInit()和OSStartHighRdy()函数是正确的。任务TestTransplantA()和任务TestTransplantB()由时钟节拍驱动而周期地被调用,说明OSCtxSw、 OSIntCtxSw()、OSTickISR()也是正确的。通过以上两点可以认为移植结果是正确的。

6 结束语

在µC/OS-II平台下开发程序,首先要掌握内核。通过上述移植过程,能够对任务堆栈,任务调度有深刻理解。作为一种开放源代码的操作系统,以其优越的性能在嵌入式系统应用领域占据了非常广泛的发展空间。移植结果表明,经过裁剪的µC/OS-II在S3C44B0X上的移植是成功的。

参考文献
[1]  S3C44BOX MICROPROCESSOR Datasheet.Samsung Electronics,2001.
[2] 田 泽. 嵌入式系统开发与应用教程[M]. 北京:北京航空航天大学出版社,2005.
[3] 任 哲. 嵌入式实时操作系统µC/OS-II原理及应用[M]. 北京:北京航空航天大学出版社, 2005.
[4] 张春雷 王东兴. µC/OS-II在C8051F020单片机上的移植[J]. 微计算机信息, 2006,  (22): 95-97.
[5] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社, 1999, 106-141.
 

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

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 信息技术
关闭
关闭