ucos中的每一个任务都有其单独的任务堆栈区,如果发生任务和任务之前的切换,原来的任务的现场信息会全部保存到它的堆栈区中,以便下次运行它时知道它被切换前的运行状态。但是如果任务被外来的中断打断,因为CPU本来就有中断处理机制,会自动将任务运行现场“压栈”,按道理讲,“压栈”应该是压入到任务的专属堆栈中才对,但是我不太明白CPU又是怎么知道要压到专属堆栈中去的呢?我看ucos的源码没有这方面的程序啊?但是我看ucos中对任务与任务之间的切换和任务和中断ISR中间的切换函数确实不一样,前者是OS_TASK_SW(),后者是OSIntCtxSw().希望大神们能够指点指点,谢谢!!! |