找回密码
 立即注册
楼主: 一轮明月

用8A8K64D4编译总说数据超出

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1915

回帖

4301

积分

荣誉版主

无情的代码机器

积分
4301
发表于 2025-6-5 12:25:09 | 显示全部楼层
4631755*** 发表于 2025-6-5 12:13
STC8Gxxx.h这个头文件也是你们官方的吧,一直用的

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

头文件直接 #include "STC8A8K64D4.H"
调用的就是最新导入的头文件,没必要用本地的。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-05 12:00:47
已绑定手机

2

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2025-6-5 12:46:24 | 显示全部楼层
但我想IDATA里的数据能用的话,尽量不用XDATA的数据,程序运行快啊,

点评

可以用的,定义在编译器认可的范围就行了,位寻址使用20H~2FH [attachimg]102744[/attachimg] [attachimg]102745[/attachimg] [attachimg]102743[/attachimg]  详情 回复 发表于 2025-6-5 13:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1915

回帖

4301

积分

荣誉版主

无情的代码机器

积分
4301
发表于 2025-6-5 13:12:14 | 显示全部楼层
4631755*** 发表于 2025-6-5 12:46
但我想IDATA里的数据能用的话,尽量不用XDATA的数据,程序运行快啊,

可以用的,定义在编译器认可的范围就行了,位寻址使用20H~2FH


截图202506051310564114.jpg
截图202506051312109846.jpg


截图202506051310373958.jpg

也可以这样定义,内存编译器自己分配
截图202506051317308420.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-05 12:00:47
已绑定手机

2

主题

11

回帖

38

积分

新手上路

积分
38
发表于 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;

我是这样定义的啊,和你定义的一样啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-05 12:00:47
已绑定手机

2

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2025-6-5 14:26:53 | 显示全部楼层
现在问题是KEIL中,IDATA定义的数据是不是不能占据00--1F的地址?

点评

不要占用工作寄存器组地址也就是00~1F. 用C,直接声明bit 变量,地址交给编译器去决定。  详情 回复 发表于 2025-6-5 14:38
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1915

回帖

4301

积分

荣誉版主

无情的代码机器

积分
4301
发表于 2025-6-5 14:38:02 | 显示全部楼层
4631755*** 发表于 2025-6-5 14:26
现在问题是KEIL中,IDATA定义的数据是不是不能占据00--1F的地址?

不要占用工作寄存器组地址也就是00~1F.
用C,直接声明bit 变量,地址交给编译器去决定。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-05 12:00:47
已绑定手机

2

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2025-6-5 14:49:42 | 显示全部楼层
2个问题:1)C语言中,如果寄存器组我选择了0,也就是00-07地址被使用了。是不是08--1f地址也不能使用?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-05 12:00:47
已绑定手机

2

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2025-6-5 14:51:58 | 显示全部楼层
2)KEIL C51中,程序中我设置了sp=0x80,为什么.M51文件中,栈指针仍然指向0X30

点评

问题1:可以切换寄存器组,但是这些地址还是要留给编译器使用。 问题2:给SP赋值时已经运行在main函数里了,那运行main函数前运行在哪呢~,用C不建议搞这些操作了。 使用C编程,一般不要再操作寄存器组和栈指针了。  详情 回复 发表于 2025-6-5 16:03
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-06-16 09:44:50
已绑定手机

14

主题

1312

回帖

3298

积分

论坛元老

积分
3298
发表于 2025-6-5 15:15:35 | 显示全部楼层
C:\TEST\8a8k64d4>dir
驱动器 C 中的卷是 System
卷的序列号是 8C87-78DE

C:\TEST\8a8k64d4 的目录

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

C:\TEST\8a8k64d4>

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

点评

没有编译register_definitions.c  详情 回复 发表于 2025-6-5 15:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-05 12:00:47
已绑定手机

2

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2025-6-5 15:47:19 | 显示全部楼层
好的,我自己再研究以下吧,谢谢
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 16:23 , Processed in 0.168440 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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