1516.基于AT91的μCOS Ⅱ移植推荐.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1516.基于AT91的μCOS Ⅱ移植推荐

基于AT91的μC/ OS Ⅱ移植 摘要:本文以At91M42800A处理器为移植目标, 讨论实时操作系统μC/OS_II 的移植技巧。在移植过程中,基于ARM7 体系结构特点进行编写说明, 具有通用性, 适合大部分ATA91系列芯片的移植。 关键词:嵌入式操作系统;μC/OS_II;AT91;移植 1 引言 目前,嵌入式操作系统在许多领域得到广泛应用。μC/ OS Ⅱ便是一种源代码公开的可移植、可裁剪的多任务嵌入式操作系统,其功能完备、性能可靠,与其它嵌入式操作系统相比,更适用于硬件资源有限的单片微机系统。基于ARM7 的AT91系列处理器则是低功耗的32 位RISC处理器, 它广泛应用于低功耗,低成本要求的消费产品中。本文主要讨论将μ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和先进外围总线APB。ARM7TDMI通过ASB接口实现与片内32位寄存器、外部总线接口EBI以及AMBA桥的互连。AMBA桥用来驱动APB;APB用来访问片内外围,优化系统功耗。 3 μC/ OS Ⅱ工作原理 3.1 μC/ OS Ⅱ的任务调度机制 调度是指任务间的转换,即保存一个任务的执行环境并恢复另一个任务的执行环境,也称任务上下文的切换,其本质是任务堆栈与工作堆栈的相互复制。工作堆栈则是正在占用CPU 的任务所使用的堆栈,也称硬件堆栈或系统堆栈。每台机器或者说每个系统只有一个工作堆栈,CPU 通过堆栈指针操作工作堆栈的内容。每一次任务的调度都要进行任务上下文的保存和切换工作,即将当前工作堆栈的内容复制到旧任务的任务堆栈中,同时也把新任务的任务堆栈内容装入工作堆栈中去。 3.2 仿真系统中μC/ OS Ⅱ的移植条件 对μC/ OS Ⅱ进行移植时,必须满足5个条件: (1)处理器C编译器支持可重入代码的生成; (2)用C语言可以打开和关闭中断; (3)处理器支持中断,并能产生定时中断; (4)处理器支持足够的R A M 空间; (5)处理器有相应的指令; 3.3 μC/ OS Ⅱ的移植过程 μ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.H C语言 堆栈方向 宏定义 OS_CPU.H C语言 人物堆栈初始化 函数 OS_CPU_C.C C语言 时钟节拍中断服务 函数 OS_CPU_A.ASM 汇编 开、关中断的方式 宏定义 OS_CPU.H C语言 开、关中断 宏 OS_CPU.H C语言 任务级的切换 函数 OS_CPU_A.ASM 汇编 中断中的任务切换 函数 OS_CPU_A.ASM 汇编 启动最高优先级任务 函数 OS_CPU_A.ASM 汇编 任务级的切换 函数 OS_CPU_C.C C语言 表一 3.3.1 堆栈方向 μC/OS_II 使用结构常量OS_STK_GROWTH 来指定堆栈的生长方式:置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() 时钟节拍中断是一个周期性中断,为实时内核提供时钟拍。频率越高,系统负荷越重。其周期的大小决定了内核所能应用系统提供的最小时间间隔服务。一般的设计中使用定器,由用户自己建立中断来解决。OSTickISR()系统时钟节拍断服务函数,需要用汇编在进入中断服务程序时保存寄存器出时恢复。下面给出汇编的伪指令,移植时用汇编语言做相的代换就行了。汇编程序伪代码如下:

文档评论(0)

feixiang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档