垫层厚度不够:任务挂起和中断
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 11:55:09
挂起: 所谓挂起一个任务,就是暂停这个任务运行,它仍然占用一定的内存空间,有可能对CPU也在占用着.示意如图
任务切换宏OS_TASK_SW()任务切换的工作主要是靠OSCtxSw()来完成的。它需要做7项工作:(1) 把被终止任务的断点指针保存到任务堆栈中;(2) 把CPU通用寄存器的内容保存到任务堆栈中;(3) 把被终止任务的任务堆栈指针当前值保存到该任务的任务控制块的OSTCBStkPt中(4) 获得待运行任务的任务控制块;(5) 使CPU通过任务控制获得待运行任务的堆栈指针;(6) 把待运行任务堆栈中通用寄存器的内容恢复到CPU的通用寄存器中;(7) 使CPU获得待运行任务的断点指针。示意代码:viod OSCtxSw(void){用压栈指令把CPU通用寄存器R1,R2..压入堆栈;OSTCBCur->OSTCBStkPtr = SP; //在中止任务控制块中保存SPOSTCBCur = OSTCBHighRdy; //任务控制块的切换OSPrioCur = OSPrioHighRdy;SP = OSTCBCur->OSTCBStkPtr;用出栈指令把R1,R2..弹入CPU的通用寄存器;IRET; //中断返回,使PC指向待运行的任务}当然OSSemPend()等待信号量等一系列函数也使任务进入等待状态,但是任务挂起函数OSTaskSuspend()可以挂起当前任务,也可以挂起其他任务;而等待信号量OSSemPend()只能挂起当前任务,而且可以多个任务等待同一个信号量,实现任务的同步;OSSemPend()主要是判断待要挂起的任务是否调用这个函数任务本身。(1) 如果是任务本身是,则必须删除就绪表中的就绪标志,并在任务控制成员OSTCBStat中做挂起记录,然后引发一次任务调度,以使CPU去运行就绪的其他任务;(2) 如果不是本身,那么只要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStat中做挂起标志。任务中断 : 系统接收到中断请求后,如果这是CPU处于中断允许状态(即中断是开放的),系统就会终止正在运行的当前任务,而按照中断向量(中断服务子程序的入口地址)的指向转而去运行中断服务子程序(ISR);当子程序运行完毕后,系统会根据情况返回到被中止的任务继续运行,或者转而运行一个更高优先级的就绪任务。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chengocean/archive/2010/12/28/6103421.aspx
任务切换宏OS_TASK_SW()任务切换的工作主要是靠OSCtxSw()来完成的。它需要做7项工作:(1) 把被终止任务的断点指针保存到任务堆栈中;(2) 把CPU通用寄存器的内容保存到任务堆栈中;(3) 把被终止任务的任务堆栈指针当前值保存到该任务的任务控制块的OSTCBStkPt中(4) 获得待运行任务的任务控制块;(5) 使CPU通过任务控制获得待运行任务的堆栈指针;(6) 把待运行任务堆栈中通用寄存器的内容恢复到CPU的通用寄存器中;(7) 使CPU获得待运行任务的断点指针。示意代码:viod OSCtxSw(void){用压栈指令把CPU通用寄存器R1,R2..压入堆栈;OSTCBCur->OSTCBStkPtr = SP; //在中止任务控制块中保存SPOSTCBCur = OSTCBHighRdy; //任务控制块的切换OSPrioCur = OSPrioHighRdy;SP = OSTCBCur->OSTCBStkPtr;用出栈指令把R1,R2..弹入CPU的通用寄存器;IRET; //中断返回,使PC指向待运行的任务}当然OSSemPend()等待信号量等一系列函数也使任务进入等待状态,但是任务挂起函数OSTaskSuspend()可以挂起当前任务,也可以挂起其他任务;而等待信号量OSSemPend()只能挂起当前任务,而且可以多个任务等待同一个信号量,实现任务的同步;OSSemPend()主要是判断待要挂起的任务是否调用这个函数任务本身。(1) 如果是任务本身是,则必须删除就绪表中的就绪标志,并在任务控制成员OSTCBStat中做挂起记录,然后引发一次任务调度,以使CPU去运行就绪的其他任务;(2) 如果不是本身,那么只要删除任务就绪表中被挂起任务的就绪标志,并在任务控制块成员OSTCBStat中做挂起标志。任务中断 : 系统接收到中断请求后,如果这是CPU处于中断允许状态(即中断是开放的),系统就会终止正在运行的当前任务,而按照中断向量(中断服务子程序的入口地址)的指向转而去运行中断服务子程序(ISR);当子程序运行完毕后,系统会根据情况返回到被中止的任务继续运行,或者转而运行一个更高优先级的就绪任务。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chengocean/archive/2010/12/28/6103421.aspx
如何理解挂起和中断
什么是挂起???什么是中断???
请问什么是中断挂起 ?
进程和任务总是自动中断
“用信号量使任务和中断服务同步”是什么同步?这种同步又是什么?
关于VXWORKS操作系统tNetTask任务挂起的问题
“始终挂起”和“允许运行屏幕保护程序”是什么意思?
中止和中断的区别?
鼠标和键盘信号中断??
电脑和路由器连接中断
如何区分串行通信中发送中断和接受中断
请解释一下中断杂交和中断杂交作图
梦幻西游 做剧情任务时可否中断
梦幻西游 做剧情任务时可否中断?
如何恢复迅雷5下载中断后的任务呢?
什么是挂起?
为什么和别人QQ视频中断?
服务器中断的原因和解决方法?????紧急!!!!!!!!!
为什么大话西游和劲舞团玩着玩着就会网络中断
试述程序中断与简单中断的相同点和不同点.
请问大哥们:中断号和中断请求号有什么区别吗?
用蚂蚁怎样在另一台机器上,继续下中断的任务
急!卡巴斯基互联网安全套装6.0扫描任务被中断的问题
用PartitionMagic增加D盘容量,在“挂起的任务”栏里D盘的盘符前会出现*号,然后操作失败,这是为什么?