當前位置:學者齋 >

計算機 >計算機四級 >

嵌入式系統開發過程中常見問題與解決方法

嵌入式系統開發過程中常見問題與解決方法

嵌入式系統開發就是對於除了電腦之外的所有電子裝置上作業系統的開發。下面是本站小編為大家搜尋整理的關於嵌入式系統開發過程中常見問題與解決方法,歡迎參考學習,希望對大家有所幫助!想了解更多相關資訊請持續關注我們應屆畢業生考試網!

嵌入式系統開發過程中常見問題與解決方法

  1. Bootloader如何寫入Flash ?

初學者一般都會遇到如何將程式寫入處理器的問題。對於不同的處理器,可以採用不同的方法。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫。對於具有JTAG除錯工具軟體的處理器,可以使用如下思路:編寫一段程式,這段程式能將位於SDRAM/SRAM 固定地址中的資料寫入Flash中。燒寫時,首先,將這段軟體下載到SDRAM 中,然後通過除錯軟體將要寫入Flash的資料下載到SDRAM/SRAM的某個固定地址開始的緩衝區,然後通過偵錯程式開始執行程式,將資料寫入Flash。除此以外,網路上還提供了很多專用的寫Flash的工具,開發者可以根據自己的需要選用。(現在明白了我在學的那個BF533為什麼先下個先了)

  2.什麼是arm-elf-gcc?

arm-elf-gcc是一個交叉C語言編譯器。我們在PC平臺下編譯程式,編譯器執行的處理器同生成的程式碼將要執行的'處理器相同。但是,在PC機上編譯ARM程式時,編譯器執行的處理器同生成的程式碼執行的處理器不同,這種編譯器叫做交叉編譯器。其中的elf是指編譯器生成的目標檔案格式。(其實我們平時用的微控制器編譯器如GCC—AVR等已是交叉編譯器了,我到現在才弄清楚什麼是交叉編譯器)

  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系統,一般從WINCE420PLATFORMYourPlatformKERNELHAL目錄的某個彙編檔案中。對於Linux系統版本不同會存在一定差異,以arm處理器為例,一般會在linux2.4.xarcharmkernel的head-armv.S中。

  6.程式執行到了那裡?

可以在程式中插入如下程式碼來實現

printf( “I am here %s, %dn”,__FILE__, __LINE__);

程式碼將打出printf語句所在的檔名和行號。

  推薦書目

Jean osse MicroC/OS-II The Real-Time Kernel,Second Edition這本書是筆者接觸嵌入式實時系統的入門書,在國內能夠買到中文版。這本書較為清楚地講述了實時系統的概念,各個組成部分的工作原理,特別是公開了實時系統核心的原始碼,仔細研究定會受益匪淺。有個小的提示,對於初學者,這本書可以先不看第一章,直接從第二章看起。

Abraham Silberschatz, Peter Baer Galvin,Greg Gagne Operating System Concepts筆者在教學過程中發現,無論是計算機還是電子工程專業都有很多學生對於作業系統的基本概念都沒有搞清,很少有學生有完整的系統程式設計經驗。Operating System Concepts這本書對作業系統的概念講述只能用經典來形容。對於嵌入式系統有興趣深入研究的同學,首先要把基礎打好,這本書就成了必讀之物了。

Andrew S. Tanenbaum Computer Networks 提起Andrew S. Tanenbaum 學習計算機的同學一定都知道OPERATINGSYSTEMs:Design and Implementation這本書,筆者對於Tanenbaum這樣的教授由衷佩服。網路協議棧是嵌入式系統中的支柱性組成部分。願意致力於網路深層技術研究的同學,這本書將為你們建立一個堅實的網路基礎。

Karim Yaghmour Building Embedded Linux Systems本書詳盡的介紹了嵌入式linux系統的組成,基本概念和如何去建立各個部分。全書篇幅較小,可謂短小精悍。即可以作為嵌入式linux系統的入門讀物,又是開發過程各個部分的指南。

Advanced RISC Machines Ltd (ARM) ARM7 TDMI Data Sheet Advanced RISC Machines Ltd (ARM) ARM920T Technical Reference Manual學習嵌入式系統不瞭解當前應用最廣泛的嵌入式處理器怎麼行? ARM7 TDMI 的 data sheet是學習ARM程式設計模型,指令集的好東西。在嵌入式系統中,MMU(記憶體管理單元)是很重要的部分,又是較難理解和掌握的部分。ARM920T Technical Reference Manual 正好可以幫你講解這方面的內容。

Perter Van Der LinDen Expert C Programming嵌入式系統級程式設計最常用的語言還是C 。很多同學都自認為自己的C語言學的很好,那好,就看看這本書吧,找找自己和Experts差距。

嵌入式開發與桌面開發既有不同,又有非常大的聯絡,而且十分注重實際操作能力。搞桌面開發的人在一開始接觸嵌入式的時候,通常轉換不過來,這主要體現在定位上。如文中所說,你是誰,你要做什麼?我對硬體的瞭解僅限於程式設計領域,PCB設計一竅不通,但並不能說你不懂硬體就不能從事嵌入式開發。一個系統的開發設計方方面面,在自己感興趣和熟悉的領域做出自己的貢獻才是最主要的。

(1)硬體設計: 需要有硬體設計的經驗,對各種嵌入式器件有很好的瞭解。

(2)系統移植:需要彙編經驗,作業系統原理以及底層驅動的瞭解

(3)應用程式:需要桌面程式設計經驗

  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/siji/5zp9km.html