μCOS-II在ATmega128单片机上的移植和开发

发布者:石头上种庄稼最新更新时间:2012-04-06 来源: 医疗设备信息 关键字:μCOS-II  实时操作系统  RTOS 手机看文章 扫描二维码
随时随地手机看文章

引    言 

本文介绍μC/OS-Ⅱ移植到ATMEL公司的8位微控制器ATmega128上的过程。所谓移植,就是使一个实时内核可以在某个微处理器上运行,并在此基础上进行驱动程序开发,使之成为一个实用的嵌入式系统。嵌入式系统包括了硬件和软件两部分,由于系统硬件资源的限制和实际应用的要求,应用系统对软件的基本要求是体积小,执行速度快,具有较好的裁减性和可移植性。嵌入式系统的软件一般由嵌入式操作系统和应用软件组成,通过在操作系统之上开发应用软件,可以屏蔽掉很多底层硬件细节,使得应用程序调试方便,移植简单,易维护,同时开发周期也短。多数实时操作系统为用户提供一些标准的API函数,程序开发人员可以利用这些API函数进行应用程序开发。但是现在商用型的实时操作系统价格非常昂贵,而免费型的实时操作系统μCOS-II作为一个源代码公开的实时内核已经有了10余年使用实践,许多行业都有成功应用该内核的实例。但由于μCOS-II只是一个实时内核,它没有像商用型实时操作系统那样提供API函数接口,有很多工作需要用户去完成,还需要根据实际应用需要进行功能扩展,包括底层的硬件驱动、文件系统、用户图形接口等程序的编写。 

μC/OS-II嵌入式实时操作系统简介 

μC/OS- II是著名的、源码公开的实时内核,可用于各类8位、16 位、32位单片机或DSP。μC/OS-II是一个完整、可移植、可固化、可裁减的占先式实时多任务内核。它用ANSIC语言编写,包含小部分与硬件有关的汇编代码,使之便于移植,可以在不同架构的微处理器上使用。到目前为止,该内核已有10多年的应用史,在医疗、网络、通信等许多领域得到了广泛应用。 μC/OS-II内核可以分为几个独立的部分,分别是任务管理、时间管理、任务间通信、内存管理几个独立的部分,他的许多功能都是可配置的,这样可以根据应用的需要对操作系统进行裁减。μC/OS-II是占先式实时内核,他总是运行在就绪条件下优先级最高的任务,μC/OS-II总共可以管理64个任务,赋予每个任务的优先级必须是不同的,每个任务都有自己独立的堆栈,可以压低用户程序对内存的需求。全部μC/OS-II的函数调用与服务执行时间具有可确定性,它的系统服务的执行时间不依赖于应用程序任务的多少。μC/OS-II中的任务可以是一个无限的循环,也可以在执行完一次后被删除掉,任务在休眠、就绪、运行、等待和挂起等几个状态之间进行转换。μC/OS-II要求用户提供定时中断来实现延时和超时控制等功能,这个定时中断称为时钟节拍,他的实际频率由用户的应用程序决定,一般为10~100Hz 。节拍频率越高,系统的负荷越重。μC/OS-II中有三种用于数据共享和任务通信的方法:信号量、邮箱和消息队列。一个任务或者中断服务子程序可以通过事件控制块向另外的任务发信号;一个任务可以等待另一个任务或中断服务子程序给它发送信号;或者是多个任务等待同一个信号的发生,在这种情况下,优先级最高的任务将得到这一信号并进入就绪状态准备执行。 

ATmega128微处理器的硬件特点 

