問題概述
客戶使用IDE CS+ CCRL編譯瑞薩RL78系列MCU R5F1027A(flash空間16K),出現(xiàn)報(bào)錯(cuò)信息,“data”地址超出范圍。而實(shí)際使用的flash約8K,還不到16K。R5F1027A項(xiàng)目使用的code flash約8K,一旦添加新代碼就出現(xiàn)編譯錯(cuò)誤信息,提示地址溢出的錯(cuò)誤?
分析
1
針對(duì)提示的錯(cuò)誤信息,嘗試屏蔽不同的軟件函數(shù),發(fā)現(xiàn)減少軟件代碼,編譯恢復(fù)正常。
2
多次嘗試后發(fā)現(xiàn)flash空間在超過8K左右后,會(huì)出現(xiàn)編譯錯(cuò)誤。
3
查看項(xiàng)目生成的MOT文件。發(fā)現(xiàn)code flash地址直接從0x2000開始,前面的0x00C4選項(xiàng)字節(jié)之后到0x2000 的flash空間都是沒有使用到。
4
查看map文件,和mot文件相符合,.CONST 代碼段是從0x2000開始分配的,也就是代碼段前面的flash空間有將近8K沒用上。
5
分析確認(rèn)到原因后,多次嘗試修改section settings。參考RL78其他型號(hào)code flash 8K的R5F10268的CS+ CCRL工程設(shè)置,發(fā)現(xiàn).const分配的地址是從0x00CE開始。而R5F1027A的工程默認(rèn)從0x2000開始,所以想把.const直接從0x2000改成0x00CE,一直提示不符合設(shè)置范圍的錯(cuò)誤。最后把.const分配的地址放到后面改成0x3C00,其他代碼段.text則按順序從0x00D0開始,這樣設(shè)置后,編譯成功了。
6
以上設(shè)置過后代碼重新編譯ok,也從0x00D0開始,但是當(dāng)設(shè)置開啟On-chip在線仿真功能后,發(fā)現(xiàn)報(bào)監(jiān)控字節(jié)的錯(cuò)誤。
7
查看數(shù)據(jù)手冊(cè)發(fā)現(xiàn),debug監(jiān)控字節(jié)會(huì)占用10個(gè)字節(jié),從0x00CE開始到0x00D8.
8
把代碼段.text地址從0x00D0修改成0x00E0開始后,重新編譯正常了。查看MAP文件和mot文件,地址也是符合的,從0x00E0開始分配。
總結(jié)
通過查看分析MAP文件和mot文件,定位到.CONST 代碼段是從0x2000開始分配的,導(dǎo)致代碼段前面的flash空間有將近8K沒用上,最終通過修改設(shè)置代碼段地址,問題得到解決。
審核編輯:劉清
-
mcu
+關(guān)注
關(guān)注
146文章
17117瀏覽量
350925 -
FlaSh
+關(guān)注
關(guān)注
10文章
1632瀏覽量
147919
原文標(biāo)題:使用CS+ CCRL編譯RL78系列MCU出現(xiàn)CONST地址引起flash空間浪費(fèi)的錯(cuò)誤問題
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論