历史上的今天
返回首页

历史上的今天

今天是:2026年02月03日(星期二)

正在发生

2023年02月03日 | μCOS-Ⅱ在ARM系列单片机S3C44B0x上的移植

2023-02-03 来源:elecfans

引 言
    目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。


    μC/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。μCOS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植μCOS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品的性能,减少产品的开发周期和降低开发成本有着重要的意义。在此较详细地分析和介绍了嵌入式实时操作系统μCOS-Ⅱ在ARM系列单片机S3C44B0x上的移植过程。


1 μCOS-Ⅱ概述
    μCOS-Ⅱ是一种源代码公开、结构小巧、具有可剥夺性实时内核的嵌入式实时操作系统。μCOS-Ⅱ是用ANSI的C语言编写的,包含一小部分汇编语言代码,使之可供不同架构的微处理器使用,至今,从8位到64位,μCOS-Ⅱ已在超过40种不同架构的微处理器上运行。μCOS-Ⅱ是专门为嵌入式应用而设计的,它包含了任务调度,任务管理,时间管理,内存管理和任务问的通信和同步等基本功能。μCOS-Ⅱ拥有一个可移植、可固化、可裁剪的实时内核,它具有执行效率高,占用空间小,实时性能优良和可扩展性强等特点,被广泛地移植应用到各种嵌入式微处理器中。


2 S3C44B0处理器概述
    S3C44B0x微处理器采用高性能、低功耗的32位RISC内核ARM7TDMI。 同时,S3C44B0x在ARM7TDMI核的基础上,扩展了一系列的外围器件,使系统成本及外围器件数目降低至最低,这些功能部件分为CPU单元,系统时钟管理单元,存储单元和系统功能接口单元,片上集成的主要功能如下:
    在ARM7TDMI基础上增加了8 KB的CACHE;外部扩充存储器控制器;LCD控制器,并带有1个LCD专用DMA通道;2个通用DMA通道,2个带外部请求引脚的DMA;2个带有握手协议的UART,1个SIO;1个I2C总线控制器;5个PWM定时器及1个内部定时器;1个看门狗定时器;71个通用可编程I/O口,8个外部中断源;功耗控制模式:正常、低、休眠和停止;8路10位ADC;具有日历功能的RTC;PLL时钟发生器等。


3 嵌入式操作系统μCOS-Ⅱ的移植
3.1 移植μCOS-Ⅱ的条件
    所谓移植,就是使一个实时内核能在其他的微处理器或微控制器上运行。为方便移植,大部分μCOS-Ⅱ的代码都是用C语言编写的,但是仍需要用C语言和汇编语言编写与处理器硬件相关的代码,这是因为μCOS-Ⅱ在读/写处理器的寄存器时,只能通过汇编语言来实现,要使μCOS-Ⅱ正常运行,处理器必须满足以下要求:
    (1)处理器的C编译器能产生可重人型代码;
    (2)处理器支持中断,并且能产生定时中断(通常为10~100 Hz);
    (3)用C语言就可以开/关中断;
    (4)处理器能支持一定数量的数据存储硬件堆栈;
    (5)处理器有将堆栈指针以及其他CPU寄存器的内容读出、并存储到堆栈或内存中去的指令。
    ARM系列单片机S3C44B0x满足以上的条件。所以可以将μCOS-Ⅱ移植应用到S3C44B0x。


3.2 搭建移植环境
    本次移植在如下的环境中完成:
    (1)编译工具采用ARM公司的ADS 1.2。ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在ADS的最新版本是1.2,它取代了早期的ADS 1.0和ADS 1.1。ADS 1.2由命令行开发工具,ARM实时库,GUI开发环境,实用程序和支持软件组成。有了这些部件,用户就可以非常方便地为ARM系列的处理器编写和调试自己的应用程序了。
    (2)目标板采用杭州立宇泰公司生产的S3C44B0x开发板,主机通过JTAG连接目标板以建立交叉开发调试环境。


