久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12706|回復: 6
打印 上一主題 下一主題
收起左側

ARM單片機開發(fā)經(jīng)驗

[復制鏈接]
跳轉到指定樓層
樓主
ID:1 發(fā)表于 2008-4-30 00:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

前一段時間做了arm的一些開發(fā),主要是編寫了arm的啟動軟件和移植了uCOS-II到arm7。我做事情喜歡深入簡出,及從最簡單,最原理的方面先做一個框架,然后在這個框架里面進行補充。我還是一個很喜歡和別人討論的人,希望有人可以給我提出意見和建議。我的這個心得很初級,都是一些基本的東西。現(xiàn)在拿出來和大家分享,希望在我畢業(yè)之前能給大家留一些紀念。 

由于這些東西發(fā)paper實在是沒有價值,但是我感覺可以作為arm開發(fā)的入門。由于我的水平和經(jīng)驗有限,錯誤也是難免的。但是如果不拿出來和大家分享,就算有錯誤我也發(fā)現(xiàn)不了,是么?呵呵。我現(xiàn)試試發(fā)連載的第一篇,看看有多少價值,如果大家覺得有價值,我會繼續(xù)連載的。  

前言 
這個文檔是我學習ARM編程的總結和心得。閱讀這個文檔的人應當首先閱讀ADS1.2的幫助文檔及相關內容。這個文檔不會對編譯器及連接器做出詳細的說明,在需要的時候會指出具體內容在相關資料的章節(jié)。同時閱讀這個文檔的人需要了解ARM指令集和一些ARM匯編的基本內容以及C和C++的相關編程內容。同時還需要了解ARM的流水線結構及一些基本的編程知識。同時為了方便查閱英文文檔,所有的相關術語都使用英文原文。 

第一章 STARTUP1 ARM的啟動 
一般的嵌入式系統(tǒng)在主程序執(zhí)行之前都需要執(zhí)行一些初始化的過程以創(chuàng)造嵌入式程序運行的環(huán)境,尤其是一些高級的嵌入式系統(tǒng),由于核心芯片使用內存映射、內存保護等機制以及編程使用高級語言C,C++甚至JAVA語言,都需要先創(chuàng)建一個適合程序運行的硬件環(huán)境,然后初始化或者配置或者剪裁run-time library, 這些工作都必須在主程序運行前完成,所以一個startup程序或者程序組對于一個嵌入式系統(tǒng)來說是非常重要的。要編寫startup程序,需要對編譯器、鏈接器和匯編器的細節(jié)有一定的了解,同時對ARM芯片硬件本身的地址分配以及memory mapping機制也需要有一些了解。 

2 ARM 程序的工作過程 
首先由各種source file經(jīng)過編譯產生object文件,然后object文件經(jīng)過鏈接生成Image文件,然后通過ICE的方法,根據(jù)描述文件的指定下載到目標板上的固態(tài)存儲器指定地址當中,比如flash,EEPROM, ROM等等。在程序執(zhí)行之前,根據(jù)某些描述文件,將需要讀寫數(shù)據(jù)的部分讀出放入動態(tài)存儲器比如RAM當中,然后程序從ROM開始執(zhí)行。或者有時為了提高程序的運行速度,也可以將所有的程序(有一些root的部分除外,以后會提及)通過一個描述文件放入指定的RAM當中,然后程序從RAM開始執(zhí)行,但是這樣會耗費大量的動態(tài)存儲器,所以大部分程序會取折中的方法,將需要快速運行的部分和要讀寫的部分放入RAM中(一般讀固態(tài)存儲器的過程和動態(tài)存儲器的過程是一樣的,但是寫就不同了,所以讀寫的部分一定要放到RAM中),而只讀的部分和對速度要求不是那么高的部分放入固態(tài)存儲器。同時ARM結構的異常向量表規(guī)定放在地址為0x00000000開始的地址空間上,而一般的CPU為了提高異常相應速度,會將這個向量段remap到其他的RAM當中,所以在描述文件當中必須精確指定異常向量跳轉程序的地址到remap的地方。在application程序執(zhí)行前,還需要由一些文件描述application程序執(zhí)行的環(huán)境。比如系統(tǒng)工作時鐘,總線頻率。現(xiàn)在一般嵌入式編程語言為C,C++等。如果在使用它們的時候使用的runtime-library,那么在程序執(zhí)行前還需要為這些庫函數(shù)初始化heap。然后ARM可能工作在不同的模式,還需要為不同的工作模式設置stack。這樣,描述鏈接地址的文件,以及在application運行前所有的初始化程序就是startup程序組。 

3 STARTUP分類 
這樣,將startup程序所完成的功能分類。一類是鏈接地址描述,一類是各種初始化的程序。根據(jù)不同的應用,描述文件和初始化程序的內容以及結構和復雜程度都會不同。但是基本上,它們都必須實現(xiàn)以下功能。 

3.1 描述文件實現(xiàn)功能 

