第六节 嵌入式操作系统.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六节 嵌入式操作系统

用户ISR的框架 OSIntExit的意义 #define OS_ENTER_CRITICAL() (cpu_sr = OSCPUSaveSR()) #define OS_EXIT_CRITICAL() (OSCPURestoreSR(cpu_sr)) OSCPUSaveSR MRS R0, CPSR ORR R1, R0, #0xC0 MSR CPSR_c, R1 MRS R1, CPSR AND R1, R1, #0xC0 CMP R1, #0xC0 BNE OSCPUSaveSR MOV PC, LR OSCPURestoreSR MSR CPSR_c, R0 MOV PC, LR 时钟节拍 时钟节拍ISR 时钟节拍函数 OSTimtick() 时间管理 OSTimeDLY() OSTimeDlyHMSM() OSTimeDlyResume() 系统时间 OSTimeGet():获得该计数器的当前值; INT32U OSTimeGet (void); OSTimeSet():设置该计数器的值。 void OSTimeSet (INT32U ticks); 何时启动系统定时器 OSStart函数直接调用OSStartHighRdy去执行最高优先级的任务,OSStart不返回。 系统定时器应该在系统的最高优先级任务中启动 使用OSRunning变量来控制操作系统的运行 * 第3章 μC/OS-Ⅱ的中断和时钟 μC/OS-II系统 响应中断的过程 μC/OS-II系统响应中断的过程为:系统接收到中断请求后,这时如果CPU处于中断允许状态(即中断是开放的),系统就会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续运行或者转向运行另一个具有更高优先级别的就绪任务。 注意!中断服务子程序运行结束之后,系统将会根据情况进行一次任务调度去运行优先级别最高的就绪任务,而并不是一定要接续运行被中断的任务的。 中断请求 关闭中断 转到中断向量 保存CPU寄存器 通知内核退出ISR ISR给任务发信号 中断返回 恢复CPU寄存器 中断响应 中断恢复 中断恢复 任务响应时间 任务响应时间 中断的响应过程 无新高级任务则返回原任务 通知内核退出ISR 恢复CPU寄存器 中断返回 有新高级任务则运行高级任务 通知内核进入ISR (1)保存全部CPU寄存器的值; (2)调用OSIntEnter(),或直接把全局变量OSIntNesting(中断嵌套层次)加1; (3)执行用户代码做中断服务; (4)调用OSIntExit(); (5)恢复所有CPU寄存器; (6)执行中断返回指令。 void OSIntEnter (void) { if (OSRunning == TRUE) { if (OSIntNesting 255) { OSIntNesting++; //中断嵌套层数计数器加一 } } } void OSIntExit (void) { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif if (OSRunning == TRUE) { OS_ENTER_CRITICAL( ); if (OSIntNesting 0) { OSIntNesting--; //中断嵌套层数计数器减一 } if ((OSIntNesting == 0) (OSLockNesting == 0)) { OSIntExitY = OSUnMapTbl[OSRdyGrp]; OSPrioHighRdy = (INT8U)((OSIntExitY 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]); if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; OSCtxSwCtr++; OSIntCtxSw( );

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档