主页 > 计算机论文 > 计算机应用论文 > 计算机应用 > 正文

计算机应用 基于μC/OS的嵌入式系统应用开发研讨

2019-05-12 10:20:51来源:论文阁作者:佚名
计算机应用导读:本文引见了嵌入式系统的概念,剖析了C/OS的内核构造,并细致引见了在具有ARM体系构造的S3C44B0微处置器上停止C/OS操作系统的移植和应用程序及驱

本文引见了嵌入式系统的概念,剖析了μC/OS的内核构造,并细致引见了在具有ARM体系构造的S3C44B0微处置器上停止μC/OS操作系统的移植和应用程序及驱动程序的开发。

关键词:嵌入式系统,μc/os,微处置器

一、嵌入式系统概述

嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的详细应用相分离后的产物,目前嵌入式系统曾经浸透到日常生活的各个方面,其在工业、效劳业、消费电子等范畴的应用范围都不时扩展,嵌入式计算机系统的正式定义为:以应用为中心,以计算机技术为根底,软件硬件可裁减,契合应用系统对功用、牢靠性、本钱、体积、功耗的严厉请求的专用计算机系统。嵌入式系统的主要特征有:系统内核小;专用性强;系统精简;嵌入式软件请求高实时性的操作系统软件;软件请求高质量和高牢靠性;嵌入式系统开发需求特地的开发工具和环境。

嵌入式系统由硬件和软件两大局部组成,在本开发应用中,选择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);

}

当前任务堆栈初始化完成后,OSTaskStkInit 返回新的堆栈指针stk,在 OSTaskCreate()执行时将会调用 OSTaskStkInit 的初始化过程,然后经过OSTCBInit()函数调用将返回的sp指针保管到该任务的TCB块中。

OSStartHighRdy() 该函数是在主程序OSStart( )多任务启动后执行,担任从最高优先级任务的TCB控制块中取得该任务的堆栈指针sp,经过sp依次将cpu现场恢复,这时系统就将控制权交给用户创立的该任务进程,仅执行一次,尔后多任务优先级调度由下面函数执行。

栏目分类

推荐论文