|
楼主 |
发表于 2011-11-3 19:00:44
|
显示全部楼层
回复【2楼】yinqiu009
建议楼主反复看看书,理解下任务,调度,切换,中断,入栈,出栈,时基,慢慢就明白为什么要有osintexit,为什么会os_enter_critical。。。。。。。。。。。。。
-----------------------------------------------------------------------
多谢大侠指导!!!
“如果中断把B任务就绪”这个不对,任务就绪是在OSIntExit里面实现的,用户中断处理函数里只是申请要执行B任务。
-----------------------------------------------------------------------------------------------------------
中断函数的OSIntExit是使就绪任务转变为运行态任务。(这过程是叫申请要执行B任务?)只要一退出中断就运行B任务了。
“这时是不是要切换到B任务去运行。。。。。。”,这后面都不对了。是OSIntExit.OSIntCtxSw执行了之后,把中断入栈保存的A任务的信息另存一份备份,把B任务的信息填到栈里面,然后一退出中断时候,会出栈恢复中断前的现场,这个时候才是运行了B任务。
-----------------------------------------------------------------------------------------------------------
A任务的信息另存一份?是保存在哪呢?是存到A的任务控制块吗?
OSIntCtxSw
LDR R0, =NVIC_INT_CTRL
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
BX LR
这个函数是保存A任务的信息,然后把B任务的信息填到栈里面吗? |
|