mcudesign 发表于 2011-1-19 22:15:43

uCOS II中的任务切换宏 OS_TASK_SW()的问题?

书上讲,PC指针没有出栈和入栈的指令。只能想办法引发一次中断(或一次调用),并且让中断向量指向OSCtxSW()(这个函数就是中断服务程序),利用系统跳转到中断服务程序时会自动的把断点指针压入堆栈的功能,把断点指针(PC值)入栈,利用返回指令IRET 把断点指针出栈。。
OSCtxSW()的示意性代码:
void OSCtxSw()
{
用压栈指令把CPU通用寄存器 入栈。
在被终止任务的TCB中保存SP值。
任务控制块的切换。
将切换后的任务的TCB中的SP值 赋予CPU的SP寄存器。
用出栈指令把 切换后任务的堆栈中的 通用寄存器的值出栈。

IRET;    //中断返回,使PC指向切换后的任务。
}
那么由什么来引发中断的,这就是宏 OS_TASK_SW()的作用了。
如果使用的处理器具有软中断指令的话,可以在宏中封装一个软中断指令即可。。

——————————————————————————————————————————————————
打了这么多字,下边才是问题。。
一、什么中软件中断指令?比如51单片机有外部中断,定时中断,串口中断?这属于什么类型的中断?
二、OS_TASK_SW()这个宏应该怎么定义呢?怎么定义才能引发一次中断,首先使当前任务的指针入该任务的堆栈。然后将中断向量指向OSCtxSW()。然后在这个函数里面进行 任务的切换。然后利用IRET指令将切换后的PC出栈???

ba_wang_mao 发表于 2011-1-20 09:01:25

需要了解针对具体单片机:每条汇编指令的具体执行过程。

happlylife 发表于 2011-1-26 11:18:18

楼主可以看一下别人移植在51上的代码,看一下如何触发这个中断。
页: [1]
查看完整版本: uCOS II中的任务切换宏 OS_TASK_SW()的问题?