电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

uCOS中断处理过程详解VIP专享VIP免费

uCOS中断处理过程详解_第1页
uCOS中断处理过程详解_第2页
uCOS中断处理过程详解_第3页
再看3 处代码: 在uCOS_II.H 中有如下定义: OS_EXT OS_TCB *OSTCBPrioTbl[OS_LOWEST_PRIO + 1];//定义指向任务控制块的指针数//组,且每个优先级在同一时刻只对应一个任务 OS_EXT INT8U OSPrioCur;//用于保存目前任务的优先级 OS_EXT INT32U OSCtxSwCtr;//32 位无符号全局整型变量,作为任务切换计数器 OS_EXT OS_TCB *OSTCBHighRdy;//指向最高优先级任务任务控制块的指针 if (OSPrioHighRdy != OSPrioCur) //就绪态任务中的最高优先级已不是目前任务的优先级,则进行中断级的任务//切换 { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; //将最高优先级任务控制块指针指向当前优先级最高的任务的任务控制块 OSCtxSwCtr++;//任务切换计数器加 1 OSIntCtxSw();//调用中断级任务切换函数 } 此段代码体现出了可剥夺型实时操作系统内核的特点. OSIntCtxSw()在80x86 上的移植代码,此代码在OS_CPU_A.ASM 中,代码如下: _OSIntCtxSw PROC FAR ; CALL FAR PTR _OSTaskSwHook ; 调用 OSTaskSwHook()函数,此函数在 ;OS_CPU_C.C 中只是个空函数,留给用户 ;在代码移植时自定义 ; MOV AX, SEG _OSTCBCur ;由于发生了段转移,恢复刚才(当前任务)数 MOV DS, AX; 据段 ; MOV AX, WORD PTR DS:_OSTCBHighRdy+2 ;AH=_OSTCBHighRdy+3 ;AL=_OSTCBHighRdy+2 MOV DX, WORD PTR DS:_OSTCBHighRdy ;DH=_OSTCBHighRdy+1 ;DL=_OSTCBHighRdy MOV WORD PTR DS:_OSTCBCur+2, AX ;_OSTCBCur+3=AH ;_OSTCBCur+2=AL MOV WORD PTR DS:_OSTCBCur, DX ;_OSTCBCur+1=DH ;_OSTCBCur=DL ;OSTCBCur=OSTCBHighRdy MOV AL, BYTE PTR DS:_OSPrioHighRdy ; MOV BYTE PTR DS:_OSPrioCur, AL;OSPrioCur= OSPrioHighRdy ; LES BX, DWORD PTR DS:_OSTCBHighRdy ;取址指令 MOV SS, ES:[BX+2] ; MOV SP, ES:[BX] ; ;SS:SP=OSTCBHighRdy->OSTCBStkPtr POP DS ;DS 出栈 POP ES ;ES 出栈 POPA ;CPU 其余寄存器出栈 ; IRET ; 中断返回 ; _OSIntCtxSw ENDP 以上汇编代码在移植时根据处理器不同要作修改 四.在ISR 中通知任务做事的理解(以OSSemPost()为例) 在理解OSSemPost(),先要理解事件,如下是事件的数据结构: typedef struct { INT8U OSEventType;//事件类型,这里是OS_EVENT_TYPE_SEM 即信号量 INT8U OSEventGrp; //等待任务所在的组 IN...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

小辰2+ 关注
实名认证
内容提供者

出售各种资料和文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部