UC/OS --II的中断和时钟

中断级任务切换函数: 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,同时又不使被挂起的任务进入就绪状态。 
 

猜你喜欢

转载自blog.csdn.net/songjun007/article/details/82810279