μCOS-Ⅱ在ARM系列单片机S3C44B0x上的移植

发布时间:2023-02-03  

引 言
    目前,嵌入式系统在工业控制、家用电器、移动通信、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处理器中稳定运行。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    配置 完成上述设置后,保存,即完成了编译调试环境设置。接下来需要写一段代码,以验证2416能否正常运行,代码比较简单,是用汇编写的计算1+...+100和的小程序。在工程"s3c2416"中,新建一个......
    还是想把实现的过程分享出来,这篇文章是其中的内容之一,有兴趣的同学可以先了解一下,点个关注收藏,后面持续更新! 二、函数切换原理 在使用C语言编写51单片机的程序时,如果我们在函数一中调用另外一个函数,只需要添加一......
    与这个确切的版本有关。 不同的ARM版本的命名也可能令人困惑: 编写汇编 我们首先需要了解汇编语言编程的基础知识,这需要在开始之前有一些背景知识。 您不需要知道汇编语言的每一个小细节,但其......
    些过程都是针对ARM内部寄存器结构的操作,用C语言编程是很难实现的。因此在转到应用程序的c/c++编写之前,需要用ARM汇编语言编写启动代码,由启动代码完成系统初始化以及跳转到用户C程序。在ARM设计......
    ,LD01AJMPEXITLD01: AJMPEXIT……9.字母I和数字1混淆:冒失鬼的常见问题。10.创造发明不存在的汇编语言指令:在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片......
    部分十六进制数是用字母来表示的,而程序内的标号也常用字母表示,为将标号和数据区分开,几乎所有的汇编语言都规定:凡是以字母开头(对十六进制数而言,就是A~F开头)的数字量,应当在前面添加一个数字“0”。至于......
    基于80C51单片机的出租车计费器设计;写在前面 本文将详细讲解如何在Proteus中,使用80C51单片机,编写汇编程序,实现出租车计费器,实现实时速度显示,行使里程统计及费用统计,以及......
    ,熟悉一下ARM汇编语言和硬件吧!   第一个程序当然要挑选简单的写哦,熟悉了一下GPIO,会了简单的输入输出,就可以写一个流水灯了呢!那么GPIO是个什么东东呢?记得在pc机上......
    机器模拟器,能够模拟各种机器,包括基于ARM的机器。您可以编写ARM汇编程序,使用GNU工具链编译它们,并在Qemu中执行和测试它们。 2.1.Qemu ARM Qemu将用于模拟Gumstix......
    ,AMP的编程难度也更低。因此,在MCU应用领域,AMP较SMP更为适合。   与独立的双MCU相比,AMP架构有很多优点。其中相当关键的就是,再添加一个内核的代价远比添加一个独立的MCU要低,尤其......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>