uCOSII嵌入式操作系统介绍与移植.pptVIP

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uCOSII嵌入式操作系统介绍与移植.ppt

课 件 uCOS-II嵌入式操作系统介绍与移植 目录 1、uC/OS-II简介 2、uC/OS-II的移植 3、OS_CPU.H的移植 4、OS_CPU.c的移植 5、OS_CPU_A.S的移植 6、多任务应用程序的编写 uC/OS-II简介 1、uC/OS-II是一个简单、高效的嵌入式实时操作系统内核 2、支持 x86、ARM、PowerPC、MIPS 等众多体系结构 3、可从网站上获得全部源码及其在各种体系结构平台上的移植范例。 uC/OS-II特点 1、uC/OS-II内核具有可抢占的实时多任务调度功能 2、提供了许多系统服务,如信号量、消息队列、邮箱、内存管理、时间函数等 3、这些功能可以根据不同的需求进行裁减。 uC/OS-II的移植 1、汇编语言、C语言代码需要移植 2、移植工作集中在多任务切换的实现上 3、在ARM处理器上的移植,需要完成的工作包括:修改三个和体系结构相关的文件,代码量大约是500行。这三个文件是OS_CPU_C.c、OS_CPU_C.H以及OS_CPU_A.S OS_CPU.H的移植 1、数据类型定义 2、ARM处理器相关宏定义 3、堆栈增长方向 数据类型定义 1、INT8U - unsigned char 2、INT8S - signed char 3、INT16U - unsigned short 4、INT16S - signed short 5、INT32U - unsigned int 6、INT32S - signed int ARM处理器相关宏定义 1、退出临界区 #define OS_ENTER_CRITICAL() ARMDisableInt() 2、进入临界区 #define OS_EXIT_CRITICAL() ARMEnableInt() 堆栈增长方向 1、堆栈由高地址向低地址增长,这个也是和编译器有关的,当进行函数调用时,入口参数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向。 #define OS_STK_GROWTH 1 OS_CPU.c的移植 1、任务堆栈初始化 2、系统hook函数 3、中断级任务切换函数 任务堆栈初始化OSTaskStkInit 1、由OSTaskCreate或OSTaskCreateExt调用 2、用来初始化任务的堆栈并返回新的堆栈指针stk。初始状态的堆栈模拟发生一次中断后的堆栈结构。 3、在ARM体系结构下,任务堆栈空间由高至低依次将保存着pc、lr、r12、r11、r10、… r1、r0、CPSR、SPSR 4、堆栈初始化结束后,OSTaskStkInit返回新的栈顶指针,OSTaskCreate或 OSTaskCreateExt将指针保存在任务的OS_TCB中。 系统hook函数 1、任务创建钩子OSSTaskCreateHook 2、任务删除钩子OSTaskDelHook 3、任务切换钩子OSTaskSwHook 4、任务统计钩子OSTaskStatHook 5、时钟节拍处理钩子OSTimeTickHook 中断级任务切换函数OSIntCtxSw 1、该函数由OSIntExit()和OSExIntExit()调用 2、在时钟中断ISR(中断服务例程)中发现有高优先级任务等待的时钟信号到来,则需要在中断退出后并不返回被中断任务,而是直接调度就绪的高优先级任务执行。 3、该函数通过设置一个全局变量need_to_swap_context标志以表示在中断服务程序中进行任务切换,然后在OSTickISR()中判断该变量以进行正确的动作。 OS_CPU_A.S的移植 1、时钟节拍中断服务函数 2、退出临界区和进入临界区函数 3、任务级上下文切换函数 4、OSStartHighRd 时钟节拍中断服务函数OSTickISR 1、时钟节拍是特定的周期性中断 2、时钟节拍率越快,系统的额外开销就越大。越慢则系统响应速度越慢 3、本系统使用定时器0作为时钟节拍源,产生间隔10mS的时钟节拍 4、OSTickISR()就是时钟节拍中断服务函数,也就是定时器0的中断处理函数 OSTickISR函数 1、首先在被中断任务堆栈中保存CPU寄存器的值,然后调用OSIntEnter() 2、调用OSTimeTick(),检查所有处于延时等待状态的任务,判断是否有延时结束就绪的任务。 3、最后调用OSIntExit(),如果在中断中(或其他嵌套的中断)有更高优先级的任务就绪,并且当前中断为中断嵌套的最后一层。OSIntExit()将进行任务调度。如果当前中断不是中断嵌套的最后一层,或中断中没有改变任务的就绪状

文档评论(0)

xingkongwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档