请教关于KEIL C251 编译器关于 USING 0 的使用语法问题
本帖最后由 newlined 于 2024-4-13 13:57 编辑一个程序,关于R0到R7寄存器的使用,以前是通过设置RS0,RS1来区分,比如在一个中断中 执行 CLR RS0;CLR RS1,使用0区,在另一个中断中执行SETB RS0;CLR RS1,使用1区,在主程序中执行 SETB RS0,SETB RS1使用3区。现在我想在程序使用中对R0到R7的寄存器压栈处理,就是 PUSH AR0....PUSH AR7,发现在程序的开头中不使用USING 语句定义寄存器区域的使用,编译就会出问题,出现下面的错误: error A53: MISSING 'USING' INFORMATION,我是不是要把程序中所有的 CLR RS0;CLR RS1,替换成 USING 0,SETB RS0;CLR RS1 替换成 USING 1,SETB RS0,SETB RS1 替换成 USING 3?假设 我写成一下程序会怎样?
CLRRS0;
CLRRS1;
USING 3
就是关于使用using的机理是什么,谢谢大家。
建议不要使用 using x;让编译器自己去处理 本帖最后由 newlined 于 2024-4-13 18:33 编辑
神农鼎 发表于 2024-4-13 18:21
建议不要使用 using x;让编译器自己去处理
谢谢管理员的回复,可不用这个语句,就没法执行 PUSH AR0.....AR7 这样的语句了,我想把R0。。。R7压栈 如果是C语言使用using
编译器会自动设置PSW中的RS0和RS1来切换寄存器组,如果需要push/pop Rn,编译器也会自动选择寄存器组所在的DATA地址
如果是汇编程序使用USING
则仅仅是方便汇编器将ARn自动选择寄存器组所在的DATA地址
所以如果在汇编程序中需要PUSH/POP ARn,则吧必须设置USING 如果是C251,请使用PUSH DR0, PUSHDR4和POPDR0, POP DR4来代替 PUSH AR0这种8051指令。
如果是C51,可以参考
STC单片机uC/OS-II移植记(11):C51中断处理中的寄存器现场保护与恢复方法
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3602
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
kaily 发表于 2024-4-13 21:46
如果是C语言使用using
编译器会自动设置PSW中的RS0和RS1来切换寄存器组,如果需要push/pop Rn,编译器也会 ...
谢谢您的回复,using可以在程序中多次使用吗? newlined 发表于 2024-4-15 08:10
谢谢您的回复,using可以在程序中多次使用吗?
可以
C语言程序中,using对当前函数有效
汇编程序,对using下面的代码有效,直到下一个using kaily 发表于 2024-4-16 21:09
可以
C语言程序中,using对当前函数有效
汇编程序,对using下面的代码有效,直到下一个using ...
好的,谢谢。
页:
[1]