中断级任务切换函数: OSIntCtxSw()
OSIntCtxSw()
{
OSTCBCur = OSTCBHightRdy; //任务控制块的切换
OSPrioCur = OSPrioHightRdy;
SP = OSTCBHightRdy -> OSTCBStkPtr; //使SP指向待运行任务堆栈
//用出栈指令把R1,R2........弹入CPU的通用寄存器
RETI; //中断返回,使PC指向待运行任务
}
OS_ENTER_CRITICAL() 关中断
OS_EXIT_CRITICAL() 开中断
注意:不要在临界段中调用uc/os-II提供的函数功能,以免系统崩溃
二、uc/os-II的时钟
任何操作系统都要提供一个周期性的信号源,以供系统处理诸如延时、超时等与时间有关的事件,这个周期性的信号源叫做时钟
时钟节拍:最小的时钟单位就是两次中断之间间隔的时间,这个最小时钟单位叫做时钟节拍。
中断服务程序:OSTickISR()
中断服务程序通过调用函数OSTimeTick()来完成系统在每个时钟节拍时需要做得工作。
OSTimeTick()------------时钟节拍服务函数
每次执行这个函数做得两件事:
1、给计数器OSTime加1
2、遍历任务控制表中的所有任务控制块,把各个任务控制块中用来存放延时时限的OSTCBDly变量减1,并使该项为0,同时又不使被挂起的任务进入就绪状态。