当前位置:首页 > 教育综合 > 正文

uart.c(492): error C249: 'DATA': SEGMENT TOO LARGE

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

程序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变小。

'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,0x1e,0x06,0x1f,0x07,0x20,0x08,0x21,0x09,0x22,0x0a, 0x23,0x0b,0x24,0x0c,0x25,0x0d,0x26,0x0e,0x27,0x0f,0x28,

整理程序.C(249): error C249: 'DATA': SEGMENT TOO LARGE

原因你自己都讲了,硬件设置里设置了data区的空间限制,硬件不够用了,自然编译通不过 换data区更大的单片机,或者考虑把数组放到xdata区去,再或者考虑使用外部flash存储数据

keil编译报错,(1432): error C249: 'DATA': SEGMENT TOO LARGE

这个错误字面的意思是你的变量太多,塞不进data块里面。 你应当将一部分全局变量分配到idata块中。或者看看能否将部分全局变量换为局部变量。

你好!我在用keil(uvision3​版本)编译程序时,出现“错误 C249: 'DATA': SEGMENT TOO LARGE

是不是数组定义多了,数组定义多了很容易出现这问题,你可以试着删除一部分程序再编译试试,确定问题改良一下程序
展开全文阅读