6嵌入式系统初始化与操作系统的移植.ppt

  1. 1、本文档共87页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
63 处理器支持硬件堆栈 ? ? COS-II 进行任务调度的时候,会把当前任务的 CPU 寄存 器存放到此任务的堆栈中,然后,再从另一个任务的堆栈 中恢复原来的工作寄存器,继续运行另一个任务。所以, 寄存器的入栈和出栈是 ? COS-II 多任务调度的基础。 ? ARM9 处理器中有专门的指令处理堆栈,可以灵活的使 用堆栈。 31 初始化堆栈 ? ARM 处理器有好几种运行状态(模式),各种状态都需 要有自己的堆栈,所以需要分别为这些堆栈分配空间并 设置好各自的堆栈指针 ? 每一种状态的堆栈指针寄存器( SP )都是独立的( System 和 User 模式使用相同的 SP 寄存器)。因此对 程序中需要用到的每一种模式都要给 SP 寄存器定义一个 堆栈地址。方法是改变状态寄存器 CPSR 内的状态位,使 处理器切换到不同的状态,然后给 SP 赋值。(注意不要 切换到 User 模式进行 User 模式的堆栈设置,因为进入 User 模式后就不能再操作 CPSR 回到别的模式了。可能 会对接下去的程序执行造成影响。) ? 一般堆栈的大小要根据需要而定,但是要尽可能给堆栈 分配快速和高带宽的存储器。堆栈性能的提高对系统整 体性能的影响是非常明显的。 32 堆栈初始化代码示例 MRS R0, CPSR ; CPSR -> R0 BIC R0, R0, #MODEMASK ; 安全起见,屏蔽模式位以外的其它位 ORR R1, R0, #IRQMODE ; 把设置模式位设置成需要的模式( IRQ ) MSR CPSR_cxsf, R1 ; 转到 IRQ 模式 LDR SP, =UndefStack ; 设置 SP_irq ORR R1,R0,#FIQMODE MSR CPSR_cxsf, R1 ; FIQMode LDR SP, =FIQStack ORR R1, R0, #SVCMODE MSR CPSR_cxsf, R1 ; SVCMode LDR SP, =SVCStack 33 初始化 C 环境 ? 在目标文件中,代码、数据放在不同的段中。源文件编 译链接生成含 .data 、 .text 段的目标文件,且链接器生 成的 .data 段是以系统 RAM 为参考地址 ? 故在系统启动时需要拷贝 ROM 或 FLASH 中的 .data 段到 RAM ,以完成对 RAM 的初始化。在初始化期间应将系 统需要读写的数据和变量从 ROM 拷贝到 RAM 里运行 34 了解连接器的功能 ? 将许多放在不同文件中的目标码,连接成一个可执行文 件; ? 计算及分配位于不同节区( Session) 的程序或数据。一 个程序可分为程序段( Read-Only,RO) 、数据段( Read-Write,RW) 、零初始化段( Zero-Initialized,ZI) ; ? 编译器仅将程序转成机器码,不会处理与内存地址有关 的部分,这部分工作由连接器完成; ? 连接器可以产生除二进制外的其它文件的格式。 连接器主要用于处理内存分配问题 35 链接器产生的符号表 ? 符号由链接器自动产生,只读段( read-only RO )就是 代码段,读写段( read-write RW )是已经初始化的全 局变量,而零初始化段( zero-initialized section ZI ) 中存放未初始化的全局变量; 36 初始化应用程序执行环境 ? 映像一开始总是存储在 ROM/Flash 里面的,其 RO 部分既 可以在 ROM/Flash 里面执行,也可以转移到速度更快的 RAM 中去;而 RW 和 ZI 这两部分必须是需要转移到可写 的 RAM 里去的。 ? 所谓应用程序执行环境的初始化,就是完成必要的从 ROM 到 RAM 的数据传输和内容清零。 37 初始化 C 环境( 3 ) 38 改变处理器模式 ? 除用户模式以外,其他 6 种模式都是特权模式。因为在 初始化过程中许多操作需要在特权模式下才能进行(比 如 CPSR 的修改),所以要特别注意不能过早地进入用 户模式。一般地,在初始化过程中会经历以下一些模式 变化: 39 七、呼叫 C 程序 ? 对 main 函数的调用进入 uc/OS 的入口,通过这个入口就 进入 uC/OS 的主函数,启动对 uC/OS

文档评论(0)

jinzhuang + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档