用Keil编译程序时出现 error C249: 'DATA': SEGMENT TOO LARGE,数据段过长,怎么解决?硬件已焊好!

听说要设置Target的属性参数,具体怎么设置啊?如果问题解决会加分!!!

程序DATA区空间已超过指定单片机的DATA区空间,可以用keil C编译的时候压缩。

优化代码大小步骤

第一步:project >> Option for Target “**” 打开如图 2界面。选择“target”,勾选上“Use MicroLIB”再编译。

分析:microLIB是缺省的C库,而且microLIB进行了高度优化。如果不勾选“Use MicroLIB”,keil会连接标准C库。所以勾选“Use MicroLIB”会减小code大小。 

第二步:project >> Option for Target “**” 打开如界面。选择“C/C++”,勾选上“One ELF Section per Functin”再编译。

分析:“One ELF Section per Functin”就是将每个函数都生成一个ELF文件,最会将需要的函数链接成一个大的ELF文件。但是如果没有勾选“One ELF Section per Functin”。Keil将每个文件编译成一个ELF文件(即使文件中用未被使用的函数),最会链接成一个ELF文件。所以勾选“One ELF Section per Functin”会使code变小。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-14

什么芯片?编程编太大了,也有可能你Target属性参数没有勾选内部存储器。

类似IROM1,IRAM1 IRAM2,的内部存储器可选项要勾选到。

追问

在哪里找到

 

 

 

 

我只找到这个

追答

点开 Dvice 看下你芯片选择对了没有。你什么芯片?什么版本的KEIL?

追问

AT89C52 KEIL 4

第2个回答  推荐于2017-12-16
说明你程序DATA区空间已超过指定单片机的DATA区空间,可以用keil C编译的时候压缩压缩一下,keil C菜单里有一个可以设置的,选最高级(好像是7级)就可以就最大空间压缩本回答被网友采纳
第3个回答  2013-08-18

解决方法如下:(设置Target的属性参数,具体设置如下)

  

变为


此时调试结果如下图所示:

第4个回答  2013-05-14
会不会是你数据类型设置有问题?

用Keil编译程序时出现 error C249: 'DATA': SEGMENT TOO LARGE,数据段...
第一步:project >> Option for Target “**” 打开如图 2界面。选择“target”,勾选上“Use MicroLIB”再编译。分析:microLIB是缺省的C库,而且microLIB进行了高度优化。如果不勾选“Use MicroLIB”,keil会连接标准C库。所以勾选“Use MicroLIB”会减小code大小。第二步:project >> Option for T...

...时,出现“错误 C249: 'DATA': SEGMENT TOO LARGE”
内存不足造成的,变量定义的太多,你可以讲部分不更改值得变量前加code,使其在ROM中,腾出一部分空间。

keil编译报错,(1432): error C249: 'DATA': SEGMENT TOO LARGE
这个错误字面的意思是你的变量太多,塞不进data块里面。你应当将一部分全局变量分配到idata块中。或者看看能否将部分全局变量换为局部变量。

error C241: 'temptest': auto segment too large我该怎样修改_百度知 ...
在C51编译的时候,如果出现了“error C241: 'main': auto segment too large” 的错误,主要原因是由于 51 "DATA" 存储容量不足。解决方法为:(1)把宣告"DATA"的变数改成 "XDATA"=>unsigned temptab[] 改成 unsigned xdata temptab[](2)快速的方法 : 在Keil C 的Target标签中,将...

...error C241: 'main': auto segment too large,怎么解决??_百度知...
在编译的时候,如果出现了“error C241: 'main': auto segment too large” 的错误,其原因是由于存储容量不足 解决方法为:在Keil C 的Target标签中,将Memory Model从small改为large, 这样编译的存储空间就从DATA变成了XDATA,也就解决了存储容量不足的问题。

keil编译报错,(1432): error C249: 'DATA': SEGMENT TOO LARGE
你看看tft_lcd里面有没有添加fsmcXXX.h之类的头文件,这个错误是说你使用的函数没有被定义。\\r\\n一般只要添加相应的头文件即可。

keil编译报错,(1432): error C249: 'DATA': SEGMENT TOO LARGE
内存不够用了,是你定义的变量太多了

我用KEIL软件 提示我 data segment too large 我该怎么修改
int random_array[10][10][10];这个全局数组需要占用2000字节的空间,而默认的存储区域中只有128字节。你需要了解一下51平台相关基础知识,不要以为单片机有计算机那么多的资源。

'DATA 'SEGMENT TOO LARGE
当用C语言写单片机程序,编译过程中出现“DATA segment too large”的编译错误时,是因为128字节的数据空间已经用完了,如果是只读不写的数组的话,可以在数组前面加上code,编译错误就会消失。例如:code unsigned int p3data[49]={0x00,0x19,0x01,0x1a,0x02,0x1b,0x03,0x1c,0x04,0x1d,0x05,...

Keil C程序中定义的一维数组字节过大该怎么办?
楼上则正解 做单片机的话, 还是必须要了解一下其存储结构, 最起码得知道data idata xdata所指的存储区域 idata 指向的片内ram ,大小范围为256字节,所以你一个数组定义在idata段内,不能超过256字节,超过就会报错。xdata指向的片外ram,大小范围为64KB,你可以将你需要的大容量数组定义在该段内。

相似回答