您当前的位置:五五电子网电子知识单片机-工控设备51单片机C8051F12X中多bank的分区跳转处理 正文
C8051F12X中多bank的分区跳转处理

C8051F12X中多bank的分区跳转处理

点击数:7187 次   录入时间:03-04 11:47:04   整理:http://www.55dianzi.com   51单片机

  在压栈,出栈宏中需要加入:

  PUSH PSBANK
PUSH?B_CURRENTBANK

POP ?B_CURRENTBANK
POP PSBANK
在任务堆栈的初始化函数OSTaskStkInit中需要加入:
*stk++=17; //堆栈长度增加2个到17

if(bank==0x22:){ //bank2
*stk++=bank;
*stk++=CurrentBank2();
else if(bank==0x33){ //bank3
*stk++=bank;
*stk++=CurrentBank3();
}
else{ //bankl和common
*stk++=0xll; //PSBANK
*stk++=CurrentBankl();
)

  其中,bank0用任何的PSBANK值均没有问题,所以简化了PSBANK取值0x00的情况。

  函数INT8U CurrentBankl(void),INT8U Current-Bank2(void)和INT8U CurrentBank3(void)是用汇编语言实现的,返回值通过R7传递,目的是获得该任务所在分组对应切换代码段(?SWITCHn)的低8位地址。不用C语言编写的原因同样是?B_SWITCH&N不被C支持。

  CurrentBankl(void)代码如下,其他两个类同。
RSEG?PR?CurrentBankl?Os_CPU_A
CurrentBankl:
MOV DPTR,#?B_SWITCHl
MOV R7.DPL
RET

  结 语

  本文介绍了Keil C51实现大于64 KB程序的bank分组代码切换机制的原理,提出了没有操作系统情况下非正常转移时bank的处理方法以及μc/os—II操作系统在多bank分区程序移植中应采取的措施,在开发实例中均得到了很好的应用。



上一页  [1] [2] 


本文关键字:暂无联系方式51单片机单片机-工控设备 - 51单片机