嵌入式系统教案(7-ARM7操作系统).doc
《嵌入式系统教案(7-ARM7操作系统).doc》由会员分享,可在线阅读,更多相关《嵌入式系统教案(7-ARM7操作系统).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、教案课程题目 DSP及ARM技术专题题目 ARM技术第七讲移植C/OS-II到ARM7授课教员 王金洪授课单位 研究六室第七讲移植C/OS-II到ARM7一、教学目的、要求使学员掌握移植一个操作系统到不同架构的微处理器的一般方法。掌握以C/OS-II移植到ARM7为例所要修改的文件和注意事项。二、教学重点、难点重点:以C/OS-II移植到ARM7为例所要修改的文件和注意事项。难点:以C/OS-II移植到ARM7为例所要修改的文件和注意事项。三、课堂讲授设计采用PowerPoint课件讲授。四、讲授内容(一)C/OS-II C/OS-II是一个完整、可移植、可固化及可剪裁的占先式实时多任务内核。
2、C/OS-II用ANSI C语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。(二)移植规划 1、编译器的选择 针对ARM处理器核的C语言编译器有很多,如SDT、ADS、IAR、TASKING和GCC。GCC虽然支持广泛,很多开发套件使用它作为编译器,与ADS比较其编译效率较低,这对充分发挥芯片性能很不利,所以最终使用ADS编译程序和调试。2、任务模块的取舍ARM7处理器核具有用户、系统、管理、中止、未定义、中断和快中断7种模式,其中除用户模式外,其他均为特权模式。关于ARM7处理器核的详细情况由第3章可知,管理、中止、未定义、中断和快中断与相应异常相联系,任务使用这些模式不太
3、适合。而系统模式除了是特权模式外,其他与用户模式一样,因而可选的给任务使用的模式只有用户模式和系统模式。为了尽量减少任务代码错误对整个程序的影响,缺省的任务模式定为用户模式,可选为系统模式,同时提供接口使任务可以在这两种模式间切换。3、支持的指令集 带T变量的ARM7处理器核具有两个指令集:标准32位ARM指令集和16位Thumb指令集,两种指令集有不同的应用范围。为了最大限度地支持芯片特性,任务应当可以使用任意一个指令集并可以自由切换,而且不同的任务应当可以使用不同的指令集,这次移植的代码已经实现了这一点。(三)移植C/OS-II 1、移植C/OS-II简介(1)对移植者的要求l 对目标体系
4、结构要有很深的了解;l 对OS(操作系统)原理要有较深入的了解;l 对所使用的编译器要有较深入的了解;l 对需要移植的操作系统要有相当的了解;l 对具体使用的芯片也要有一定的了解。C/OS-II中要移植的部分见表7.1。(2)不需要OS_CPU_A.ASM的条件l 可以直接使用C语言开关中断;l 可以直接使用C语言编写中断服务程序;l 可以直接使用C语言操作堆栈指针;l 可以直接使用C语言保存CPU的所有寄存器。 同时支持以上4点的C语言编译器几乎不存在。(3)中断服务程序的处理 IRQ.inc文件中定义了一个汇编宏,是C/OS-II为ARM7通用的中断服务程序的汇编与C函数接口代码。时钟节拍
5、中断服务程序可以通过IRQ.S简化用户代码的编写。2、关于头文件includes.h和config.hC/OS-II要求所有.C文件都要包含头文件includes.h,这样使得用户项目中的每个.c文件不用分别去考虑它实际上需要哪些头文件。使用该文件的缺点是它可能会包含一些实际不相关的头文件,这意味着每个文件的编译时间可能会增加,但却增强了代码的可移植性。本移植中另外增加了一个头文件config.h,要求用户程序必须包含此文件,在config.h文件中包含includes.h和特定的头文件和配置项。而C/OS-II的系统文件依然只包含includes.h。所有的配置改变包括头文件的增减均在con
6、fig.h中进行。3、编写OS_COU.h(1)不依赖于编译器的数据类型程序清单7.1 不依赖于编译器的数据类型。(2)使用软中断SWI作底层接口见表7.2 软中断功能。见程序清单7.2 SWI服务函数。(3)OS_STK_GROWTHADS的C语言编译器仅支持从上往下长,并且必须是满递减堆栈,所以OS_STK_GROWTH的值为1。见程序清单7.3 定义堆栈增长方向。4、编写OS_CPU_C.c文件(1)OSTaskStkInit()在编写此函数之前,必须先确定任务的堆栈结构。而任务的堆栈结构是与CPU的体系结构、编译器有密切的关联。见图7.1 任务堆栈结构。见程序清单7.4 函数OSTas
7、kStkInit()代码。OsEnterSum用于保存关中断的次数。(2)软件中断异常SWI服务程序C语言部分程序清单7.5 软中断代码的C语言部分,其中参数SWI_Num为功能号,而Regs为指向堆栈中保存寄存器的值的位置。(3)OS_ENTER_CRITICAL()关中断和OS_EXIT_CRITICAL()开中断(4)OSStartHighRdyC/OS-II启动多任务环境的函数叫OSStart(),用户在调用OSStart()之前,必须已经建立了一个或更多任务。OSStart()最终调用函数OSStartHighRdy()运行多任务启动前优先级最高的任务。见程序清单7.6 OSStar
8、tHighRdy()代码。(5)移植增加的特定函数根据ARM核心的特点和移植的目标,为此增加了两个处理机模式转换函数(ChangeToSYSMode()、ChangeToUSRMode())和两个任务初始指令集设置函数(TaskIsARM()、TaskIsHUMB())。它们都是通过软件中断指令SWI转换到系统模式,通过软件中断服务程序实现的。处理器模式转换函数ChangeToSYSMode()和ChangeToUSRMode()使用软件中断功能0x80和0x81实现,其中函数ChangeToSYSMode()把当前任务转换到系统模式,函数ChangeToUSRMode()把当前任务转换到用户
9、模式,它们可以在任何情况下使用。它们改变程序状态保留寄存器SPSR的相应位段,而程序状态保留寄存器会在软件中断推出师傅知道程序状态寄存器CPSR,任务的处理器模式就改变了。任务可以使用ARM的两种指令集的任意一种运行,但是任务建立时默认的只是一种指令集。如果任务使用的第一条指令与默认的指令集不同,则程序运行错误。为了纠正这个错误,本移植增加两个函数TaskIsARM()和TaskIsHUMB()用于改变任务建立时默认的指令集。函数TaskIsARM()用于声明指定优先级的任务的第一条指令是ARM指令集中的指令,而函数TaskIsHUMB()用于声明指定优先级的任务的第一条指令是Thumb指令集
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 教案 ARM7 操作系统
限制150内