uart.c(492): error C249: 'DATA': SEGMENT TOO LARGE
- 教育綜合
- 2022-09-12 07:56:11
用Keil編譯程序時(shí)出現(xiàn) error C249: 'DATA': SEGMENT TOO LARGE,數(shù)據(jù)段過(guò)長(zhǎng),怎么解決?硬件已焊好!
程序DATA區(qū)空間已超過(guò)指定單片機(jī)的DATA區(qū)空間,可以用keil C編譯的時(shí)候壓縮。
優(yōu)化代碼大小步驟
第一步:project >> Option for Target “**” 打開(kāi)如圖 2界面。選擇“target”,勾選上“Use MicroLIB”再編譯。
分析:microLIB是缺省的C庫(kù),而且microLIB進(jìn)行了高度優(yōu)化。如果不勾選“Use MicroLIB”,keil會(huì)連接標(biāo)準(zhǔn)C庫(kù)。所以勾選“Use MicroLIB”會(huì)減小code大小。
第二步:project >> Option for Target “**” 打開(kāi)如界面。選擇“C/C++”,勾選上“One ELF Section per Functin”再編譯。
分析:“One ELF Section per Functin”就是將每個(gè)函數(shù)都生成一個(gè)ELF文件,最會(huì)將需要的函數(shù)鏈接成一個(gè)大的ELF文件。但是如果沒(méi)有勾選“One ELF Section per Functin”。Keil將每個(gè)文件編譯成一個(gè)ELF文件(即使文件中用未被使用的函數(shù)),最會(huì)鏈接成一個(gè)ELF文件。所以勾選“One ELF Section per Functin”會(huì)使code變小。
'DATA 'SEGMENT TOO LARGE
當(dāng)用C語(yǔ)言寫單片機(jī)程序,編譯過(guò)程中出現(xiàn)“DATA segment too large”的編譯錯(cuò)誤時(shí),是因?yàn)?28字節(jié)的數(shù)據(jù)空間已經(jīng)用完了,如果是只讀不寫的數(shù)組的話,可以在數(shù)組前面加上code,編譯錯(cuò)誤就會(huì)消失。例如: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
原因你自己都講了,硬件設(shè)置里設(shè)置了data區(qū)的空間限制,硬件不夠用了,自然編譯通不過(guò) 換data區(qū)更大的單片機(jī),或者考慮把數(shù)組放到xdata區(qū)去,再或者考慮使用外部flash存儲(chǔ)數(shù)據(jù)keil編譯報(bào)錯(cuò),(1432): error C249: 'DATA': SEGMENT TOO LARGE
這個(gè)錯(cuò)誤字面的意思是你的變量太多,塞不進(jìn)data塊里面。 你應(yīng)當(dāng)將一部分全局變量分配到idata塊中?;蛘呖纯茨芊駥⒉糠秩肿兞繐Q為局部變量。你好!我在用keil(uvision3?版本)編譯程序時(shí),出現(xiàn)“錯(cuò)誤 C249: 'DATA': SEGMENT TOO LARGE
是不是數(shù)組定義多了,數(shù)組定義多了很容易出現(xiàn)這問(wèn)題,你可以試著刪除一部分程序再編譯試試,確定問(wèn)題改良一下程序展開(kāi)全文閱讀