嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-Ⅱ的移植
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)中斷級任務(wù)切換函數(shù)OSIntCtxSw() 該函數(shù)在ISR中執(zhí)行任務(wù)的切換功能。由于是在中斷中執(zhí)行的,處理器的大部分寄存器值都已經(jīng)自動(dòng)保存在堆棧中了,所以該函數(shù)的大部分代碼都和OSCtxSw()相同,只是前半部分保存寄存器的功能不要了。
(4)OSTickISR()時(shí)鐘節(jié)拍服務(wù)函數(shù)μCOS-Ⅱ要求用戶提供一個(gè)周期性的時(shí)鐘源,來實(shí)現(xiàn)時(shí)間的定時(shí)和超時(shí)功能。這部分功能由該函數(shù)實(shí)現(xiàn)。這個(gè)函數(shù)首先保存寄存器的值,然后設(shè)置中斷標(biāo)志、清中斷,再調(diào)用OSTimeTick()遞減延時(shí)計(jì)數(shù),判斷是否要在中斷中切換任務(wù),最后恢復(fù)處理器寄存器,執(zhí)行中斷返回指令,返回到中斷處繼續(xù)執(zhí)行。代碼如下:
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、結(jié)論
本文將μCOS-Ⅱ移植到8位系列單片機(jī)上,并且在MC9S08AW60上穩(wěn)定的運(yùn)行,有效提高了該系統(tǒng)的性能,充分利用系統(tǒng)資源,使系統(tǒng)的實(shí)時(shí)性能得到很大的提高,開闊了應(yīng)用范圍。同時(shí),作者也將該系統(tǒng)在HCS08的另外兩款單片機(jī)MC9S08QE128和MC9S08GB60上移植實(shí)現(xiàn)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論