1516.基于AT91的μCOS Ⅱ移植.doc

上传人:仙人指路1688 文档编号:2392358 上传时间:2023-02-17 格式:DOC 页数:4 大小:119KB
返回 下载 相关 举报
1516.基于AT91的μCOS Ⅱ移植.doc_第1页
第1页 / 共4页
1516.基于AT91的μCOS Ⅱ移植.doc_第2页
第2页 / 共4页
1516.基于AT91的μCOS Ⅱ移植.doc_第3页
第3页 / 共4页
1516.基于AT91的μCOS Ⅱ移植.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《1516.基于AT91的μCOS Ⅱ移植.doc》由会员分享,可在线阅读,更多相关《1516.基于AT91的μCOS Ⅱ移植.doc(4页珍藏版)》请在三一办公上搜索。

1、基于AT91的C/ OS 移植摘要:本文以At91M42800A处理器为移植目标, 讨论实时操作系统C/OS_II 的移植技巧。在移植过程中,基于ARM7 体系结构特点进行编写说明, 具有通用性, 适合大部分ATA91系列芯片的移植。关键词:嵌入式操作系统;C/OS_II;AT91;移植1 引言目前,嵌入式操作系统在许多领域得到广泛应用。C/ OS 便是一种源代码公开的可移植、可裁剪的多任务嵌入式操作系统,其功能完备、性能可靠,与其它嵌入式操作系统相比,更适用于硬件资源有限的单片微机系统。基于ARM7 的AT91系列处理器则是低功耗的32 位RISC处理器, 它广泛应用于低功耗,低成本要求的消

2、费产品中。本文主要讨论将C/OS_II 移植到AT91M42800A上的方法。2 At91M42800A的特点和总体结构At91M42800A为ATMEL公司基于ARM7TDMI核的AT91 16/32 位微处理器家族的成员,其处理器核为高性能的32位RISC体系结构,并具有高密度的16位指令集和极低的功耗。其特点主要如下:集成了ARM7TDMI ARM Thumb处理器内核;完全可编程的外部总线接口;8通道外围数据控制器;8优先级、可单独屏蔽的向量中断器;5个可编程I/O口线;6通道16位定时器/计数器;2个主/从SP接口;3个系统定时器;该处理器有两条主要总线:先进系统总线ASB和先进外围

3、总线APB。ARM7TDMI通过ASB接口实现与片内32位寄存器、外部总线接口EBI以及AMBA桥的互连。AMBA桥用来驱动APB;APB用来访问片内外围,优化系统功耗。3 C/ OS 工作原理3.1C/ OS 的任务调度机制调度是指任务间的转换,即保存一个任务的执行环境并恢复另一个任务的执行环境,也称任务上下文的切换,其本质是任务堆栈与工作堆栈的相互复制。工作堆栈则是正在占用CPU 的任务所使用的堆栈,也称硬件堆栈或系统堆栈。每台机器或者说每个系统只有一个工作堆栈,CPU 通过堆栈指针操作工作堆栈的内容。每一次任务的调度都要进行任务上下文的保存和切换工作,即将当前工作堆栈的内容复制到旧任务的

4、任务堆栈中,同时也把新任务的任务堆栈内容装入工作堆栈中去。3.2仿真系统中C/ OS 的移植条件对C/ OS 进行移植时,必须满足5个条件:(1)处理器C编译器支持可重入代码的生成;(2)用C语言可以打开和关闭中断;(3)处理器支持中断,并能产生定时中断;(4)处理器支持足够的R A M 空间;(5)处理器有相应的指令;3.3C/ OS 的移植过程C/OS_II 移植主要集中在三个文件中: OS_CPU.H、OS_CPU_A.ASM、OS_CUP_C.C、OS_CPU.H 包括了用#define 语句定义的处理器相关的常数、宏以及类型。OS_CPU_A.ASM包括用户编写的汇编语言函数。OS_

5、CUP_C.C 包括用户编写的C语言函数。移植中需要修改的部分如表1。名称类型所在文件语言不依赖编译的数据类型数据类型OS_CPU.HC语言堆栈方向宏定义OS_CPU.HC语言人物堆栈初始化函数OS_CPU_C.CC语言时钟节拍中断服务函数OS_CPU_A.ASM汇编开、关中断的方式宏定义OS_CPU.HC语言开、关中断宏OS_CPU.HC语言任务级的切换函数OS_CPU_A.ASM汇编中断中的任务切换函数OS_CPU_A.ASM汇编启动最高优先级任务函数OS_CPU_A.ASM汇编任务级的切换函数OS_CPU_C.CC语言表一3.3.1 堆栈方向C/OS_II 使用结构常量OS_STK_GR

6、OWTH 来指定堆栈的生长方式:置OS_STK_GROWTH为0,表示堆栈从下(低地址)往上(高地址) 增长。置OS_STK_GROWTH为1,表示堆栈从上(高地址) 往下(低地址)增长。ARM处理器对两种方式均支持,但在本文中OS_STK_GROWTH 的值定义为1,它在OS_CUP.H 中定义。#define OS_STK_GROWTH 1。3.3.2 系统时钟节拍中断服务程序OSTickISR()时钟节拍中断是一个周期性中断,为实时内核提供时钟拍。频率越高,系统负荷越重。其周期的大小决定了内核所能应用系统提供的最小时间间隔服务。一般的设计中使用定器,由用户自己建立中断来解决。OSTick

