ercircle 发表于 2025-6-5 12:25:09

463175571qqcom 发表于 2025-6-5 12:13
STC8Gxxx.h这个头文件也是你们官方的吧,一直用的

报错的这些地址在汇编里可以用,但是转C,这些地址被编译器接管了就不要用了。

头文件直接 #include "STC8A8K64D4.H"
调用的就是最新导入的头文件,没必要用本地的。

463175571qqcom 发表于 2025-6-5 12:46:24

但我想IDATA里的数据能用的话,尽量不用XDATA的数据,程序运行快啊,

ercircle 发表于 2025-6-5 13:12:14

463175571qqcom 发表于 2025-6-5 12:46
但我想IDATA里的数据能用的话,尽量不用XDATA的数据,程序运行快啊,
可以用的,定义在编译器认可的范围就行了,位寻址使用20H~2FH








也可以这样定义,内存编译器自己分配

463175571qqcom 发表于 2025-6-5 14:25:05

u8 bdata system_flag1 _at_ 0x20;

sbit B_1ms         = system_flag1 ^ 0; //1ms周期标志


sbit        B_DLH_RX_GZ = system_flag1 ^ 1;//电流环通讯故障//LY       
       

sbit XSDP         = system_flag1 ^ 3;
sbit GP3        = system_flag1 ^ 4;
sbit ZDWBBZ = system_flag1 ^ 5;
sbit SLOWBZ = system_flag1 ^ 6;
sbit PBNZ         = system_flag1 ^ 7;

我是这样定义的啊,和你定义的一样啊

463175571qqcom 发表于 2025-6-5 14:26:53

现在问题是KEIL中,IDATA定义的数据是不是不能占据00--1F的地址?

ercircle 发表于 2025-6-5 14:38:02

463175571qqcom 发表于 2025-6-5 14:26
现在问题是KEIL中,IDATA定义的数据是不是不能占据00--1F的地址?

不要占用工作寄存器组地址也就是00~1F.
用C,直接声明bit 变量,地址交给编译器去决定。

463175571qqcom 发表于 2025-6-5 14:49:42

2个问题:1)C语言中,如果寄存器组我选择了0,也就是00-07地址被使用了。是不是08--1f地址也不能使用?

463175571qqcom 发表于 2025-6-5 14:51:58

2)KEIL C51中,程序中我设置了sp=0x80,为什么.M51文件中,栈指针仍然指向0X30

21cnsound 发表于 2025-6-5 15:15:35

C:\TEST\8a8k64d4>dir
驱动器 C 中的卷是 System
卷的序列号是 8C87-78DE

C:\TEST\8a8k64d4 的目录

2025/06/0515:14    <DIR>          .
2025/06/0515:05    <DIR>          ..
2025/06/0515:06                96 main.c
2025/06/0515:07            11,506 register_definitions.c
2025/06/0511:25             9,195 register_definitions.H
2025/06/0515:07         108,864 STC8Gxxx.h
               5 个文件      130,314 字节
               2 个目录 124,316,860,416 可用字节

C:\TEST\8a8k64d4>D:\Software\单片机\编译\C51_V961\C51 main.c

C51 COMPILER V9.60.7.0 - SN: K1DZC-EN58KC
COPYRIGHT Copyright (C) 2012 - 2022 ARM Limited or its Affiliates. All rights reserved.

C51 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)

C:\TEST\8a8k64d4>D:\Software\单片机\编译\C51_V961\LX51 main.obj

LX51 LINKER/LOCATER V4.66.100.0 - SN: K1DZC-EN58KC
COPYRIGHT Copyright (C) 1995-2021, Arm Limited or its Affiliates. All rights reserved.
main.obj
Program Size: data=9.0 xdata=0 const=0 code=19
LX51 RUN COMPLETE.0 WARNING(S),0 ERROR(S)

C:\TEST\8a8k64d4>D:\Software\单片机\编译\C51_V961\OHX51 main

Extended 8051/251 Object to Hex File Converter V1.47.0.0
COPYRIGHT ARM Germany GmbH 2000 - 2018

GENERATING INTEL HEX FILE: main.hex

C:\TEST\8a8k64d4>dir
驱动器 C 中的卷是 System
卷的序列号是 8C87-78DE

C:\TEST\8a8k64d4 的目录

2025/06/0515:14    <DIR>          .
2025/06/0515:05    <DIR>          ..
2025/06/0515:14               653 MAIN
2025/06/0515:06                96 main.c
2025/06/0515:14                77 main.hex
2025/06/0515:14               935 main.LST
2025/06/0515:14             2,870 MAIN.MAP
2025/06/0515:14               256 main.OBJ
2025/06/0515:07            11,506 register_definitions.c
2025/06/0511:25             9,195 register_definitions.H
2025/06/0515:07         108,864 STC8Gxxx.h
               9 个文件      134,452 字节
               2 个目录 124,314,529,792 可用字节

C:\TEST\8a8k64d4>

我用命令行编译,是正常的

463175571qqcom 发表于 2025-6-5 15:47:19

好的,我自己再研究以下吧,谢谢
页: 1 [2] 3
查看完整版本: 用8A8K64D4编译总说数据超出