ATmega128 的MCU包括一个算术逻辑单元(ALU) ,一个状态寄存器(SREG) ,一个通用工作寄存器组和一个堆栈指针。状态寄存器(SREG) 的最高位I是全局中断允许位。如果全局中断允许位为零,则所有中断都被禁止。当系统响应一个中断后,I位将由硬件自动清“0”;当执行中断返回 (RETI) 指令时,I位由硬件自动置“1”,从而允许系统再次响应下一个中断请求。通用工作寄存器组是由32个8位的通用工作寄存器组成。其中R26~R31这6 个寄存器还可以两两合并为3 个16位的间接地址寄存器,这些寄存器可以用来对数据存储空间和程序存储空间进行间接寻址的寄存器。堆栈指针(SP) 是一个指示堆栈顶部地址的16 位寄存器。ATmega128单片机的硬件堆栈的生长方向是向下的(从高地址向低地址生长) ,所以软件堆栈在定义的时候,也要采取相同的生长方向。ATmega128单片机的数据存储器是线形的,从低地址到高地址依次是CPU寄存器区(32个通用寄存器) ,I/O寄存器区,数据存储区。 

ATmega128的中断响应机制 

ATmega128 有34个不同的中断源,每个中断源和系统复位在程序存储空间都有一个独立的中断向量(中断入口地址) 。每个中断源都有各自独立的中断允许控制位,当某个中断源的中断允许控制位为“1”且全局中断允许位I也为“1”时,系统才响应该中断。当系统响应一个中断请求后,会自动将全局中断允许位I清零,此时,后续中断响应被屏蔽。当系统执行中断返回指令RETI时,会将全局中断允许位I置“1”,以允许响应下一个中断。若用户想实现中断嵌套,必须在中断服务子程序中将全局中断允许位I置“1”。在中断向量表中,处于低地址的中断具有高的优先级。优先级高只是表明在多个中断同时发生的时候,系统先响应优先级高的中断,并不含有高优先级的中断能打断低优先级的中断处理工作的意思。由于μC/OS-Ⅱ的任务切换实际上是模拟一次中断,因此需要知道CPU的中断响应机制。中断发生时,ATmega128按以下步骤顺序执行: 

(1) 全局中断允许位I清零。 

(2) 将指向下一条指令的PC值压入堆栈,同时堆栈指针SP减2。 

(3) 选择最高优先级的中断向量装入PC,程序从此地址继续执行中断处理。 

(4) 当执行中断处理时,中断源的中断允许控制位清零。中断结束后,执行RETI指令,此时: 

①全局中断允许位I置“1”。 

② PC从堆栈推出,程序从被中断的地方继续执行。特别要注意的是:ATmega128A单片机在响应中断及从中断返回时,并不会对状态寄存器SREG 和通用寄存器自动进行保存和恢复操作,因此,对状态寄存器SREG 和通用寄存器的中断保护工作必须由用户来完成。 

ATmega128的定时器中断 

ATmega128 有三个定时器:T0,T1,T2,可以为μCOS-II提供精确的时钟源。ATmega128的三个定时器都有计数溢出中断功能,而且T1和T2还有匹配比较中断,即定时器计数到设定的值时,产生中断并自动清零。若系统采用这种中断方式,其好处是在中断服务程序ISR中不需要重新装载定时器的值。 [page]

将μCOS-II移植到ATmega128单片机上 

移植就是使一个实时内核能在ATmega128上运行。μCOS-II大部分的代码是用ANSIC编写的,因此移植性很好。但是对不同的微处理器,仍然需要使用C和汇编语言来编写其中与处理器相关的代码,寄存器的读、写只能通过汇编语言的存储和加载指令来实现。要使μCOS-II能够正常工作,处理器必须满足以下要求: 

①处理器的C编译器能产生可重入代码;可重入代码是指可以被一个以上的任务调用,而不必担心其数据会被破坏的代码。可重入代码任何时候都可以被中断,一段时间以后又可以重新运行,而相应的数据不会丢失,不可重入代码则不行。本文所使用ImageCrafT公司的ICCAVRV6. 30编译器能产生可重入代码;

②用C语言可以打开和关闭中断,本文所使用的ICCAVRV6. 30编译器支持在C语言中内嵌汇编语句且提供专门开关中断的宏:CLI() 和SEI() 。这样,使得在C语言中开关中断非常方便;

③处理器支持中断,并且能够产生定时中断(通常在10-100Hz 之间) ,ATmega128,有3 个定时器,能产生μC/OS-Ⅱ所需的定时中断;

