找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 185|回复: 5
收起左侧

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

[复制链接]
ID:227818 发表于 2024-4-13 13:05 | 显示全部楼层 |阅读模式
一个单片机程序,关于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的机理是什么,谢谢大家。
回复

使用道具 举报

ID:1088185 发表于 2024-4-13 19:23 | 显示全部楼层
using 3 它不是CPU指令,所以不会翻译成任何CPU指令, 它只是告诉编译器这个寄存器组已用, 不要拿来放变量而已, 要转到Bank 3 就 ORL  PSW,#0x18
回复

使用道具 举报

ID:883242 发表于 2024-4-13 21:12 | 显示全部楼层
using就两个用途,一是AR0这样的别名,不写using汇编器不知道AR0到底在哪里。另一个用途是写relocatable代码的时候,using表示这个地方已经被使用了,链接的时候会避免在这里分配变量地址。
回复

使用道具 举报

ID:227818 发表于 2024-4-15 08:06 | 显示全部楼层
1600277881 发表于 2024-4-13 19:23
using 3 它不是CPU指令,所以不会翻译成任何CPU指令, 它只是告诉编译器这个寄存器组已用, 不要拿来放变量 ...

谢谢您的回复,我再揣摩下。
回复

使用道具 举报

ID:227818 发表于 2024-4-15 08:07 | 显示全部楼层
Hephaestus 发表于 2024-4-13 21:12
using就两个用途,一是AR0这样的别名,不写using汇编器不知道AR0到底在哪里。另一个用途是写relocatable代 ...

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

使用道具 举报

ID:883242 发表于 2024-4-15 11:51 | 显示全部楼层
newlined 发表于 2024-4-15 08:07
谢谢您的回复,using可以在程序中多次使用吗?

当然可以,using的有效期在写using这一行的下一行开始,直到遇到另一个using结束。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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