嵌入式系統無疑是當前熱門和有發展前景的IT應用領域之一,特別是隨著消費家電的智能化,嵌入式更顯重要性,嵌入式系統開發簡單來講就是對電腦之外所有電子設備上的操作系統的開發,嵌入式系統開發的范圍很廣,開發對象也有很多,接下來先簡單了解下嵌入式系統開發流程中常見的幾大問題:
1. Bootloader如何寫入Flash ?
初學者一般都會遇到如何將程序寫入處理器的問題。對于不同的處理器,可以采用不同的方法。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫。對于具有JTAG調試工具軟件的處理器,可以使用如下思路:編寫一段程序,這段程序能將位于SDRAM/SRAM 固定地址中的數據寫入Flash中。
2.什么是arm-elf-gcc?
arm-elf-gcc是一個交叉C語言編譯器。我們在PC平臺下編譯程序,編譯器運行的處理器同生成的代碼將要運行的處理器相同。但是,在PC機上編譯ARM程序時,編譯器運行的處理器同生成的代碼運行的處理器不同,這種編譯器叫做交叉編譯器,其中的elf是指編譯器生成的目標文件格式。
3.走了哪條編譯路徑?
系統程序和驅動程序往往包含很多的編譯選項,很多選項都是在編譯時通過命令行定義的,如果想知道編譯的是那一段程序可以使用如下的方法:
#ifdef PLAT_AAA
#error Code for Platform AAA
#else
#error Code NOT for Platform AAA
#endif
這樣在編譯的時候就知道,編譯的是哪一條路經了。對于支持#pragma message( “I am here”)的編譯器也可使用#pragma message預編譯指令。
4.我怎么知道那段代碼在那個文件中?
系統編程中經常需要使用在多個文件中搜索字符串,在windows平臺下可以使用平臺提供的多文件字符串搜索工具。在linux平臺下,可以使用grep來搜索字符串。Grep的搜索功能十分強大,支持正則表達式搜索,熟練使用grep對于閱讀系統和驅動程序代碼是很有幫助的。
5.系統是從那個文件開始運行的?
對于Windows CE系統,一般從WINCE420\PLATFORM\YourPlatform\KERNEL\HAL目錄的某個匯編文件中。對于Linux系統版本不同會存在一定差異,以arm處理器為例,一般會在linux2.4.x\arch\arm\kernel的head-armv.S中。
6.程序執行到了那里?
可以在程序中插入如下代碼來實現
printf( “I am here %s, %d\n”,__FILE__, __LINE__);
代碼將打出printf語句所在的文件名和行號。
嵌入式開發與桌面開發既有不同,又有非常大的聯系,以上六大嵌入式系統開發流程中常見的問題就簡單介紹這些了,這些常見問題在很多嵌入式工程師在開發過程中都會遇到。