7、ISR()系统时钟节拍断服务函数,需要用汇编在进入中断服务程序时保存寄存器出时恢复。下面给出汇编的伪指令,移植时用汇编语言做相的代换就行了。汇编程序伪代码如下:保存必要的CPU寄存器;调用OSIntEnter或OSIntNesting直接加1;if(OSIntNesting =1)OSTCBCur-OSTCBStkPtr=StackPointer;给产生中断的设备清中断;重新允许中断;(可选)调用C/OS_IIC代码OSTimeTick();调用OSIntExit();if(要进行任务切换)调用OSIntCtxSw;elseif恢复保存了的CPU 寄存器;执行中断返回指令;3.3.3 使用软中

8、断SWI 作为底层接口ARM处理器核具有2 个指令集, 用户任务还可以有2 种处理器模式:用户模式和系统模式, 组合起来具有4 种方式, 各种方式对系统资源有不同的访问控制权限。同时移植需要兼顾ucos/II 内核事先固化在Flash 中, 事后任务从别的地方调入应用。为了使底层接口函数与处理器状态无关, 同时使任务调用相应的函数不需要知道函数的位置。在移值中使用软中断指令SWI 作为底层接口, 使用不同的功能号区分不同的函数。在移植中分配四个功能号给要移植的四个功能函数。参考如下:底层功能函数声明( os_cup.h) :_swi(0x00) void OS_TASK_SW(void); /

9、* 任务级任务切换函数*/_swi(0x01) void _OSStartHighRdy(void); /* 运行优先级最高的任务*/_swi(0x02) void OS_ENTER_CRITICAL(void); /* 关中断*/_swi(0x03) void OS_EXIT_CRITICAL(void); /* 开中断*/参考的软件中断汇编程序接口如下:汇编程序伪代码:SoftwareInterrupt重新设置堆栈指针保存任务环境中断前是否是Thumb 状态是: 取得Thumb 状态SWI 号否: 取得arm 状态SWI 号r0 = SWI 号, R1 指向参数存储位置到C 语言程序, 按

10、功能号调用相应的函数, 功能号在r0 中恢复任务环境以上代码充分考虑了ARM7 处理器两种指令集的情况, 本代码具有通用性, 有了这段代码后, C 语言部分就很简单了。3.3.4 任务级的切换函数OSCtxSw()和中断中的切换函数OSIntCtxSw()对比由C/OS_II 提供的两个函数的原型, OSCtxSw()中保存了当前任务的各种寄存器的状态, 而OSIntCtxSw()没有保存,因为在进入中断程序时, 中断已经保存了各种寄存器的状态,因此直接进行任务的切换。在我们的中断服务设计中, 为了减小中断执行的时间, 增加执行效率, 在中断中并没有保存所有的寄存器, 只保存了一些必要的寄存器

11、到IRQ 堆栈中, 比如只用保留R0- R3、R12、LR 寄存器。在必要时才将所有的寄存器保存到用户的堆栈中。所以两种切换情况要做的工作是一样的, 都可以用同一段汇编代码来实现。代码实现的流程图1, 用相应的汇编代码_ OSIntCtxSw 实现就可以。3.3.5 启动最高优先级任务OSStarHighRdy()C/OS_II 启动多任务环境的函数叫做OSStart()。这个函数最终调用OSStarHighRdy()函数来运行多任务启动前优先级最高的任务。OSStarHighRdy()函数在文件OS_CPU_A.ASM中用汇编实现。汇编程序伪代码:_OSStartHighRdy转换到系统模式

12、;调用用户定义的OSTaskSwHook();OSRunning = TRUE;得到将要恢复运行任务的堆栈指针;Stack pointer = OSTCBHighRdy- OSTCBStkPtr;从新任务堆栈中恢复处理器的所有寄存器;执行中断返回指令;图14 结束语以上的程序代码已在At91M42800A 芯片上得到了很好的移植,运行稳定。本文在移植中充分考虑了ARM7 处理器两种指令集的情况, 使用软中断作为底层接口, 使移植代码具有通用性。任务级的切换函数OSCtxSw()和中断中的切换函数OSIntCtxSw(), 用同一段汇编代码来实现, 减小中断执行的时间, 增加执行效率。参考文献1 熊光泽.嵌入式系统原理及应用开发技术.北京航天航空大学出版社,2004.2 程佩青.数字信号处理教程.清华大学出版社,2005.3 Jean J.Labrosse 著邵贝贝等译嵌入式实时操作系统C/OS_II (第2 版) M 北京:北京航天航空大学出版社,2004.4 周立功等编著ARM与嵌入式系统基础教程M 北京:北京航天航空大学出版社,2005.5 杜春雷著ARM体系结构与编程M清华大学出版社,2005.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号