用keil編譯程式時出現 error c249data

時間 2021-06-28 17:27:16

1樓:擱淺璃殤

程式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變小。

2樓:新番娘

什麼晶片?程式設計編太大了,也有可能你target屬性引數沒有勾選內部儲存器。

類似irom1,iram1 iram2,的內部儲存器可選項要勾選到。

3樓:匿名使用者

說明你程式data區空間已超過指定微控制器的data區空間,可以用keil c編譯的時候壓縮壓縮一下,keil c選單裡有一個可以設定的,選最高階(好像是7級)就可以就最大空間壓縮

4樓:杭電王同學

會不會是你資料型別設定有問題?

5樓:匿名使用者

解決方法如下:(設定target的屬性引數,具體設定如下)

變為此時除錯結果如下圖所示:

用keil寫程式時出現“c(162): error c249: 'data': segment too large“的錯誤,怎麼解決?

6樓:匿名使用者

你大概還沒分清rom和ram。

另外你需要知道51核直接定址的內部ram只有128位元組。

7樓:謎一樣的人

如果你bai定義的陣列不用du

更改就用 uchar code xx[10]=根據你zhi資料的用處,你可以有dao以下幾種選擇:

data:直版

接定址的片內權ram區低128b(00h~7fh)bdata:片內ram的可位定址區(20h~2fh),允許位元組和位混合訪問

idata:微控制器間接訪問的片內ram區,允許訪問全部片內rampdata:ri間接訪問的片外ram的低256b(00h~ffh)xdata:

用dptr間接訪問的片外ram,允許訪問全部64kb片外ram(0000h~ffffh)

code:微控制器的64kb程式儲存區rom

8樓:long1209龍是我

用keil寫程式時出現錯誤解決方法:

1、在選單欄的flash選項下選擇configure flash tools子選單出現如下介面選擇對應的晶片就可以了。

大神們keil 4 編譯程式時提示mian c 1wa

海之源儀器 2 選擇keil安裝檔案中的c51檔案的路徑 路徑以你的實際路徑為準 3 確定後,有以下提示,證明新增成功。這時再開啟keil編譯工程檔案,就不會提示 error c318 can t open file stc15.h 了。 資深技術 把stc12c5a.h檔案放到編譯器能找到的資料夾...

什麼是編譯程式,編譯程式和解釋程式都是什麼意思?

編譯程式指將某一種程式設計語言寫的程式翻譯成等價的另一種語言的程式的程式,稱之為編譯程式 編譯程式也稱為編譯器,是指把用高階程式設計語言書寫的源程式,翻譯成等價的機器語言格式目標程式的翻譯程式。編譯程式屬於採用生成性實現途徑實現的翻譯程式。它以高階程式設計語言書寫的源程式作為輸入,而以組合語言或機器...

匯程式設計序是怎麼編譯的?什麼是編譯程式和匯程式設計序?

編譯程式是把用高階程式語言或計算機組合語言書寫的源程式,翻譯成等價的機器語言格式目標程式的翻譯程式,屬於採用生成性實現途徑實現的翻譯程式。編譯程式以高階程式語言書寫的源程式作為輸入,而以組合語言或機器語言表示的目標程式作為輸出 編譯出的目標程式通常還要經歷執行階段,以便在執行程式的支援下執行,加工初...