asm psha
asm pshh
asm tsx
asm pshx
asm pshh
asm ldhx OSTCBCur
asm pula
asm sta 0, x
asm pula
asm sta 1, x
OSTaskSwHook();
asm lda OSPrioHighRdy
asm sta OSPrioCur
asm ldhx OSTCBHighRdy
asm sthx OSTCBCur
asm ldhx 0, x
asm txs
asm pulh
asm pula
asm sta PAGE
asm rti
(3)中断级任务切换函数OSIntCtxSw() 该函数在ISR中执行任务的切换功能。由于是在中断中执行的,处理器的大部分寄存器值都已经自动保存在堆栈中了,所以该函数的大部分代码都和OSCtxSw()相同,只是前半部分保存寄存器的功能不要了。
(4)OSTickISR()时钟节拍服务函数μCOS-Ⅱ要求用户提供一个周期性的时钟源,来实现时间的定时和超时功能。这部分功能由该函数实现。这个函数首先保存寄存器的值,然后设置中断标志、清中断,再调用OSTimeTick()递减延时计数,判断是否要在中断中切换任务,最后恢复处理器寄存器,执行中断返回指令,返回到中断处继续执行。代码如下:
SRTISC_RTIACK = 1;
asm lda PAGE
asm psha
asm pshh
asm lda OSIntNesting
asm add #1
asm sta OSIntNesting
asm cmp #1
asm bne Tmr_TickISR1
asm tsx
asm pshx
asm pshh
asm ldhx OSTCBCur
asm pula
asm sta 0, x
asm pula
asm sta 1, x
asm Tmr_TickISR1:
OSTimeTick();
OSIntExit();
asm pulh
asm pula
asm sta PAGE
asm rti
5、结论
本文将μCOS-Ⅱ移植到8位系列单片机上,并且在MC9S08AW60上稳定的运行,有效提高了该系统的性能,充分利用系统资源,使系统的实时性能得到很大的提高,开阔了应用范围。同时,作者也将该系统在HCS08的另外两款单片机MC9S08QE128和MC9S08GB60上移植实现。