描述文件可以是鏈接命令行上簡單的幾個字符,也可以是一個非常復雜的文件,但是它必須完成如下功能: 

; 指定程序下載的地址 

; 指定程序執(zhí)行的地址 

3.2 初始化程序實現(xiàn)的功能 

初始化程序根據(jù)不同的應用,其結構和復雜度也不同,但是它必須完成如下基本功能: 

; 異常向量初始化 

; 內存環(huán)境初始化 

; 其他硬件環(huán)境初始化 

4 描述文件 
要編寫描述文件,必須知道ARM Image文件的組成及ARM Image文件執(zhí)行的機理。 

4.1 ARM Image的結構 

一個ARM Image structure由linker在以下幾個方面定義: 

? 組成它的regions 和 output sections 

? 當Image 下載的時候這些regions 和 sections 在內存中的位置 

? 當Image 執(zhí)行時這些regions和sections在內存中的位置 

4.1.1 ARM Image的組成 

一個ARM Image被保存在可執(zhí)行文件當中,它的層次結構可以包括Image,regions,output sections和input sections。 

? 一個Image由一個或多個regions組成,每個region包括一個或多個output sections 

? 每個output section由一個或多個input sections組成 

? Input sections是一個object file中的code和data信息。 

Image的結構如下圖: 

1 附圖: 

NOTE Input section,output section和region的定義見ADS_LinkerGuide 3-3頁。 

同時Input section 有幾種屬性,分別為readonly,read-write,zero-initialized。分別稱為RO,RW和ZI。屬性來源于AREA后的attr屬性。 

比如CODE是RO,DATA是RW,NOINT默認為ZI,即用0值初始化,但是可以選擇不進行0值初始化。ZI屬性僅僅來源于SPACE, DCB, DCD, DCDU, DCQ, DCQU, DCW, 或者DCWU。由以上定義,ZI屬性的包含于RW屬性,它是有初始值的RW數(shù)據(jù)。又例如在C語言中,代碼為RO,靜態(tài)變量和全局變量是RW,ZI的。 


4.1.2 Image 的Load view 和 execution view 

在下載的時候Image regions被放置在memory map當中,而在執(zhí)行Image前,或許你需要將一些regions放置在它們執(zhí)行時的地址上,并建立起ZI regions。例如,你初始化的RW數(shù)據(jù)需要從它在下載時的在ROM中的地址處移動到執(zhí)行時RAM的地址處,附圖: 


NOTE Load view 和execution view的詳細定義見ADS_LinkerGuide 3-4。 

以上的描述包括二個內容,一是要指定各個section在load view和execution view時的地址即memory map,二是要在執(zhí)行前根據(jù)這些地址進行section的初始化。 

[此貼子已經(jīng)被作者于2008-4-30 0:54:31編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:2006 發(fā)表于 2008-5-4 22:29 | 只看該作者
admin,你怎么把貼放錯地方了
回復

使用道具 舉報

板凳
ID:3271 發(fā)表于 2008-7-15 16:14 | 只看該作者
回復

使用道具 舉報

地板
ID:5532 發(fā)表于 2008-9-24 14:32 | 只看該作者

 

[此貼子已經(jīng)被作者于2008-9-24 14:33:49編輯過]
回復

使用道具 舉報

5#
ID:14381 發(fā)表于 2009-6-17 18:56 | 只看該作者
我是新手,現(xiàn)在想學習AVR
回復

使用道具 舉報

6#
ID:15907 發(fā)表于 2009-8-4 12:57 | 只看該作者

我剛開始學單片機,希望多與大家交流

回復

使用道具 舉報

7#
ID:20969 發(fā)表于 2010-3-30 07:43 | 只看該作者
很好!學ARM入門的好幫手!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品视频在线观看免费播放 | 国内精品久久久久久久 | 午夜视频一区二区 | 精品国产一级 | 久久99视频精品 | 综合久久99| 久久手机在线视频 | www.中文字幕.com| 日本成人中文字幕在线观看 | 中文字幕国产 | 黄色片在线网站 | caoporn免费 | 二区三区在线观看 | 中文在线一区二区 | 天天操网| 国产探花在线精品一区二区 | 天天爱天天操 | 亚洲视屏 | 精品日韩一区 | 久久99精品久久久久久 | 精品久久久久久 | 精品二区 | 九九伊人sl水蜜桃色推荐 | 国产免费拔擦拔擦8x高清 | 久久精品国产亚洲一区二区三区 | 国产麻豆乱码精品一区二区三区 | 精品国产1区2区3区 一区二区手机在线 | 爱爱视频日本 | 久久三区 | 亚洲 一区 | 欧美一级片 | 福利一区二区 | 久草福利 | 国产精品一区二区三区久久久 | 看片国产 | 亚洲一区二区三区视频免费观看 | 久久精品一区二区三区四区 | 亚洲精品一级 | 中文字幕在线观看日韩 | 91不卡| 国产一级一级国产 |