3.3 μCOS-Ⅱ的移植
    μCOS-Ⅱ的硬件/软件体系结构如图1所示,对μCOS-Ⅱ的移植其实就是对与处理器有关的代码进行重新编写或修改。

    由图1可知,移植μCOS-Ⅱ实际上就是分别对OSCPU.H,OS_CPU_A.ASM和OS_CPU_C.C这三个文件进行重新编写或修改。由于在本次移植中是将μCOS-Ⅱ移植到ARM系列单片机S3CA4B0x中,接下来将结合S3CA4B0x微处理器的特性来具体介绍本次移植过程中所做的主要工作。


    (1)移植OS_CPU.H文件
    OS CPU.H文件中包括了用#define定义的与处理器相关的常量和类型的定义,与μCOS-Ⅱ所定义的变量类型相一致;定义开/关中断的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来保护临界段代码免受多任务或中断服务例程的干扰;定义栈的增长方向,在本次移植中栈的增长方向被定义为从上往下增长,OS_STK_GROWTH的值定义为1。在移植该文件时,需要编写和修改的部分代码如下所示:
    ①设置与编译器相关的数据类型

   
    ③设置堆栈的增长方向
    绝大多数的微处理器和控制器的堆栈是从上往下增长的,但是也有一些处理器和控制器的堆栈增长方向是从下往上增长的μCOS-Ⅱ被设计成这两种情况都可以处理,只要在结构常量OS_STK_GROWTH中指定堆栈的增长方式即可。在本次移植中堆栈的增长方向被设置成从上往下增长。

   
    (2)移植OS_CPU_C.C文件
    在该文件中需要编写10个简单的C函数它们分别是:

在这些函数中惟一必须需要编写的函数是OSTa-skStkInit(),其他9个函数必须要声明,但不一定要包含任何代码。OSTaskCreate()和OSTaskCreateExt()通过调用OSTaskStkInit()函数来初始化任务的堆栈结构,因此,堆栈看起来就像刚发生过中断,并将所有的寄存器都保存到堆栈中的情形一样。OSTaskStkInit()的程序代码如下:



    (3)移植OS_CPU_A.ASM文件
    在移植OS_CPU_A.ASM文件时,要求用户编写4个简单的汇编语言函数,它们分别是:OS-StartHighRdy(),OSCtxSw(),OSIntCtxSw(),OS-TIckISR()。
    ①OSStartHighRdy():运行最高优先级的就绪任务。此函数仅在多任务启动时执行一次,用来启动第1个(也就是最高优先级)任务运行。它的程序代码如下:


    ②OSCtxSw():任务级任务切换函数。实现CPU在正常运行时任务间的切换,完成对当前任务堆栈的保存和对最高优先级任务堆栈的弹出,使最高优先级的任务得到运行。
    ③OSIntCtxSw():中断级的任务切换函数。在中断服务程序执行完后,如果中断使得更高优先级的任务处于就绪状态,则该函数实现对任务的切换:保存中断发生之前的那个任务的执行现场.恢复已处于就绪态的那个更高优先级任务的执行现场,使优先级更高的那个任务得以运行,从而完成对任务的切换。
    ④OSTIckISR():是系统时钟的中断服务函数。该函数的主要功能是检查是否有由于延时而被挂起的任务转为就绪态。如果有,则调用OSIntCtxSw()函数进行任务切换,使已处于就绪态的且具有最高优先级的任务运行。


4 测试移植代码
    为S3C44B0x移植好μC/OS-Ⅱ后,紧接着的工作就是验证移植好的μC/OS-II是否能正常工作。在这里采用不加任何应用程序代码的方法测试移植好的μC/OS-Ⅱ,这样做有两个优点:使测试移植代码的工作变得更简单;如果有部分,μC/OS-II代码不能正常工作,可以明白是被移植代码本身的问题,而不是应用代码产生的问题。通过四个步骤来完成对移植代码的测试:确保C编译器、汇编编译器及链接器正常工作;验证OSTaskStkInit()和OSStartHighRdy()函数;验证OSCtxSw()函数;验证OSIntCtxSw()和OSTick-ISR()函数。经测试,以上四个测试过程均能正常通过,表明被移植到ARM系列单片机S3C44B0x中的μC/OS-Ⅱ操作系统已经能正常工作了。