④ 处理器能够支持容纳一定数量的硬件堆栈,ATmega128有4KRAM,硬件堆栈可以开辟在这4KRAM中;

⑤处理器有将堆栈指针和其他寄存器读取和存储到堆栈或内存的指令,一般的单片机都满足这个要求(如PUSH、POP指令) ,且ATmega128还具有直接访问I/O寄存器的指令( IN、OUT等) 。 

移植的实现μC/OS-Ⅱ的移植工作包括以下几个内容: 

(1) 用Typedef声明与编译器相关的数据类型(在OS-CPU. H文件中) ,由于不同的微处理器有不同的字长,在μC/OS-Ⅱ代码中不能使用C语言的shORT、inT、lOng 等数据类型,而采用INT8U、INT16U、INT32U等直观又可移植的数据类型来代换相应数据类型。 

(2) 用# definE设置一个常量OS-STK-GROWTH的值(OS-CPU. H) ,决定堆栈的生长方向,置0表示堆栈从下往上生长,置1表示堆栈从上往下生长。 

(3) # definE声明三个宏(OS-CPU. H) 。即进入临界代码段(criTicaLcOdEsecTiOn) 的方法OS-CRITICAL-METHOD定义为3 ,在宏OS-ENTER-CRITICAL() 中得到当前处理器状态字的值,并将其保存在C函数的局部变量中,这个变量在宏OS-EXIT-CRITICAL( ) 中用于恢复PSW。宏OS-TASK-SW() 是在内核从低优先级任务切换到高优先级任务时用到的,它总是在任务级代码中被调用。在ATMEGA128上移植,直接调用OSCTxSw () 任务切换函数就可以了。 

(4) 用C语言编写十个简单的函数(OS-CPU-C. C) ,OS2TAskSTKIniT() ;OSIniTHoOkBegiN() ;OSIniTHoOKEnd () ; OSTAskCreaTeHoOK( ) ;OSTAskDelHoOK( ) ;OSTAskSw HoOK();OSTAskSTaTHoOK() ;OSTimETickHoOk () ;OSTCB IniTHoOK() ;OSTAsKIdleHoOK() ;实际需要修改的只有OSTAskSTKIniT() 函数,其它九个函数都是由用户定义的。如果用户需要使用这九个函数,可将文件OS-CFG. H中的# definEcOnsTAnTOS-CPU-HOOKS-EN设为1,设为0表示不使用这些函数。函数OSTAskSTKIniT( ) 是由OSTAskCreaTE() 或OSTAskCreaTEExT() 调用,用来初始化任务堆栈的。经初始化后的任务堆栈应该跟发生过一次中断后任务的堆栈结构一样。由前叙述可知,ATmega128在发生中断后,自动保存了程序计数器PC。为了保存全部现场,还需要保存状态寄存器SREG ,R0~R31这32个通用寄存器及SP的值。 

(5) 编写四个汇编语言函数(OS-CPU-A. S) ,OSSTARTHighRdy () 使就绪态任务中优先级最高的任务开始运行;OSCTxSw () 完成将处理器的寄存器保存到堆栈中的任务后,将任务指针指向要恢复运行的任务,复制新任务的优先级,得到新任务的堆栈指针,恢复将运行任务的寄存器;OSIntC2TxSw () 完成在ISR中执行任务的切换;OSTicKISR() 提供系统时钟节拍服务;这些函数涉及到出栈和入栈操作,因此需要用汇编语言编写。做完以上工作,就是测试内核的移植是否正确。测试一个实时内核,可以运行一些简单的任务和时钟节拍中断任务,一旦调试成功就可以在上面扩展功能。 

硬件驱动程序的编写 

μCOS-II移植完成以后,就要在实时内核之上编写外设驱动程序。外设驱动程序可以提供访问外围设备的接口,把操作系统和外围设备硬件分离开来,当外设改变时,只需修改设备驱动程序,不影响操作系统内核。外设驱动程序主要完成以下功能: 

(1) 对设备初始化和释放;

(2) 把数据从内核传送到硬件和从硬件读取数据;

