【小技巧】Keil C51 报错“*** ERROR L107: ADDRESS SPACE OVERFLOW****

2024-05-30 01:44

本文主要是介绍【小技巧】Keil C51 报错“*** ERROR L107: ADDRESS SPACE OVERFLOW****,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软件:Keil C51 C51V961版本
电脑:Win10

报错提示:

compiling System.c... linking... *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: ?DT?LCD LENGTH: 0034H Program Size: data=174.0 xdata=17 code=1205 Target not created. Build Time Elapsed: 00:00:03

在这里插入图片描述

解决办法:
将以下代码放在.c文件中。

xdata unsigned char  LCD_SEG[SEGSIZE] _at_ 0x500; // LCD显示地址 指定位置为0x500//时间/频率/电压显示				               // 0     1    2    3    4    5    6    7    8    9
static volatile unsigned char Disp_Code[]={0xf5,0x05,0xd3,0x97,0x27,0xb6,0xf6,0x15,0xf7,0xb7,// 不带小数点显示
0xfd,0x0d,0xdb,0x9f,0x2f,0xbe,0xfe,0x1d,0xff,0xbf // 带小数点显示
};//显示数字译码//功率显示                                     // 0    1    2    3    4    5    6    7    8    9
static volatile unsigned char DispPower_Code[]={0xfd,0x85,0xdb,0x9f,0xa7,0xbe,0xfe,0x95,0xff,0xbf};// 数字译码  "POWER" ":" "."这几个符号常亮

原因分析:报错之前是因为将此段代码放在.h文件中。

追问:为什么这段代码放在.C文件就不会报错,放在.H文件就会报错ERROR L107: ADDRESS SPACE OVERFLOW ???


问题分析

错误 L107: ADDRESS SPACE OVERFLOW 通常表明数据段 (DATA 空间) 溢出。当这段代码放在 .c 文件中时,编译器只会在该文件中分配内存空间。而当这段代码放在 .h 文件中,并在多个 .c 文件中包含时,会导致每个包含该头文件的 .c 文件都试图分配这些变量的内存,造成重复分配和内存溢出。

解决方法

要解决这个问题,需要确保这些变量只被定义一次,并且所有包含该头文件的 .c 文件都能访问它们。

1. 使用 extern 关键字

可以在头文件中声明这些变量,而在一个 .c 文件中定义它们。这会确保这些变量只在一个地方被定义,并且可以在多个文件中使用。

在头文件中声明:

// dispower.h
#ifndef DISPOWER_H
#define DISPOWER_Hextern xdata unsigned char LCD_SEG[SEGSIZE]; // LCD显示地址 指定位置为0x500
extern const unsigned char Disp_Code[]; // 显示数字译码
extern const unsigned char DispPower_Code[]; // 功率显示数字译码#endif // DISPOWER_H

在一个 .c 文件中定义:

// dispower.c
#include "dispower.h"xdata unsigned char LCD_SEG[SEGSIZE] _at_ 0x500; // LCD显示地址 指定位置为0x500const unsigned char Disp_Code[] = {0xf5, 0x05, 0xd3, 0x97, 0x27, 0xb6, 0xf6, 0x15, 0xf7, 0xb7, // 不带小数点显示0xfd, 0x0d, 0xdb, 0x9f, 0x2f, 0xbe, 0xfe, 0x1d, 0xff, 0xbf  // 带小数点显示
}; // 显示数字译码const unsigned char DispPower_Code[] = {0xfd, 0x85, 0xdb, 0x9f, 0xa7, 0xbe, 0xfe, 0x95, 0xff, 0xbf // 数字译码  "POWER" ":" "."这几个符号常亮
}; // 功率显示

为什么 const 关键字?

Disp_CodeDispPower_Code 声明为 const 可以将它们放入只读内存(通常是代码空间),这不仅节省了 DATAXDATA 空间,还避免了误修改。这也是一种优化策略。

通过这种方式,可以确保这些变量只被定义一次,并且可以在其他文件中访问,从而避免 ADDRESS SPACE OVERFLOW 错误。

这篇关于【小技巧】Keil C51 报错“*** ERROR L107: ADDRESS SPACE OVERFLOW****的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015228

相关文章

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

Pycharm安装报错:Cannot detect a launch configuration解决办法

《Pycharm安装报错:Cannotdetectalaunchconfiguration解决办法》本文主要介绍了Pycharm安装报错:Cannotdetectalaunchconfigur... 本文主要介绍了Pycharm安装报错:Cannot detect a launch configuratio