基于μC/OS的嵌入式系统应用开发研究

分享到:

        本文介绍了嵌入式系统的概念,分析了μC/OS的内核结构,并详细介绍了在具有ARM体系结构的S3C44B0微处理器上进行μC/OS操作系统的移植和应用程序及驱动程序的开发。

  The paper bring forward the conception of Embedded System ,Analyse the core kere of μc/os ,moreover  detailedly introduce grafting the μC/OS's operating system on the ARM's architectural structure of S3C44B0's microprocessor and empolder  on application and driver program 。

  一、嵌入式系统概述

  嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物,目前嵌入式系统已经渗透到日常生活的各个方面,其在工业、服务业、消费电子等领域的应用范围都不断扩大,嵌入式计算机系统的正式定义为:以应用为中心,以计算机技术为基础,软件硬件可裁减,符合应用系统对功能、可靠性、成本、体积、功耗的严格要求的专用计算机系统。嵌入式系统的主要特征有:系统内核小;专用性强;系统精简;嵌入式软件要求高实时性的操作系统软件;软件要求高质量和高可靠性;嵌入式系统开发需要专门的开发工具和环境。

  嵌入式系统由硬件和软件两大部分组成,在本开发应用中,选择ARM7TDMI内核结构的samsung公司的s3c44b0作为微处理器芯片,该芯片具有主频高、运算速度快,超低功耗、价格低廉、结构简单等特点,在该内核基础上扩展了一系列完整的通用外围器件,主要有:片内8KB高速缓存、带有1个专用DMA通道的LCD控制器、2个通用DMA通道、1个多主机I2C总线控制器、5个PWM定时器及1个内部定时器、71个通用I/O口、8个外部中断源、8个10位ADC等资源,主频为66MHZ,系统支持大小端模式,共256MB的地址空间,支持8/16/32位数据总线编程。

  开发平台外配与用户交互接口有RS-232串口电路、外扩flash、sdram,USB控制电路、以太网电路、键盘,JTAG接口电路部分。

  实时嵌入式操作系统的种类繁多,大体上可以分为两种:商用型和免费型,前者系统功能稳定、可靠,并有完善的技术支持和售后服务,建立应用开发较为容易,但价格昂贵,代表性的有美国WindRiver公司的VxWorks操作系统、Microsoft公司的WinCE操作系统;免费型可以节约成本,且源码公开,便于开发,代表性的有嵌入式Linux系统、μC/OS系统。

   二、嵌入式μC/OS的体系结构

  由于μC/OS结构简单构介,编程工具绝大部分是C语言编程,可以在大多数界面友好的编译器中编译生成目标代码,如Borland C、Keil等工具,且其内核最小可以到几十K,可以在多种体系结构的微处理器上移植,用户的工作较小,源代码开放,便于学习。μC/OS-II的几大组成部分有:

  核心部分(OSCore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。

  任务处理部分(OSTask.c)完成任务的操作;包括任务的建立、删除、挂起、恢复等等。

  时钟部分(OSTime.c)主要完成任务延时等操作。
  

  任务同步和通信部分 为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;  

  μC/OS-II的软件体系结构如图1所示。从图1中可以看到,如果要使用μC/OS-II, 必须为其编写OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM三个文件。

  三、μC/OS在ARM微处理器上的移植

  μC/OS-II的全部源代码量大约是6000-7000行,一共有15个文件。将 μC/OS-II 移植到ARM处理器上,需要完成的工作也非常简单,只需要修改三个和ARM体系结构相关的文件,代码量大约是500行。以下分别介绍这三个文件的移植工作:

  OS_CPU.H 文件  数据类型定义,这部分的修改是与所用的编译器相关的,不同的编译器会使用不同的字节长度来表示同一数据类型,这里采用的编译器为集成可视化开发环境ARM SDT 2.5,相关的数据类型的定义如下:

   #define BYTE       INT8S      /* Define data types for  backward compatibility */                            

  #define UBYTE      INT8U       /*  .to uC/OS V1.xx.  Not actually needed for .  */

  #define WORD       INT16S       /*     ... uC/OS-II.                     */                              

  #define UWORD      INT16U

  #define LONG       INT32S

  #define ULONG      INT32U

  堆栈单位因为处理器现场的寄存器在任务切换时都将会保存在当前运行任务的堆栈中,所以OS_STK 数据类型应该是和处理器的寄存器长度一致的。

  typedef unsigned int   OS_STK;       /*   Each stack entry is 16-bit wide    */

  堆栈增长方向该设置由编译器选项决定,在本开发中设定堆栈由高地址向低地址增长。

  #define OS_STK_GROWTH    1          //define the stack to grow from high to low

  2、OS_CPU_C.C 文件

  任务堆栈初始化  这里涉及到任务初始化时的一个堆栈设计,也就是在堆栈增长方向上如何定义每个需要保存的寄存器位置,在ARM体系结构下,任务堆栈空间由高至低依次将保存着pc、lr、r12、r11、r10、… r1、r0、CPSR、SPSR。

  void  *OSTaskStkInit (void (*task)(void *pd), void *pdata, void *ptos, INT16U opt)

{

    unsigned int *stk ;

    opt    = opt;                      /*  'opt' is not used, prevent warning   */

    stk    = (unsigned int *)ptos;      /*    Load stack pointer                */                                    

    *--stk = (unsigned int) task;         / *     lr                      */

    ……;                          /*      r12—r0    */

    *--stk = ARM_MODE_SYS;               /*   system mode   */

    *--stk = ARM_MODE_SYS;               /*   system mode   */

    return ((void *)stk);

}

继续阅读
盘点11种基于ARM的嵌入式操作系统

TinyOS是一个开源的嵌入式操作系统,它是由加州大学的伯利克分校开发出来的,主要应用于无线传感器网络方面。程序采用的是模块化设计,所以它的程序核心往往都很小,一般来说核心代码和数据大概在400 Bytes左右,能够突破传感器存储资源少的限制。TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件(A Wiring Specification)将各种组件连接起来,以完成它所需要的功能。

浅析如何学习基于ARM平台的嵌入式系统

本文将从技术和就业经验等角度为即将进入嵌入式开发的程序员们,详细讲述了嵌入的概念,嵌入式开发之间的异同以及应该如何做出选择,希望对大家有所帮助。

工作几年,是否感觉技术这碗饭,越来越难?

工作几年,更懂得制约自己职业发展的短板,暂停一下充充电,让未来因此而改变。 两个月时间能学到什么? 两个月的时间里你将系统地掌握到以下所有关键的专业技能,没错,一期学员已经用实际结果进行了证明,资深专家指导+一定的专业基础+发自内心的热爱+刻苦用心=专有所长,泛有所知,融会贯通!相信自己,你能行。

工业以太网与现场总线,谁将成为主流?

现场总线、以太网、无线技术各有优劣,那么谁才会是未来的主流呢?显然对所有生产商或机器并非只有一种技术才是“正确的”方案?生产商必须权衡各类方案带来的价值。有没有比采用普通方案带来的利益更有价值的另一种利润?如果有,这些方案如何和几年内维护另一个工厂层技术和对应供应商关系的成本相比较?这是个关键的问题,并且只有最终用户可以回答。同样,这些问题也适用于现场总线和以太网技术,甚至是将来无线网络方案的选择。

嵌入式系统在机器人视觉中的应用

随着Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合已成为大势所趋。此时期新的微处理器层出不穷,要求嵌入式操作系统的设计更加便于移植,支持更多的微处理器

精彩活动