(3) 读取应用程序传送给设备文件的数据和回送应用程序请求的数据;

(4) 检测和处理设备出现的错误。对于扩展相应的API函数,不同的应用有不同的要求,可以根据硬件结构和实际应用,编写操作系统的API函数。基于μCOS- II进行扩展的RTOS的总体结构。在内核上开发应用,在把内核移植到自己的硬件目标板上后,在实时内核的基础上写出相应的驱动程序、内存操作等API函数,建立实时操作系统,最后利用这些API函数编写用户自己的应用程序,就构成了嵌入式系统软件。而应用程序处于整个系统的顶层,根据具体应用要求,其功能有多个任务完成,每个任务可以调用API函数,也可以调用与处理器无关的代码提供的系统服务。 

总    结 

采用μCOS-II内核开发的RTOS具有良好的实时性,可裁剪性,应用它可以使产品更可靠,功能更强大,开发周期更短。该系统目前已在我院开发的护理用体态语言机上成功应用。

关键字:μCOS-II  实时操作系统  RTOS 引用地址:μCOS-II在ATmega128单片机上的移植和开发

上一篇:爱特梅尔扩展广受欢迎的AVR MCU系列
下一篇:基于Atmega16的室内照明控制系统设计方案

推荐阅读最新更新时间:2024-03-16 12:57

实时操作系统μC/OS-II在MCF5272上的移植
摘要:介绍了实时操作系统μC/OS-II的特点和内核结构,并首次实现μC/OS-II在Motorola嵌入式处理器MCF5272上的移值。 关键词:μC/OS-II MCF5272 移植 GNU工具链 作为一个实时内核,μC/OS从1992年开始为人们熟悉,到现在已经发展为μC/OS-II。ΜC/OS-II最多支持56个任务,其内核为占先式,总是执行就绪态的优先级最高的任务,并支持Semaphore(信号量)、Mailbox(邮箱)、Message Queue(消息队列)等多种常用的进程间通信机制。与大多商用RTOS不同的是,μC/OS-II公开所有的源代码,并可以免费获得,对商业应用收取少量License费用。一般商用操作系
[工业控制]
基于μC/OS—II的嵌入式构件系统设计
引 言       近些年来,随着嵌入式产品需求的不断增加,嵌入式软件正变得越来越复杂,而产品的开发周期也越来越短。嵌入式软件开发迫切需要更高效的软件重用手段。       随着软件复用研究成为热点,其核心技术——构件化软件开发方法(CBD)引起了软件工程领域的高度关注,并且在工程应用领域获得了极大的成功。这种开发方法已在办公应用、电子商务、因特网及分布式网络应用中广泛使用;但在嵌入式领域,构件技术仍处于起步阶段,目前没有一个统一通用的构件规范。尽管如此,由于基于构件的软件设计方法能够极好地满足嵌入式软件几乎所有的特性(如定制、裁剪、动态演变等),有效缩短产品开发周期,这种设计方法无疑将给嵌入式系统的开发带来巨大的好处。
[嵌入式]
基于Small-RTOS51的数据采集器设计
引 言   随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步采用多任务的设计思想。实时内核也称为实时操作系统或RTOS。它使得实时应用程序的设计、扩展和维护变得更容易,不需要大的改动就可以增加新的功能。通过应用程序分割成若干独立的任务,RTOS使得应用程序的设计过程大为简化。使用可剥夺性内核时,所有时间要求苛刻的事件都得到了尽可能快捷、有效的处理。通过有效的服务,如信号量、邮箱、队列、延时、超时等,RTOS使得资源得到更好的利用。   目前8位单片机在嵌入式系统中,应用还是最广泛的。51多任务系统中,Keil C51 所带的RTX51 Full 太大(6KB多),且需要外部
[单片机]
基于Small-<font color='red'>RTOS</font>51的数据采集器设计
基于Small RTOS51的肠营养液输液系统
摘要:介绍一种基于Small RTOS51嵌入式操作系统的医疗仪器——智能型肠营养液输液泵。首先介绍系统的功能及硬件组成,然后重点介绍如何利用Small RTOS51来设计系统软件。最后,给出应用Small RTOS51嵌入式操作系统制造的智能型肠营养液输液泵的试验数据。 关键词:Small RTOS51实时操作系统 肠营养液泵 嵌入式操作系统 引言 随着各种电子系统在各个领域中应用的不断深入,对电子系统本身的要求也越来越高,尤其对于控制系统软件设计的可靠性、实时响应等各个方面的性能有了更严格的要求。单片机的程序设计不再是前后台的运行模式,而是采用多任务实时操作系统的设计思想。由于使用嵌入式操作系统,可以将具体应用分解成多
[嵌入式]
风河推出物联网应用实时操作系统 VxWorks 7
【新闻要点】 风河公司推出新一代VxWorks 7实时操作系统平台。 RTOS由此进入真正的模块化、可升级平台时代,可广泛支撑各种物联网设备,从消费者可穿戴设备到大型网络设备皆可应用。 新平台充分展示了风河公司致力于支持企业抓住物联网市场新机会的愿景。 全球领先的智能互联系统嵌入式软件提供商风河®公司近日宣布,已经完成了对其实时操作系统(RTOS, Real-Time Operating System)的全面升级,足以支持业界客户抓住物联网所带来的新机遇。最新发布的风河VxWorks 7不仅进一步强化了风河公司在传统的航空、国防、医疗以及工业市场的领导地位,而且会在新兴的物联网应用领域大放异彩。 风河公司产品管理副总裁
[物联网]
实时操作系统μC/OS-II的改进与应用研究
  传统的嵌入式系统设计大多采用单任务顺序机制,应用程序是一个无限的大循环,所有的事件都按顺序执行,与时间相关性较强的事件靠定时中断来保证,由此带来系统的稳定性、实时性较差;尤其当系统功能较复杂,且对实时性要求较严格时,这种单任务机制的弱点暴露无遗。本文引入的嵌入式操作系统μC/OS-II是一个多任务的实时内核,主要提供任务管理功能。在实时系统中的多个任务,必须决定这些任务的优先级顺序,任务调度算法需要动态为就绪任务的优先级排序。为了满足对实时性要求越来越高的需要,同时避免频繁改变就绪任务的优先级,在分析μC/OS-II源代码的基础上,对其调度算法进行改进。    1 μC/OS-II概述   μC/OS-II是一个完整的,可
