- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.1 移植的基本方法 10.1.1 移植的概念与一般要求 这里所谓的移植就是使一个实时内核能在另一种微处理器或者微控制器上运行。 为了方便移植,μC/OS-Ⅱ在设计时就充分考虑了可移植性,大部分代码都是用ANSI C语言编写的,考虑到绝大多数微处理器在读写寄存器时只能用汇编语言来实现,所以仍然需要用汇编语言来编写一些与处理器相关的代码。 10.1.1.1 移植对微处理器的要求 要使μC/OS-Ⅱ能够正常运行,处理器和编译器必须满足以下五项原则: 处理器的C编译器能产生可重入代码; 用C语言就可以实现开关中断; 处理器至少能支持定时中断,中断频率一般在10至100Hz之间; 处理器能够支持硬件堆栈,容量可达几千字节; 处理器有堆栈指针和读写CPU其它寄存器、堆栈内容或内存的指令。 10.1.1.2 对移植开发工具的要求 移植μC/OS-Ⅱ,需要一个针对用户用的CPU的C编译器,它必须满足如下要求: C编译器必须支持汇编语言程序; C编译器必须能支持可重入代码,因为μC/OS-Ⅱ是一个可剥夺型内核; C编译器必须包括汇编器、连接器和定位器。 连接器用来将经编译和汇编后产生的不同的模块连接成目标文件。 定位器用于将代码和数据放置在目标处理器的指定内存映射空间中。 C编译器必须支持从C中打开和关闭中断; C编译器最好支持用户在C语言程序中嵌入汇编语言,这有利于用汇编语言来直接开关中断。 10.1.1.3 移植的主要工作 μC/OS-Ⅱ的移植非常简单,但前提是: 必须理解处理器和C编译器的技术细节 拥有和掌握必要的工具 处理器和编译器满足μC/OS-Ⅱ的上述五项原则。 根据如图10.1所示的μC/OS-Ⅱ软硬件体系结构,移植工作主要是改写与处理器有关的内核代码以及与编译器数据类型有关的文件,详细内容如表10.1所示。 10.1.1.3 移植的主要工作 移植所要进行的工作可以简单地归纳为如下几条: 声明11个数据类型(OS_CPU.H); 用#define声明4个宏(OS_CPU.H); 用C语言编写10个简单的函数(OS_CPU_C.C); 编写4个汇编语言函数(OS_CPU_A.ASM)。 事实上,移植工作很简单,根据处理器的不同,一个移植实例可能需要编写或改写50至300行的代码,需要的时间从几个小时到一星期不等。移植完毕后还要进行测试。 10.1.1.4 INCLUDES.H文件说明 INCLUDES.H是一个主头文件,它包括了所有的头文件,这样做的好处是使得在应用中无需考虑每个.C文件到底需要哪些头文件。唯一的缺点是它可能会包含一些不相关的头文件,因此可能增加每个文件的编译时间。但这样做的最大优点是提高了代码的可移植性。一般地,该文件应该包含在所有.C文件的第一行,即:# include includes.h。 10.1.2 OS_CPU.H代码的移植 OS_CPU.H头文件中包含了与编译器有关的数据类型和与处理器有关的代码,其代码如程序清单10.1所示。 10.1.3 OS_CPU_C.C代码的移植 如表10.1所示,在OS_CPU_C.C文件中有10个函数要求用户进行修改,但是其中唯一必要的是OSTaskStkInit()函数,其余9个都是用于扩展的用户接口函数,μC/OS-Ⅱ要求必须声明,但未必包含任何代码。 10.1.3.1 OSTaskStkInit()函数 OSTaskStkInit()函数为OSTaskCreate()和OSTaskCreateExt()函数所调用,用于任务栈的初始化,初始化后的任务栈看起来像刚刚发生过一次中断并将所有的寄存器都保存进了堆栈的情形一样。如图10.2所示,它主要完成四项任务:(1)仿真带参数pdata的函数调用;(2)接着保存任务代码的首地址指针,当调用OSStart()函数启动时,为第一次运行提供任务代码的首地址指针,应用任务的代码便从这里开始执行;(3)初始化任务栈结构,保存CPU寄存器内容,尽管这些寄存器内容可能在第一次运行时没有起什么作用,但仍然要设计成完整的结构,以便于计算代码的指针;(4)返回栈顶指针给调用者,调用者又将这个指针传递给任务控制块,并且放在任务控制块数据结构的最前面,这样就可以用汇编语言来方便地进行读写。 void *OSTaskStkInit (void (*task)(void *pd), void *pdata, void *ptos, INT16U opt) 10.1.3.2 其它函数 10.1.4 OS_CPU_A.ASM代码的移植 μC/OS-Ⅱ的移植要求用户编写如下四个简单的汇编语言函数: OSStartHighRdy(),最高优先级就绪任务启动函数; OSCtxSw(),任务
您可能关注的文档
- 《七年级下册仁爱英语多媒体教学课件》Unit 8 Topic 2 Section D.ppt
- 《七年级下册仁爱英语多媒体教学课件》Unit 8 Topic 3 Section A.ppt
- 《七年级下册仁爱英语多媒体教学课件》Unit 8 Topic 3 Section B.ppt
- 《七年级下册仁爱英语多媒体教学课件》Unit 8 Topic 3 Section C.ppt
- 《七年级下册仁爱英语多媒体教学课件》Unit 8 Topic 3 Section D.ppt
- 《嵌入式操作系统》第1章 嵌入式系统导论.ppt
- 《嵌入式操作系统》第1章-范例.doc
- 《嵌入式操作系统》第2章 嵌入式操作系统中的基本概念.ppt
- 《嵌入式操作系统》第2章-实时系统概念.doc
- 《嵌入式操作系统》第3章-内核结构.doc
文档评论(0)