5 结束语
    μC/OS-II是一种可配置、可裁剪的嵌入式实时操作系统,现已被广泛的移植应用到多种处理器当中。这里成功地将μC/OS-Ⅱ移植到了ARM系列单片机S3C44B0x中,经测试,移植好的μC/OS-Ⅱ代码能正常的在S3C44B0x处理器中稳定运行。


推荐阅读

史海拾趣

天钰(FITIPOWER)公司的发展小趣事

台湾富晶(FORTUNE)公司的发展故事

故事一:初创与先驱之路

富晶电子股份有限公司(Fortune Semiconductor Corp.),中文简称富晶,成立于1995年,总部位于台湾新北市淡水区。作为亚洲最早切入模拟IC设计的先驱之一,富晶自创立之初便专注于电路设计与整合技术。在那个数字科技刚刚起步的时代,富晶凭借其前瞻性的视野和深厚的技术积累,迅速在模拟IC设计领域崭露头角。公司不仅精通电路设计,还擅长将先进的SOC/SIP技术应用于实际产品中,为消费电子、电源管理、家用电器等多个领域提供了高性能的IC解决方案。

故事二:性价比优势与市场拓展

随着消费性电子产品的价格逐渐亲民,富晶的产品因其优良的电路设计和品质,在电源管理IC和电池管理IC等模拟IC领域展现出了强大的性价比竞争力。在过去十年中,富晶成功帮助众多制造商提升了消费性电子产品的价值,推动了手机、笔记本电脑、数码相机等产品的普及。制造商们选择富晶的IC产品,不仅因为其稳定的质量和卓越的性价比,还因为富晶能够持续稳定地供货,满足了市场对高效、可靠电子元件的迫切需求。

故事三:技术创新与产品升级

富晶始终将技术创新视为企业发展的核心动力。公司不断投入研发资源,致力于开发更加先进、高效的IC产品。通过不断优化电路设计、提升制造工艺,富晶成功推出了一系列具有行业领先水平的产品,如FS98O24、FS8855等电源管理IC和电池管理IC。这些产品不仅性能卓越,而且功耗更低、体积更小,满足了市场对电子产品轻薄化、绿色化的需求。

故事四:贴近市场与客户需求

自成立以来,富晶始终秉持着贴近市场、满足客户需求的服务理念。公司密切关注市场动态和客户需求变化,及时调整产品策略和服务模式。通过与客户建立紧密的合作关系,富晶能够深入了解客户的实际需求,为客户提供定制化的解决方案。这种贴近市场的服务模式不仅赢得了客户的信赖和支持,也为富晶在激烈的市场竞争中赢得了宝贵的市场份额。

故事五:全球化布局与未来发展

随着全球化进程的加速推进,富晶也加快了其全球化布局的步伐。公司不仅在国内市场取得了显著的成绩,还积极拓展海外市场,与众多国际知名企业建立了长期稳定的合作关系。同时,富晶还注重与国际先进技术的交流与合作,不断提升自身的技术水平和创新能力。展望未来,富晶将继续秉承“创新、卓越、共赢”的发展理念,致力于成为全球领先的模拟IC设计企业,为电子行业的繁荣发展贡献更多的力量。

DESOUTTER公司的发展小趣事

2001年,Desoutter公司与CP(Chicago Pneumatic)和GR(Grorges Renault)合并,成立了CPDI公司。这次合并使Desoutter公司获得了更强大的技术实力和市场资源,进一步巩固了其在气动工具领域的领先地位。合并后,CPDI公司继续致力于气动工具的研发和生产,并推出了一系列创新产品,以满足市场的不断变化和升级需求。

国盛科技(BOCHEN)公司的发展小趣事

国盛科技在发展过程中获得了多项认证与荣誉。例如,公司获得了知识产权管理体系认证证书,荣登《人民代表报》全国两会特刊,成为“中国质量万里行促进会”会员并获得“收录企业”荣誉称号等。这些认证与荣誉的获得,充分证明了国盛科技在电子行业的领先地位和企业实力的不断提升。

厦门法拉(faratronic)公司的发展小趣事

