1516.基于at91的μcos ⅱ移植

1516.基于at91的μcos ⅱ移植

ID:6664079

大小:119.00 KB

页数:4页

时间:2018-01-21

1516.基于at91的μcos ⅱ移植_第1页
1516.基于at91的μcos ⅱ移植_第2页
1516.基于at91的μcos ⅱ移植_第3页
1516.基于at91的μcos ⅱ移植_第4页
资源描述:

《1516.基于at91的μcos ⅱ移植》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

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

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

3、O口线;6通道16位定时器/计数器;2个主/从SP接口;3个系统定时器;该处理器有两条主要总线:先进系统总线ASB和先进外围总线APB。ARM7TDMI通过ASB接口实现与片内32位寄存器、外部总线接口EBI以及AMBA桥的互连。AMBA桥用来驱动APB;APB用来访问片内外围,优化系统功耗。3μC/OSⅡ工作原理3.1μC/OSⅡ的任务调度机制调度是指任务间的转换,即保存一个任务的执行环境并恢复另一个任务的执行环境,也称任务上下文的切换,其本质是任务堆栈与工作堆栈的相互复制。工作堆栈则是正在占用CPU的任务所使用的堆栈

4、,也称硬件堆栈或系统堆栈。每台机器或者说每个系统只有一个工作堆栈,CPU通过堆栈指针操作工作堆栈的内容。每一次任务的调度都要进行任务上下文的保存和切换工作,即将当前工作堆栈的内容复制到旧任务的任务堆栈中,同时也把新任务的任务堆栈内容装入工作堆栈中去。3.2仿真系统中μC/OSⅡ的移植条件对μC/OSⅡ进行移植时,必须满足5个条件:(1)处理器C编译器支持可重入代码的生成;(2)用C语言可以打开和关闭中断;(3)处理器支持中断,并能产生定时中断;(4)处理器支持足够的RAM空间;(5)处理器有相应的指令;3.3μC/OSⅡ

5、的移植过程μC/OS_II移植主要集中在三个文件中:OS_CPU.H、OS_CPU_A.ASM、OS_CUP_C.C、OS_CPU.H包括了用#define语句定义的处理器相关的常数、宏以及类型。OS_CPU_A.ASM包括用户编写的汇编语言函数。OS_CUP_C.C包括用户编写的C语言函数。移植中需要修改的部分如表1。名称类型所在文件语言不依赖编译的数据类型数据类型OS_CPU.HC语言堆栈方向宏定义OS_CPU.HC语言人物堆栈初始化函数OS_CPU_C.CC语言时钟节拍中断服务函数OS_CPU_A.ASM汇编开、关

6、中断的方式宏定义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_GROWTH来指定堆栈的生长方式:置OS_STK_GROWTH为0,表示堆栈从下(低地址)往上(高地址)增长。置OS_STK_GROWTH为1,表示堆栈从上(高地址)往下(低地址)增长。ARM处理器对两种方

7、式均支持,但在本文中OS_STK_GROWTH的值定义为1,它在OS_CUP.H中定义。#defineOS_STK_GROWTH1。3.3.2系统时钟节拍中断服务程序OSTickISR()时钟节拍中断是一个周期性中断,为实时内核提供时钟拍。频率越高,系统负荷越重。其周期的大小决定了内核所能应用系统提供的最小时间间隔服务。一般的设计中使用定器,由用户自己建立中断来解决。OSTickISR()系统时钟节拍断服务函数,需要用汇编在进入中断服务程序时保存寄存器出时恢复。下面给出汇编的伪指令,移植时用汇编语言做相的代换就行了。汇编

8、程序伪代码如下:保存必要的CPU寄存器;调用OSIntEnter或OSIntNesting直接加1;if(OSIntNesting==1){OSTCBCur->OSTCBStkPtr=StackPointer;}给产生中断的设备清中断;重新允许中断;(可选)调用μC/OS_IIC代码OSTimeTick();调用OS

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。