头文件COMMON.h 说明:
#define INT_MODE 0 // KF8FXXX/KF8S系列单级中断置0, 其他系列两级中断置1
#if INT_MODE
char __at(0x80) VAR_SP; // 模拟栈切换指针
char __at(0x81) SIM_STACK[24]; // 模拟栈,8*(中断级数+1)
char __at(0x99) I0_STACK[8]; // 4(R6,STK00~STK02)或8(R6,STK00~STK06)
char __at(0xa1) I1_STACK[8]; // 4(R6,STK00~STK02)或8(R6,STK00~STK06)
#else
char __at(0x80) VAR_SP; // 模拟栈切换指针
char __at(0x81) SIM_STACK[16]; // 模拟栈,8*(中断级数+1)
char __at(0x91) I0_STACK[9]; // 5(R6,R7,STK00~STK02)或9(R6,R7,STK00~STK06)
#endif
扩充库用到的上述全局变量,最好以at指定地址方式命名,以保证 编译器生成的代码,和 STK00~STK12 在同一页中,这样程序运行速度最快。
用户可自行查看生成的 LST文件,必须强调,本扩充库的编写,已强制指定 VAR_SP, SIM_STACK 和 STK00~STK12 在同一页中, 如果 VAR_SP, SIM_STACK 不和 STK00~STK12 的同一页中,将不能保证正确的运行结果,切记!!!
用户可适当修改 at 指定值,以达到上述目的,当然,希望官方下一版本的 ChipON---IDE编译器,如自动分配上述变量。
|