[应用]
嵌入式实时操作系统Nucleus PLUS在S3C2410A上移植的实现
引言 Nucleus PLUS是美国ATI 公司为实时性要求较高的嵌入式系统应用设计的操作系统内核。约95%的Nucleus PLUS代码用ANSI C语言编写,因此,非常便于移植并能够支持大多数类型的微处理器,如X86、68K、PowerPC、MIPS、ARM等。经过截减编译后,Nucleus PLUS 核心代码区一般不超过20KB大小。 同时提供TCP/IP网络、图形界面Grafix、文件系统File等模块。还有一个特点就是免费提供源代码,有利于节省开发费用。 S3C2410A是三星公司推出的基于ARM920T内核高性能低功耗16/32位RISC微控制器,内部集成了丰富的系统外围控制器。配合Nucleus PLUS操作系统可
[工业控制]
基于μCOS-II 的USB主机系统
  μC/OS-II 是美国学者Lacrosse 设计的一个优秀的嵌入式实时操作系统,其代码绝大部分用ANSIC 语言编写,可用于8 位、16 位、32 位、甚至64 位微处理器、微控制器、数字信号处理器等,具有操作系统最基本最核心的功能,非常适于在小型系统和片上系统(SOC)中使用。USB 为个人电脑与嵌入式设备之间的连接提供了一种标准化、单一化的接口,其高效性和可靠性使得它已经成为嵌入式系统的首选接口。此LPC2378 读卡器具有卡票检测、消费扣钱、系统升级、下发黑名单、在线充值、余额查询等功能,但这些功能的实现都依赖于上位机的请求,业务应用模块只有在获得相应的请求后才能进行相应的处理并将处理结果返回给上位机。而USB 主机系
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved