<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 總有一款合適你--ARM下裸機開發(fā)環(huán)境大全

          總有一款合適你--ARM下裸機開發(fā)環(huán)境大全

          作者: 時間:2016-12-02 來源:網(wǎng)絡 收藏
          一.什么是裸機開發(fā)

          裸機是一種通俗的講法,就是指ARM設備上沒有任何現(xiàn)成的程序來支持你的開發(fā)的軟件運行。它是相對設備上有在操作系統(tǒng)的情況運行可執(zhí)行程序而言的。

          這兩種程序有很大區(qū)別。在操作系統(tǒng)環(huán)境下,基本上跟桌面程序開發(fā)沒有太多區(qū)別,而裸機程序需要自己初始化硬件環(huán)境來運行。因為必須有一小段匯編寫的引導代碼來初始化,并且直接操作硬件。

          裸機程序一般采用少量匯編加C語言來編譯(理論上C++可以了,但比較少)主要用來ARM匯編,硬件控制教學。硬件驗證和驅動開發(fā)。

          大型的程序bootloader,實時操作系統(tǒng)uCOS/Nclues嚴格講也是裸機程序。

          而且ARM的CPU的都有JTAG的在線硬件調試接口,通過JTAG硬件調試器,可以直接運行和單步調試裸機程序

          二.裸機開發(fā)流程.

          編碼-->編譯-->調試-->下載

          1.編碼采用文本編輯器或相應IDE均可

          2.編譯器目前主要是兩大類

          armcc (ARM出品的編譯器)

          arm-linux-gcc (GNU ARM-Linux編譯器,在非EABI的編譯器還分為arm-elf-gcc和arm-linux-gcc的區(qū)別現(xiàn)在基本不分了。)

          arm-linux-gcc 編譯出來的可執(zhí)行文件格式是ELF,除了常見的TEXT段,BSS/DATA段外,還有會有一些調試段..而armcc編譯出來的格式是AXF。但AXF本質是仍然是ELF格式,只不過加一些特殊的調試段。

          3.調試方法

          如果用JTAG在線硬件調試的那種單步調試.有兩種接口。一種是ARM公司的RDI接口,另外一種硬件調試器虛擬的gdb接口。這個要使用ELF/或AXF格式

          但很多程序會用直接讓程序輸出信息到串口方式進行調試。這種速度比較快,可以理解是廣義上的調試。這個階段要使用BIN格式。

          4.下載

          下載是指把可執(zhí)行的BIN文件下載到開發(fā)板上的Flash之中。讓其完全脫離調試環(huán)境完全獨立運行。

          如果一個空板,即Flash中沒有任何程序。這時需要一些特殊下載方式。比用JTAG燒錄工具下載到Flash之中。有一些CPU還有一些特殊的下載方式。比如S3C6410支持SD卡啟動??梢园严螺d的文件放在SD卡上,由SD卡里的BOOTLOADER來下載。

          還有一些CPU內部帶有ROM自行啟動一個小程序,然后通過USB下載程序。比如JZ4740。

          如果Flash上燒錄有bootloader,它往往自帶有燒錄功能。 可以通過TFTP/USB/串口方式從PC機下載到設備上。

          可執(zhí)行文件格式

          Elf

          Linux下標準可執(zhí)行結構.還有一種out是早期的較為簡單的可執(zhí)行文件格式。但是在新版本里out就是ELF格式。

          BIN

          bin文件是由ELF轉化而來,專門用下載到設備。相對于ELF它有兩個變化。第一BIN只有基本的text/bss/data段,沒有調試信息。第二。因為bin要下載到設備的。里面各段的地址是按相應地址對齊燒錄的。因為兩段之間很可能補一些空間的0空間。

          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();