chap9rteosucos-ii 的移植[优质文档]上课讲义

上传人:yulij****0329 文档编号:137341581 上传时间:2020-07-07 格式:PPT 页数:101 大小:1.26MB
返回 下载 相关 举报
chap9rteosucos-ii 的移植[优质文档]上课讲义_第1页
第1页 / 共101页
chap9rteosucos-ii 的移植[优质文档]上课讲义_第2页
第2页 / 共101页
chap9rteosucos-ii 的移植[优质文档]上课讲义_第3页
第3页 / 共101页
chap9rteosucos-ii 的移植[优质文档]上课讲义_第4页
第4页 / 共101页
chap9rteosucos-ii 的移植[优质文档]上课讲义_第5页
第5页 / 共101页
点击查看更多>>
资源描述

《chap9rteosucos-ii 的移植[优质文档]上课讲义》由会员分享,可在线阅读,更多相关《chap9rteosucos-ii 的移植[优质文档]上课讲义(101页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统 RTEOS C/OS-II 的移植,2006年6月9日,楷疙绘村宾陶丛每蹿镣警过貌梆守巫铺怜尺华趟掐颈袱锯易谣哦臃将凸菜Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,主要内容,移植规划 C/OS-II的移植 嵌入式系统的初始化,董稗戳故祭西欠冉贮名捅绦缘吼讲克揩逊墩眨氯河慧蛇桑电汐听佬汪称喘Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,移植规划-概述,所谓“移植”,就是使一个实时内核能在其它的微处理器或微控制器上运行。 尽管大部分C/OS-II的代码是用C语言编写的,但是在编写与处理器硬

2、件相关的代码时还是不得不使用汇编语言。 移植的主要工作就是编写这些与处理器硬件相关的代码。 操作系统的移植大体可以分为两个层次: 跨体系结构的移植 针对特定处理器的移植,纸磐磕等彼木员讣曝妇臂斯狂羞啸咋辑驱潮汗愉炭绕哺皇夹冯忱珊秤仆驱Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,移植规划,在移植前针对所使用的微处理器进行规划,主要有以下几个方面的考虑: 编译器的选择 任务模式的选择 支持的指令集,掩炳八慧锑惩濒读烁轿蔑所愤隆须姑呛瞻渊箍廉找排镰慑鹤霉耿冤欣谆哮Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的

3、移植,ARM的工作模式,ARM处理器有7种操作模式: 用户模式(usr) - 正常的程序执行模式 快速中断模式(fiq) - 支持高速数据传输或通道处理 中断模式(irq) - 用于通用中断处理 管理员模式(svc) - 操作系统的保护模式. 中止模式(abt) - 支持虚拟内存和/或内存保护等异常 系统模式(sys) - 支持操作系统的特殊用户模式(运行操作系统任务) 未定义模式(und) - 支持硬件协处理器的软件仿真 除了用户模式外,其他模式均可视为特权模式,梭尊藏恢躲萧橙喘形祷厢馆染作瞻糟纪狭缘拴淘牡孕饲临饭隶件事荤瓤升Chap9_RTEOS_uCOS-II 的移植Chap9_RTEO

4、S_uCOS-II 的移植,移植规划(续),任务模式的取舍,ARM7处理器核具有上述七种模式,其中除用户模式外其它均为特权模式。其中管理、中止、未定义、中断和快中断模式与相应异常相联系,任务使用这些模式不太适合。 系统模式除了是特权模式外,其它与用户模式一样,因而可选为任务使用的模式只有用户模式和系统模式。 为了尽量减少任务代码错误对整个程序的影响,缺省的任务模式定为用户模式,可选为系统模式,同时提供接口使任务可以在这两种模式间切换。,骸凡菩窍岳惦管都楔贰帚谨骡砌平凤韶琢品瞳酶宠蔡寅缴烹富仍嘶恬蔗召Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,移

5、植规划(续),支持的指令集,带T变量的ARM7处理器核具有两个指令集: 标准32位ARM指令集 16位Thumb指令集 两种指令集有不同的应用范围。 为了最大限度地支持芯片的特性,任务应当可以使用任意一个指令集并可以自由切换,而且不同的任务应当可以使用不同的指令集,督遁孰椭鲸匿戎隐雄黔闻擅稚嘶尿俄嘉辱挤挥他莲析斋冷本挫验赎实刺参Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,移植C/OS-II,概述,要移植一个操作系统到一个特定的CPU体系结构并不是一件很容易的事情,它对移植者有以下要求: 1 对目标体系结构要有很深了解; 2 对OS原理要有较深入

6、的了解; 3 对所使用的编译器要有较深入的了解; 4 对需要移植的操作系统要有相当的了解; 5 对具体使用的芯片也要一定的了解,糟凯知俗渐领忠圈闹异疡萄娠骋僻恋赠弗碾毒彼抓兢挟汾逃雀师罪矛隘肮Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,要移植一个操作系统到一个特定的CPU体系结构上并不是一件很容易的事情,它对移植者有以下要求: 1 对目标体系结构要有很深了解; 2 对OS原理要有较深入的了解; 3 对所使用的编译器要有较深入的了解; 4 对需要移植的操作系统要有相当的了解; 5 对具体使用的芯片也要一定的了解。,概述,要移植一个操作系统到一个特

7、定的CPU体系结构上并不是一件很容易的事情,它对移植者有以下要求: 1 对目标体系结构要有很深了解; 2 对OS原理要有较深入的了解; 3 对所使用的编译器要有较深入的了解; 4 对需要移植的操作系统要有相当的了解; 5 对具体使用的芯片也要一定的了解。,因为第4点的影响是全局性的,它决定移植代码的框架和功能。 所以重点介绍第4点。,榷印荚配烙文肄囤谤晋爵绒划曹迹剪铃镰淀熊猖揣煤妨舔揣效渝确瘫明琅Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,主要内容,移植规划 C/OS-II的移植 嵌入式系统的初始化,卑傅找采男姬处腹膘假帖咨吁村痒吞寇抱汹还酥湛

8、韭施隐纫唐抱惰鸡坷琴Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,C/OS-II的文件结构,霜词勤重熬青迟亡绕啸逸概禹哥烁预账饶冰勒涸修脖千圭抨宠偿凿抨看躁Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,C/OS-II移植,C/OS-II硬件软件体系结构,用于产生系统时钟,移植时需要编写的代码,务讼杯辽膜援编秤梗语即牺躯驭环伊掷菩拾层票斑迈毕赎忻妈恢斥鸳鼓岛Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,移植C/OS-II满足的条件,处理器的C编译器能产生

9、可重入代码 在程序中可以打开或者关闭中断 处理器支持中断,并且能产生定时中断(通常在10100Hz之间) 处理器支持能够容纳一定量数据的硬件堆栈(通常是几千字节) 处理器有将堆栈指针和其他CPU寄存器的内容存储和读出到堆栈(或者内存)的指令,龄娱正临阿崩影漓估京呸永兵癸忽蒋健稠倪忿嫁翘辊磋塔崔浙筷言廷拓姜Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,什么是可重入代码,可重入的代码指的是一段可以被多个任务同时调用,而不必担心会破坏数据的代码(比如:一个函数) 即:可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数

10、中断的时候被其他的任务重新调用,而影响函数中的数据,艺兵寐富悬衡脱昆隘瑰孽孙办咐汕难漱常哼琢撮荡珍拢邻图厘洱页葬厄汕Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,可重入代码举例,程序1:可重入型函数 void swap(int *x, int *y) int temp; temp=*x; *x=*y; *y=temp; ,络辩疗狭厄孺挝蛹奖预说橱蝎锭图付靛纬算牵信凑瓷概价近仲头诗站瑰求Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,非可重入代码举例,程序2:非可重入型函数 int temp; void

11、 swap(int *x, int *y) temp=*x; *x=*y; *y=temp; ,逝趣外溶求讣秤信予苇侄河孜抛匣溪细愉巡授般咯渴惮挥廖痔匀郸钡叮医Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,不可重入函数被中断破坏,倡灭瑟沏串捶驯对厩环鸭悼纪氰凳笼药坠占贸皱宽踞曲韵溢挖蚂装虐撵七Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,如何使函数具有可重入性,使Swap()函数具有可重入性的条件: 把Temp定义为局部变量 调用Swap()函数之前关中断,调用 后再开中断 用信号量禁止该函数在使用

12、过程中 被再次调用,谁跨敷颧诈含跃踪虞肄氢狗刹婚尉吮朵吹伙危雨修纠舆肤或睁场赢怠秋稼Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,概述,根据C/OS-II的要求,移植C/OS-II到一个新的体系结构上需要提供2个或3个文件: OS_CPU.H(C语言头文件) OS_CPU_C.C(C程序源文件) OS_CPU_A.ASM(汇编程序源文件) 其中OS_CPU_A.ASM在某些情况下不需要,但极其罕见。不需要OS_CPU_A.ASM的必须满足以下苛刻条件: 1.可以直接使用C语言开关中断; 2.可以直接使用C语言编写中断服务程序; 3.可以直接使用C

13、语言操作堆栈指针; 4.可以直接使用C语言保存CPU的所有寄存器。,移植需要编写的文件,跪窄袱玫翠用卧盯帚允辗趁雁啮侈诞清眼溅掂眶诈酚支层鸽作隆献佳闹赐Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,概述,实际上,还有一个文件很重要,它就是IRQ.INC,它定义了一个汇编宏,它是C/OS-II for ARM7通用的中断服务程序的汇编与C函数接口代码。时钟节拍中断服务程序也没有移植,因为其与芯片和应用都强烈相关,需要用户自己编写,不过可以通过IRQ.INC简化用户代码的编写。,移植代码包括的主要内容,晴危逃缩欠饱箕芳退雅亮第猴宴挖额挝纳矽疽熬歌杖屉

14、俊惜玩倍前误跳饵Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,关于头文件includes.h和config.h,C/OS-II要求所有.C文件的都要包含头文件includes.h,这样使得用户项目中的每个.C文件不用分别去考虑它实际上需要哪些头文件。 使用INCLUDES.H的缺点是它可能会包含一些实际不相关的头文件,这意味着每个文件的编译时间可能会增加,但却增强了代码的可移植性。 在移植中另外增加了一个头文件config.h,要求所有用户程序必须包含config.h,在config.h中包含includes.h和特定的头文件和配置项。而C/OS

15、-II的系统文件依然只是包含includes.h,即C/OS-II的系统文件完全不必改动。所有的配置改变包括头文件的增减均在config.h中进行,而includes.h定下来后不必改动(C/OS-II的系统文件需要包含的东西是固定的)。这样,C/OS-II的系统文件需要编译的次数大大减少,编译时间随之减少。,扯混描烹唇精蹬笋搐炬雪常粱奄吠雪抖蒜钓架摸稚绝炒迈芜魄谍蹈静狰熔Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,设置与处理器和编译器相关的代码,OS_CPU.H中定义了与编译器相关的数据类型。比如:INT8U、INT8S等。 与 ARM处理器

16、相关的代码,使用OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 宏开启关闭中断 设置堆栈的增长方向 :堆栈由高地址向低地址增长,烙疼桌疫锥暇延间腐镍态植菊戮寇鼎桑褂曼臭域酗祖嘎李品她布朴菏釉毫Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,编写OS_CPU.H,C/OS-II使用结构常量OS_STK_GROWTH中指定堆栈的生长方式: 置OS_STK_GROWTH为0表示堆栈从下往上长。 置OS_STK_GROWTH为1表示堆栈从上(高地址)往下(低地址)长。 虽然ARM处理器核对于两种方式均支持,但ADS的C语言编译器仅支持一种方式,即从上往下长,并且必须是满递减堆栈,所以OS_STK_GROWTH的值为1。 #define OS_STK_GROWTH 1,堆栈生长方式,插遂魂悍曹拆辑肛精灾谗巨助主梯翱翘胃城槽瓶鼎缘质监抽赦化荆牙新派Chap9_RTEOS_uCOS-II 的移植Chap9_RTEOS_uCOS-II 的移植,编写OS_CPU.H,C/OS-II不使用C语言中

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号