第10章嵌入式操作系统的移植.pptVIP

  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文档。上传文档
查看更多
第10章嵌入式操作系统的移植

操作系统移植的概念 所谓操作系统的移植,是指使一个实时操作系统能够在某个微处理器平台上运行。 ?C/OS-II的主要代码都是由标准的C语言写成的,移植方便。 移植的主要工作是修改部分与处理器硬件相关的代码。 例如, ?C/OS-II在读写处理器、寄存器时只能通过汇编语言实现。 移植的层次 操作系统的移植大体可以分为两个层次: 跨体系结构的移植 针对特定处理器的移植 移植?C/OS-II满足的条件 处理器的C编译器能产生可重入代码 在程序中可以打开或者关闭中断 处理器支持中断,并且能产生定时中断(通常在10~1000Hz之间) 处理器支持能够容纳一定量数据的硬件堆栈 处理器有将堆栈指针和其他CPU寄存器存储和读出到堆栈(或者内存)的指令 什么是可重入代码 可重入的代码指的是一段代码(比如:一个函数)可以被多个任务同时调用,而不必担心会破坏数据。 也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。 可重入代码举例 程序1:可重入型函数 void swap(int *x, int *y) { int temp; temp=*x; *x=*y; *y=temp; } 非可重入代码举例 程序2:非可重入型函数 int temp; void swap(int *x, int *y) { temp=*x; *x=*y; *y=temp; } 不可重入函数被中断破坏 如何使函数具有可重入性 使Swap()函数具有可重入性: 把Temp定义为局部变量; 调用Swap()函数之前关中断,调动后再开中断; 用信号量禁止该函数在使用过程中被再次调用; 打开/关闭中断 在?C/OS-II中,可以通过: OS_ENTER_CRITICAL() OS_EXIT_CRITICAL() 宏来控制系统关闭或者打开中断。这需要处理器的支持。 在ARM7TDMI的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。 处理器支持中断并且能产生定时中断 ?C/OS-II是通过处理器产生的定时器的中断来实现多任务之间的调度的。 ARM9的处理器上可以产生定时器中断。 处理器支持硬件堆栈 ?C/OS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的入栈和出栈是?COS-II多任务调度的基础。 ARM9处理器中有专门的指令处理堆栈,可以灵活的使用堆栈。 移植对开发工具的要求 移植?C/OS-II需要一个标准的C交叉编译器; 由于移植时需要对CPU的寄存器进行操作,所以需要C交叉编译器能够支持汇编语言程序; 嵌入式C编译器一般都包括汇编器、链接器和定位器。链接器是用来将不同的模块(编译或汇编过的文件)链接成目标文件;定位器则允许将代码和数据放置在目标处理器的指定内存空间中; 移植uC/OS-II要点(1) 开关中断的方式。推荐使用method3 { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif … OS_ENTER_CRITICAL(); … OS_EXIT_CRITICAL(); } 使用method3方式的开关中断 #define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF(); } #define OS_EXIT_CRITICAL() { if(cpu_sr == 0) INTS_ON(); } ARM的中断模式 设备的中断在ARM中被映射到了两个异常中 ——FIQ和IRQ 通过控制CPSR中的对应数据位,可以开启或者关闭中断 为了方便和统一uC/OS-II系统中断的处理,只使用了IRQ模式的中断。 移植uC/OS-II要点(2)——系统中断的处理 所有中断的调用都需要经过系统的接管。中断处理函数调用前后需要通知系统。例如: OSIntEnter(); yourInterruptFun(); OSIntExit(); OSIntExit的意义 ARM的工作模式 ARM处理器有7种操作模式: 用户模式(usr) - 正常的程序执行模式 快速中断模式(fiq) - 支持高速数据传输或通道处理 中断模式(irq) - 用于通用中断处理 管理员模式(svc) - 操作系统的保护模式. 中止模式(abt) - 支持虚拟内存和/或内存保护等异常 系统模式(sys) - 支持操作系统的特殊用户模式(

文档评论(0)

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

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

1亿VIP精品文档

相关文档