q1.在make brew 應用的時候提示Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec r
egion ER_ZI.
Error: L6248E: libspace.o(.text) in PI region 'ER_RO' cannot have address type r
elocation to __libspace_start in PI region 'ER_ZI'.
Finished: 0 information, 0 warning and 2 error messages.
NMAKE : fatal error U1077: 'C:/ARM/ADSv1_2/bin/armlink' : return code '0x1'
Stop.
a1:在網絡上搜索到的回答一般是:檢查所有的C++類,是否都重載了new,delete運算符,在模擬器上不會出錯,但ARM編譯會報如上錯誤。檢查是否有double類型的算術或比較運算,目前BREW是不支持浮點運算的,所有運算必須使用有關助手函數,比如FMUL,FDIV等。但我這里實際遇到的情況是,我給app的主結構體分配了一個指針,然后在函數中對這個指針進行malloc,導致了上面的提示,將該指針換成非指針類型,則該錯誤提示消失。
--今天又進一步debug,發現在代碼里,malloc,free,atoi,這幾個函數要用大寫的命名才行,不然也會出現上面的錯誤,也就是要用MALLOC,FREE,ATOI,置換了函數后,便暫時沒出現那些問題了
q2.在make brew 應用的時候提示
Error: L6265E: Non-RWPI Section CCommon.o(.bss) cannot be assigned to PI Exec region ER_ZI.
a2:這主要是由于在app中使用了全局變量導致的提示,將app中的全局變量移除后,錯誤提示消失,但是這是一種很不方便的處理方式,網絡上有一種處理方式,似乎可以不用移除變量也可以編譯通過,但我還未進行過試驗,這里先做一個紀錄。
解決方案:
1、下載elf2mod.exe (本人的資源里有免費下載,http://d.download.csdn.net/down/2244832/miyunhong)
2、將elf2mod 安裝到了 /ARM/ADSv1_2 目錄下,本人的安裝目錄是 C:/ARM/ADSv1_2
3、一般需要將mak文件做 以下內容修改:(1).將 HEXTOOL = $(ARMBIN)/fromelf # ARM ADS utility to create hex file from image 替換成:HEXTOOL = $(ARMBIN)/elf2mod # ARM ADS utility to create hex file from image (2).將 CPU = -cpu ARM7TDMI # ARM7TDMI target PRocessor 替換成:CPU = -cpu ARM926EJ-S # ARM9TDMI target processor
(3).將 LFLAGS = $(ROPILINK) -rwpi -entry 0x8000# 替換成:LFLAGS = -split -reloc -entry AEEMod_Load
q3.