找回密码
 立即注册
查看: 676|回复: 7

请教关于KEIL C251 编译器关于 USING 0 的使用语法问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:399
  • 最近打卡:2025-06-19 01:01:02

35

主题

191

回帖

1109

积分

金牌会员

积分
1109
发表于 2024-4-13 11:41:35 | 显示全部楼层 |阅读模式
本帖最后由 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?假设 我写成一下程序会怎样?

CLR  RS0;
CLR  RS1;
USING 3

就是关于使用using的机理是什么,谢谢大家。

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-19 09:56:48

734

主题

1万

回帖

1万

积分

管理员

积分
16770
发表于 2024-4-13 18:21:20 | 显示全部楼层
建议不要使用 using x;  让编译器自己去处理
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:399
  • 最近打卡:2025-06-19 01:01:02

35

主题

191

回帖

1109

积分

金牌会员

积分
1109
发表于 2024-4-13 18:31:39 | 显示全部楼层
本帖最后由 newlined 于 2024-4-13 18:33 编辑
神*** 发表于 2024-4-13 18:21
建议不要使用 using x;  让编译器自己去处理

谢谢管理员的回复,可不用这个语句,就没法执行 PUSH AR0.....AR7 这样的语句了,我想把R0。。。R7压栈
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-06-16 09:28:41

1

主题

95

回帖

836

积分

超级版主

积分
836
发表于 2024-4-13 21:46:26 | 显示全部楼层
如果是C语言使用using
编译器会自动设置PSW中的RS0和RS1来切换寄存器组,如果需要push/pop Rn,编译器也会自动选择寄存器组所在的DATA地址

如果是汇编程序使用USING
则仅仅是方便汇编器将ARn自动选择寄存器组所在的DATA地址
所以如果在汇编程序中需要PUSH/POP ARn,则吧必须设置USING
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-06-13 00:05:49

115

主题

1223

回帖

1万

积分

荣誉版主

积分
13010
发表于 2024-4-14 01:58:00 | 显示全部楼层
如果是C251,请使用PUSH DR0, PUSH  DR4和POP  DR0, 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爱好者互助交流社区)


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:399
  • 最近打卡:2025-06-19 01:01:02

35

主题

191

回帖

1109

积分

金牌会员

积分
1109
发表于 2024-4-15 08:10:11 | 显示全部楼层
kai*** 发表于 2024-4-13 21:46
如果是C语言使用using
编译器会自动设置PSW中的RS0和RS1来切换寄存器组,如果需要push/pop Rn,编译器也会 ...

谢谢您的回复,using可以在程序中多次使用吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-06-16 09:28:41

1

主题

95

回帖

836

积分

超级版主

积分
836
发表于 2024-4-16 21:09:19 | 显示全部楼层
newl*** 发表于 2024-4-15 08:10
谢谢您的回复,using可以在程序中多次使用吗?

可以
C语言程序中,using对当前函数有效
汇编程序,对using下面的代码有效,直到下一个using
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:399
  • 最近打卡:2025-06-19 01:01:02

35

主题

191

回帖

1109

积分

金牌会员

积分
1109
发表于 2024-4-17 07:59:44 | 显示全部楼层
kai*** 发表于 2024-4-16 21:09
可以
C语言程序中,using对当前函数有效
汇编程序,对using下面的代码有效,直到下一个using ...

好的,谢谢。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-19 22:36 , Processed in 0.124836 second(s), 93 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表