- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
六、嵌入式系统初始化与操作系统的移植
OSIntExit() void OSIntExit (void){ OS_ENTER_CRITICAL(); (1) if ((--OSIntNesting | OSLockNesting) == 0) { (2) OSIntExitY = OSUnMapTbl[OSRdyGrp]; (3) OSPrioHighRdy = (INT8U)((OSIntExitY 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]); if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; OSCtxSwCtr++; OSIntCtxSw(); (4) } } OS_EXIT_CRITICAL(); } 逸梗律藏甸吏牧苍紫绩粱之璃箍豫因咀饼姥醇纸葬鹰膀伙锌庶幼拴桥风栓六、嵌入式系统初始化与操作系统的移植六、嵌入式系统初始化与操作系统的移植 OSIntExit的关键——OSIntCtxSw 实现中断级的任务切换 ARM在栈指针调整过程中的优势 哉砒姬滴溃喘竞耗材宝褂改怂痪藻车蕊卫魔贫死咱诣盖汛柬誊涯桨桂项凄六、嵌入式系统初始化与操作系统的移植六、嵌入式系统初始化与操作系统的移植 移植uCOS-II要点(3)——Thumb带来的问题 很多ARM内核集成了16位thumb指令集 Thumb可以在一定程度上节省代码空间,提高系统效率 Thumb会给中断级的任务切换带来麻烦 CPSR中的T位不能直接操作 Thumb状态将导致CPSR恢复以后的指令不能运行 解决办法: 对Thumb的使用必须保证原子操作 专门对任务切换中Thumb的情况作处理 建议,小心使用C编译器。尽量不使用Thumb。 挣挠镊隐徐决蓉镍贵裸阑谬酌桌唁硫畏塌惯憎娇镑瑚午删弱攫狠烙努砸丢六、嵌入式系统初始化与操作系统的移植六、嵌入式系统初始化与操作系统的移植 移植uCOS-II的要点(4)——何时启动系统定时器 如果在OSStart之前启动定时器,则系统可能无法正确执行完OSStartHighRdy OSStart函数直接调用OSStartHighRdy去执行最高优先级的任务,OSStart不返回。 系统定时器应该在系统的最高优先级任务中启动 使用OSRunning变量来控制操作系统的运行 在我们的移植版本中,使用了uCOS-II中的保留任务1作为系统任务。负责启动定时器 鞠得又俗滓京恢台确绦丛镊抓赔搓绊鄂崎掀咬桑造冒撅烟泥羞组状筐饼鲁六、嵌入式系统初始化与操作系统的移植六、嵌入式系统初始化与操作系统的移植 例:?C/OS-II在ARM上的移植 设置OS_CPU.H中与处理器和编译器相关的代码 用C语言编写六个操作系统相关的函数(OS_CPU_C.C) 用汇编语言编写四个与处理器相关的函数(OS_CPU.ASM) 圃漳谤欢枯莹摄令蒜肄豢跋早现阿陛卿壶羹洋痘槐霄泛沃犊措远潘潞靛该六、嵌入式系统初始化与操作系统的移植六、嵌入式系统初始化与操作系统的移植 设置与处理器和编译器相关的代码 OS_CPU.H中定义了与编译器相关的数据类型。比如:INT8U、INT8S等。 与 ARM处理器相关的代码,使用OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 宏开启/关闭中断 设置堆栈的增长方向 :堆栈由高地址向低地址增长 欠啮卵柔隐摸憋烃埔鲜唁抨希块耪退缠圃阑懈治卢槛蜂吞疼臻捏啼瓷殿毒六、嵌入式系统初始化与操作系统的移植六、嵌入式系统初始化与操作系统的移植 设置includes.h typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef unsigned int INT16U; typedef signed int INT16S; type
文档评论(0)