br />*stk++=CurrentBankl();
)
其中,bank0用任何的PSBANK值均沒(méi)有問(wèn)題,所以簡(jiǎn)化了PSBANK取值0x00的情況。
函數(shù)INT8U CurrentBankl(void),INT8U Current-Bank2(void)和INT8U CurrentBank3(void)是用匯編語(yǔ)言實(shí)現(xiàn)的,返回值通過(guò)R7傳遞,目的是獲得該任務(wù)所在分組對(duì)應(yīng)切換代碼段(SWITCHn)的低8位地址。不用C語(yǔ)言編寫(xiě)的原因同樣是B_SWITCH&N不被C支持。
CurrentBankl(void)代碼如下,其他兩個(gè)類(lèi)同。
RSEG PR CurrentBankl Os_CPU_A
CurrentBankl:
MOV DPTR,#B_SWITCHl
MOV R7.DPL
RET
結(jié) 語(yǔ)
本文介紹了Keil C51實(shí)現(xiàn)大于64 KB程序的bank分組代碼切換機(jī)制的原理,提出了沒(méi)有操作系統(tǒng)情況下非正常轉(zhuǎn)移時(shí)bank的處理方法以及μc/os—II操作系統(tǒng)在多bank分區(qū)程序移植中應(yīng)采取的措施,在開(kāi)發(fā)實(shí)例中均得到了很好的應(yīng)用。





