一轮明月 发表于 2025-6-5 11:36:05

用8A8K64D4编译总说数据超出

帮客户发帖:客户用的8A8K64D4这个型号,KEIL中编程时,选择了STC8A8K64D4,总是编译出错,显示数据空间不对



*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   IDATA   
    SEGMENT: ?STACK
    LENGTH:0001H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   IDATA   
    SEGMENT: ?STACK
    LENGTH:0001H
*** WARNING L4: DATA SPACE MEMORY OVERLAP
    FROM:    0004H
    TO:      0007H
*** WARNING L4: DATA SPACE MEMORY OVERLAP
    FROM:    0005H
    TO:      0007H
*** WARNING L4: DATA SPACE MEMORY OVERLAP
    FROM:    0006H
    TO:      0007H
*** WARNING L4: DATA SPACE MEMORY OVERLAP
    FROM:    0007H
    TO:      0007H
*** ERROR L119: REFERENCE MADE TO ERRONEOUS SEGMENT
    SEGMENT: ?C_C51STARTUP
    MODULE:C:\KEIL5-C51\C51\LIB\C51L.LIB (?C_STARTUP)
    ADDRESS: 012FH

国芯人工智能 发表于 2025-6-5 11:38:00

国芯人工智能回复:

尊敬的客户,
根据您提到的使用情况,我建议您从以下几个方面进行检查和处理,以解决编译时显示数据空间不对的问题:

1. 检查芯片的内存管理:
硬件芯片(STC8A8K64D4)的内存管理可能存在问题,导致编译时内存空间不足。建议您检查芯片的内存配置文件(如ADC32H42H或ADC32L42H),确保内存分配正确。如果内存分配存在问题,建议您联系国芯或相关技术支持,进一步确认问题所在。

2. 调整Keil的配置:
   如果内存分配问题不是主要原因,可以考虑在Keil中进行以下调整:
添加额外的内存空间: 在Keil中增加内存空间,以满足编译需求。
检查Keil的版本: 确保您的Keil版本与芯片的兼容性良好,如果版本不兼容,可能需要更新或重新安装Keil。
检查Keil的内存管理配置: 在Keil中设置正确的内存管理参数,确保模块地址和内存空间的正确引用。

3. 更换芯片或芯片型号:
   如果内存配置和Keil配置均无法解决问题,可以考虑更换芯片型号或更换芯片品牌,以获取更好的兼容性和稳定性。

4. 联系国芯或相关技术支持:
   如果以上方法均无法解决问题,建议您联系国芯或相关技术支持,提供详细的问题描述,以便他们提供更准确的解决方案。

希望以上建议能帮助您解决编译问题,确保芯片和Keil的兼容性。如有其他问题,欢迎随时咨询!

Best regards,
[您的姓名]
[您的联系信息]

[本文内容由国芯人工智能辅助生成,仅供参考]

ercircle 发表于 2025-6-5 11:45:32

register_definitions.c里定义错误导致的。
使用ISP软件导入头文件,参考官方头文件定义



C:\Keil_v5\C51\INC\STC\AI8A8K64D4.H


463175571qqcom 发表于 2025-6-5 12:00:47

我按你的方法导入的啊,否则KEIL中不会有STC8A8A64D4芯片的选项的。现在感觉KEIL还是按照标准51芯片再编译,所以显示我定义的很多寄存器超出了范围

ercircle 发表于 2025-6-5 12:05:27

463175571qqcom 发表于 2025-6-5 12:00
我按你的方法导入的啊,否则KEIL中不会有STC8A8A64D4芯片的选项的。现在感觉KEIL还是按照标准51芯片再编译 ...


定义的重叠和超出范围



463175571qqcom 发表于 2025-6-5 12:05:49

编译时最后显示如下,是不是说明还是按照标准51芯片在编译呢?*** ERROR L119: REFERENCE MADE TO ERRONEOUS SEGMENT
    SEGMENT: ?C_C51STARTUP
    MODULE:C:\KEIL5-C51\C51\LIB\C51L.LIB (?C_STARTUP)
    ADDRESS: 000BH      

ercircle 发表于 2025-6-5 12:07:44

463175571qqcom 发表于 2025-6-5 12:00
我按你的方法导入的啊,否则KEIL中不会有STC8A8A64D4芯片的选项的。现在感觉KEIL还是按照标准51芯片再编译 ...

使用20H往后的可位寻址地址。还有idata地址改下。
STC8Gxxx.h删了吧用官方头文件

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

463175571qqcom 发表于 2025-6-5 12:05
编译时最后显示如下,是不是说明还是按照标准51芯片在编译呢?*** ERROR L119: REFERENCE MADE TO ERRONEOU ...

全是地址不对引起的,最简单的办法把 register_definitions.c全注释掉,逐行放开就知道哪个有问题了

463175571qqcom 发表于 2025-6-5 12:11:02

仔细看看我的定义,我这些定义在汇编程序中是验证过的,定义的位置没问题啊,现在为什么改为C语言后会发生以上错误呢,奇怪

463175571qqcom 发表于 2025-6-5 12:13:15

STC8Gxxx.h这个头文件也是你们官方的吧,一直用的
页: [1] 2 3
查看完整版本: 用8A8K64D4编译总说数据超出