ucos-ii在80x86上的移植.pptVIP

  • 111
  • 0
  • 约1.91万字
  • 约 71页
  • 2018-02-26 发布于江苏
  • 举报
ucos-ii在80x86上的移植

uC/OS-II在80x86上的移植 操作系统移植概述 所谓操作系统的移植,是指一个操作系统能够在某个微处理器平台上运行。 操作系统μC/OS-II是一个基于优先级的抢占式实时多任务内核。μC/OS-II的大部分代码是用ANSI C语言编写的,也包含一小部分汇编语言代码,使之可以提供给不同架构的微处理器使用。至今,从8位到64位,μC/OS-II已经在多种不同架构的微处理器上移植成功。 Phase 1 移植前的规划 ?COS-II移植的条件 处理器的C编译器能产生可重入代码; 在程序中可以打开/关闭中断; 处理器支持中断,并且能产生定时中断(通常为10-100Hz); 处理器能支持一定数量的数据存储硬件堆栈; 处理器有将堆栈指针以及其它CPU寄存器的内容读出、并存储到堆栈或内存中去的指令。 针对上述移植条件,基于ARM7TDMI Core的S3C44B0X处理器满足其中的硬件要求。 可重入函数 可重入函数可以被一个以上的任务调用,而不必担心数据的破坏。可重入函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。 示意代码分析---可重入型函数清单 可重入函数 示意代码分析---不可重入型函数清单 可重入函数 示意代码分析---不可重入型函数清单 不可重入函数 使用以下技术之一即可使Swap()函数具有可重入性: 把Temp定义为局部变量; 调用Swap()函数之前关中断,调动后再开中断; 用信号量禁止该函数在使用过程中被再次调用。 Phase 1 移植前的规划 移植对编译器的要求及选择 移植μC/OS-Ⅱ需要一个C编译器,并且是针对用户用的CPU的。因为μC/OS-Ⅱ是一个可剥夺型内核,用户只有通过C编译器来产生可重入代码;C编译器还要支持汇编语言程序。绝大部分的C编译器都是为嵌入式系统设计的,它包括汇编器、连接器和定位器。连接器用来将不同的模块(编译过和汇编过的文件)连接成目标文件。定位器则允许用户将代码和数据放置在目标处理器的指定内存映射空间中。所用的C编译器还必须提供一个机制来从C中打开和关闭中断。一些编译器允许用户在C源代码中插入汇编语言。这就使得插入合适的处理器指令来允许和禁止中断变得非常容易了。还有一些编译器实际上包括了语言扩展功能,可以直接从C中允许和禁止中断 本移植采用Borland C++ V3.1集成开发环境进行程序的编译和调试。 Phase 1 移植前的规划 80x86处理器工作模式 我们所介绍的移植和代码都是针对80x86的实模式的,且编译器在大模式下编译和连接。 实模式:寻址采用和8086相同的16位段和偏移量,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的80x86CPU用做高速的8086。 大模式:在大模式下,应用程序和数据最大寻址空间为1Mb,程序指针为32位。 Phase 1 移植前的规划 μC/OS-II软/硬件体系结构 移植需要修改的文件 因为μCOS-II在设计的时候就已经充分考虑了可移植性,所以,μCOS-II的移植还是相对简单的。根据上图μC/OS-Ⅱ体系结构特点,在μC/OS-Ⅱ移植过程中涉及到移植的代码都包含在三个文件中: μC/OS-II移植文件提要 OS_CPU.H---ARM编译器支持的数据类型 μC/OS-II中不直接使用C语言中的short、int、long等数据类型定义,因为它们与处理器类型有关,隐含着不可移植性。针对不同处理器,编译器需要使用不同的字节长度来表示同一数据类型。Borland C++ V3.1编译器支持的数据类型及其对齐方式如下表所示: OS_CPU.H---ARM编译器支持的数据类型 μC/OS-II中不直接使用C语言中的short、int、long等数据类型定义,因为它们与处理器类型有关,隐含着不可移植性。针对不同处理器,编译器需要使用不同的字节长度来表示同一数据类型。ARM编译器支持的数据类型及其对齐方式如下表所示: OS_CPU.H---根据处理器设置数据类型 选择ADS1.2的armcc.exe编译器,需要定义如下数据类型: OS_CPU.H---临界段宏 μC/OS-II使用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()实现临界段代码的保护。μC/OS-II需要先禁止中断再访问临界段的代码,并且在访问完毕后重新允许中断。基于80x86处理器,可以通过对SW(FLAGS)的读写来禁止和使能中断,SW寄存器的格式下: OS_CPU.H---临界段宏的实现方法 μC/OS-II支持3种不同的方式实现宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),由OS_CRITICAL_METHOD常量指出。我们使用第2种方式。

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档