我的理解:
1,用汇编的观点看,中断的时候,PC会压,SP+2,完成后执行 RETI 之后返回原来的地方。这是正常的情况。 但是,如果我在中断里面手动操作 SP 指针,让他指向另外一个地方,会发生什么情况? 效果就是RETI 的时候,装在今PC的不是原先的地址,而是新的地址,这个新的地址就是指向另外一个任务的(上次中断保存下载的)。只要你的OS管理好这个 SP 指针的操作,是能正常切换的。 以上是发生在中断,有高优先级任务继续时候发生的任务切换。
2 另外如果程序调用 OSTimeDly 等函数的时候,认为任务自动放弃CPU使用,同样用上面的方法。要任务切换,关键是操作好SP,之后就是保护好现场,将目前工作的寄存器保存起来,这个就是uCOS里面那个任务堆栈的用处了。
以上是实现的思想,uCOS 用C写的,当然也有他实现的办法,具体看书好了 ........
|