中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 科技成果 >>电子行业新闻正文

实时操作系统μC/OS-II在AT89S52上的移植

时间:2007/8/27 11:03:00  作者:  来源:ic72  浏览人数:1418
 
 

      1引言

      实时操作系统是为微处理器或微控制器管理设计的底层软件。在嵌人式应用中,使用实时操作系统的最主要目的是增加系统的可靠性,提高开发效率、缩短开发周期。μC/OS-II是一个可移植(portable)、可固化的(romable)和占先式的(preemptive)实时内核,最多可以管理64个任务(用户最多可以设计56任务)。μC/oS-II的源代码公开,绝大部分代码使用标准的ANSIC:书写,所以可以方便地移植到很多不同种类的处理器或控制器上。用户可以免费从相关网站下载源代码。

      目前,51系列的单片机在世界范围内有着广泛的应用。AT89S52是ATMEL公司利用51内核生产的一款FLASH型8位微控制器。控制器内部集成了8 kB的FLASH,256 B RAM,3个16位定时计数器,4组8位并行口,1个全双工可编程串行口。

      笔者在用AT89S52单片机设计多路数据采集器时,在编译器KEIL环境下,成功地把μC/OS-II移植到AT89S52单片机上面。下面论述如何将μC/OS-II移植到AT89S52上。

      2移植条件和必要步骤

      μc/OS-II要求微处理器有堆栈指针、有CPU内部人栈与出栈指令以及一定容量的硬件堆栈。AT89S52能够满足这些要求。

      μC/OS-II在设计的时候充分考虑了可移植性。移植工作包括在OS CPU.H中设置1个常量、声明几个数据类型、声明3个宏,在OS CPU C.C中写6个简单的C函数,以及在OS CPU A.ASM中写几个汇编语言函数。

      3移植的主要过程

      3.1 OS CPU.H的编写

      OS CPU.H需要规定栈的增长方向。这里定义常量OS STK GROWTH为0,表明栈的增长方向向上。

      用户要用到的变量类型应该在这里定义,同时必须注意KEIL对C语言的扩展。笔者只定义了以下几种变量类型。
 

ic72新闻中心

ic72新闻中心

       最后还需要声明OS-TASK-SW()宏。 
      #define OS TASK SW() OSCtxSw()

      3.2 OS CPU C.C中相关函数的编写

      在(OS CPU C.C)中要写几个C函数(OS CPUC.C)。这几个C函数包括OSTaskStklnit(),OSTaskCreateHook(),OSTaskDelHook(),()STaskSwHook(),OSTaskStatHook(),OSTimeTickHook()。他们中除了OSTaskStkInit()外都是用户根据自己的需要定义的,可以没有任何内容。下面着重讨论OSTaskStklnit()。

      函数OSTaskStklnit()由任务创建函数OSTaskCreate()或()STaskCreateExt(),在建立每个任务的时候初始化任务堆栈。初始化后的任务堆栈看起来就像刚刚发生中断一样。开始运行这个任务就是模拟中断返回,把初始化后堆栈的各个值恢复给各个寄存器。所以初始化任务堆栈就是在任务堆栈中模拟发生过1次中断后的堆栈结构,按照中断后的进栈次序预留各个寄存器的存储空间,还要在这些存储空间里面放上恰当的初值。用户堆栈初始化时从下向上依次保存:用户堆栈长度,PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。

      初始化任务栈的时候,需要传递任务代码起始指针(task)、参数指针(pdata)、任务堆栈顶端的地址(就是堆栈栈顶指针ptos)。任务栈初始化完成后,返回1个新的堆栈栈顶指针,OSTaskcreate()或OSTaskCreateExt()将他保存到OS TCB中去。OSTaskStklnit()的程序清单如下:

      OS STK*OSTaskStklnit(void(*task)(void*pd),void*

      ppdata,OS STK *ptos,INTl 6U opt)reentrant

ic72新闻中心

      3.3oS_CPU_A.ASM中相关函数的编写

      在OS CPU A.ASM中要写几个汇编语言的程序。这几个汇编程序包括OSStARtHIghRdy(),OSTIckISR(),OSCtxSw()和OSIntCtxSw()。限于篇幅,笔者在这里只给出了OaNtARtHIghRdy()和OSTIckISR()的程序代码。

      这里先介绍4个宏:PUSHALL,POPALL,SAVESTFACK和RESTORESACK。PUSHALL的作用是把当前所有寄存器的内容以保存到系统栈中;POPALL的作用是在任务切换之前从系统堆栈恢复所有的寄存器中的内容;SAVESTACK的作用把系统栈的内容保存到任务栈(片外RAM);RESTORESTACK的作用把任务栈的内容复制到系统栈(片内)。在本设计中,由于AT89S52单片机的片内RAM有限,所以把任务栈设计在了片外。

      OSStARtHIghRdy()的作用是使处于就绪状态的任务开始运行。在这个函数中调用钩子函数OSTaskSwHook(),这个函数可以让用户扩展系统的功能。然后获得优先级最高的任务的指针,根据这个指针从要开始运行任务的任务堆栈中恢复所有寄存器,恢复完后执行1次中断返回(AT89S52单片机没有直接改变PC的指令),程序就开始运行就绪状态任务了。OSStARtHIghRdy()的程序清单如下:

ic72新闻中心

      OSTIcKISR()μC/OS-Ⅱ中的时钟节拍中断服务程序。μC/OS-Ⅱ需要用户提供周期性信号源,用于实现时间延时和确认超时。μC/OS-Ⅱ中的时钟节拍服务是通过在中断服务子程序OSTIcklSR()中调用OSTimeTick()来实现的。OSTIcklSR()的程序清单如下:
 

ic72新闻中心

      OSCtxSw()用在任务级的切换场合。当需要从低优先级的任务切换到高优先级的任务时或当前任务自动放弃CPU时,先保存处理器的内容到当前任务的任务堆栈。再调用钩子函数OSTaskSwHook。然后从要开始任务的任务堆栈里恢复所有寄存器和PC的值,最后执行中断返回指令开始运行新的任务。
OSIntCtxSw()用于中断级的任务切换。在μC/OS-Ⅱ中,中断发生后,有时会激活优先级比被中断的任务更高的任务,此时就需要任务切换,将调用OSIntCtxSw()。OSIntCtxSw()是在OSIntExit()中被调用的。

      4 结 语

      在移植过程中有几个地方必须注意:由于AT89852单片机的程序存储器和数据存储器容量有限,所以必须扩展片外ROM和RAM,必须把系统和用户程序对ROM和RAM的需求量都考虑在内,并留有一定的余量。为了更好地利用系统功能,还必须对OS CFG.H中的常量进行相关的设置。随着嵌入式技术的不断发展,相信μC/OS-Ⅱ将有更加广泛的应用。

 
【相关文章】
·基于研华动态库的工控卡扩展调试器设计
·单片机W77E58在“家校通
·实时操作系统μC/OS-II在AT89S52上的移植
·基于Intel PXA270的Blob启动流程分析
·采用分而治之的方法设计嵌入式系统
·PIC实现激光打标设备测控系统的研究与设计
·AP3012的应用
·基于TMS34020的图形显示处理模块的设计
·ABS控制器开发装置系统与设计
·一种基于VB的虚拟数字滤波器的设计
·嵌入式系统中“软外设”的研究
·基于MAX1968的LD自动温度控制系统设计
·气象应急移动(车载)服务系统综述
·片上系统中断机制的可靠性设计
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9