嵌入式系統(tǒng)開發(fā)過程中常見問題與解決方法
嵌入式系統(tǒng)開發(fā)就是對于除了電腦之外的所有電子設(shè)備上操作系統(tǒng)的開發(fā)。下面是小編為大家搜索整理的關(guān)于嵌入式系統(tǒng)開發(fā)過程中常見問題與解決方法,,歡迎參考學(xué)習(xí),,希望對大家有所幫助!
1. Bootloader如何寫入Flash ?
初學(xué)者一般都會遇到如何將程序?qū)懭胩幚砥鞯膯栴}。對于不同的處理器,,可以采用不同的方法,。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫。對于具有JTAG調(diào)試工具軟件的處理器,,可以使用如下思路:編寫一段程序,,這段程序能將位于SDRAM/SRAM 固定地址中的數(shù)據(jù)寫入Flash中。燒寫時,,首先,,將這段軟件下載到SDRAM 中,然后通過調(diào)試軟件將要寫入Flash的數(shù)據(jù)下載到SDRAM/SRAM的某個固定地址開始的緩沖區(qū),,然后通過調(diào)試器開始執(zhí)行程序,,將數(shù)據(jù)寫入Flash。除此以外,,網(wǎng)絡(luò)上還提供了很多專用的寫Flash的工具,,開發(fā)者可以根據(jù)自己的需要選用。
2.什么是arm-elf-gcc?
arm-elf-gcc是一個交叉C語言編譯器,。我們在PC平臺下編譯程序,,編譯器運行的處理器同生成的代碼將要運行的'處理器相同。但是,,在PC機(jī)上編譯ARM程序時,,編譯器運行的處理器同生成的代碼運行的處理器不同,,這種編譯器叫做交叉編譯器。其中的elf是指編譯器生成的目標(biāo)文件格式,。(其實我們平時用的單片機(jī)編譯器如GCC—AVR等已是交叉編譯器了,,我到現(xiàn)在才弄清楚什么是交叉編譯器)
3.走了哪條編譯路徑?
系統(tǒng)程序和驅(qū)動程序往往包含很多的編譯選項,很多選項都是在編譯時通過命令行定義的,,如果想知道編譯的是那一段程序可以使用如下的方法:
#ifdef PLAT_AAA
#error Code for Platform AAA
#else
#error Code NOT for Platform AAA
#endif
這樣在編譯的時候就知道,,編譯的是哪一條路經(jīng)了。對于支持#pragma message( “I am here”)的編譯器也可使用#pragma message預(yù)編譯指令,。
4.我怎么知道那段代碼在那個文件中?
系統(tǒng)編程中經(jīng)常需要使用在多個文件中搜索字符串,,在windows平臺下可以使用平臺提供的多文件字符串搜索工具。在linux平臺下,,可以使用grep來搜索字符串,。Grep的搜索功能十分強(qiáng)大,支持正則表達(dá)式搜索,,熟練使用grep對于閱讀系統(tǒng)和驅(qū)動程序代碼是很有幫助的,。
5. 系統(tǒng)是從那個文件開始運行的?
對于Windows CE系統(tǒng),一般從WINCE420PLATFORMYourPlatformKERNELHAL目錄的某個匯編文件中,。對于Linux系統(tǒng)版本不同會存在一定差異,,以arm處理器為例,一般會在linux2.4.xarcharmkernel的head-armv.S中,。
6.程序執(zhí)行到了那里?
可以在程序中插入如下代碼來實現(xiàn)
printf( “I am here %s, %d”,__FILE__, __LINE__);
代碼將打出printf語句所在的文件名和行號,。