FMI公司始终坚持以客户为中心的发展理念,致力于为客户提供定制化的频率控制解决方案。公司拥有一支专业的研发团队和完善的生产流程,能够根据客户的具体需求进行产品设计和生产。无论是标准产品还是定制产品,FMI都能确保高质量和快速交付。这种灵活的服务模式使得FMI在客户中树立了良好的口碑,并为公司赢得了更多的商业合作机会。

Armel Electronics Inc公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Armel Electronics Inc公司深知此道,始终坚持品质至上的原则。公司从原材料采购到生产流程,再到产品出厂,每一个环节都严格把控,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得Armel的产品在市场上赢得了良好的口碑,并逐渐树立了公司的品牌形象。

Akahane Electronics Ind Corp公司的发展小趣事

面对日益严重的环境问题,Akahane敏锐地捕捉到绿色电子产品的市场潜力。公司投入大量研发资源,开发出低能耗、环保的电子产品,并积极推广绿色生产和循环经济理念。这一举措不仅赢得了消费者的青睐,还为公司赢得了良好的社会声誉。同时,Akahane还积极参与国际环保组织的活动,推动电子行业的绿色化发展。

问答坊 | AI 解惑

高速数据传输问题

请问一下数字电路高手,PCBlay out 高速信号应注意那些问题? 2.我有一块硬盘的板,从USB的输入端D+到芯片的输入端为0.3R正常吗?…

查看全部问答>

【红色飓风推荐】FPGA学术论文下载

随着性能不断提高,成本持续降低,FPGA在各个领域都得到了广泛应用。 红色飓风载选了一些国内核心期刊上发表的FPGA设计方面的论文,供大家参考! 希望对正在从事FPGA设计的工程技术人员或者高校里面做毕业设计的学生有一点点帮助。 ====== ...…

查看全部问答>

电子设计比赛要点

本帖最后由 paulhyde 于 2014-9-15 09:08 编辑 电子设计比赛要点1、不要追求高精尖,要通。电赛时间有限,与其花时间去弄自己没接触过的东西,不如把自己已经学到的东西弄透。对大部分人来讲,如果之前没有接触DSP、FPGA、ARM之类高端的控制器,可 ...…

查看全部问答>

LTIB介绍和安装(三)

3.运行ltibcd到ltib安装到的目录,这个是在上面install过程中让你选择的。然后:./ltib即可运行,第一次运行,实际上就是启动build image的工作,最后会调用编译器等工具连构建出最终内核image和文件系统image。这个过程可能出现错误(但我没碰到) ...…

查看全部问答>

alsa驱动不能初始化硬件

在用alsa的应用程序测试开发板上的音频放音的时候,下面的函数出错了:         /* Write the parameters to the driver */         rc= snd_pcm_hw_params(handle,params);       &nbs ...…

查看全部问答>

高分求教NDIS问题

最多只能给100,先这样吧,如果问题解决了,小可另外送分哈! 最近在研究NDIS中间层,有些问题不明白,请教: ProtocolReceivePacket可以处理批量数据包,是怎么处理的?参数只是一个包啊,难道这个批量只是相对于ProcotolReceive偶尔一个包需要 ...…

查看全部问答>

关于输入法的两个问题

1,我的开发环境为evc4+ppc2003+中文镜像 下载了个freepyCE,编译通过,看freepyCE自带的安装说明,替换了注册表中的键值: HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Layouts\\e0010804修改,把Ime File键值从msimepy.dll改为fr ...…

查看全部问答>

最牛的无线数传资料

无线数传模组: a.通用数传模组    WAP200B、EM200D、GW200B,最大100mW,64个频道,传输距离800米左右,内置前向纠错,最高速度19200(接口可达115200); b.高灵敏度数传模组   WAP200C、GW200KB,最大20mW,64个频道,传 ...…

查看全部问答>

请问2530+2591能做到多少米啊?

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata   请问2530+2591能做到多少米啊 …

查看全部问答>

sht20 温湿度传感器交流区

论坛各位大佬,谁用过sht20这块温湿度传感器,有调通的程序分享下吧,51单片机的代码最好,或者FPGA的。 这里可以变为一个关于sht1X、sht2X和sht7X  瑞士Sensirion的温湿度传感器的交流区 我之前也发过一个帖子,是关于sht10的调试通 ...…

查看全部问答>