日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]先說明一下在加電之前的這個軟硬件情況,這個三星公司根據(jù)ARM920T軟核生產(chǎn)的這個s3c2410集成了64M的sdram和64M的nandflash存儲器。Vivi和UCOS都存儲在這個nandflash中,因為nandflash斷電后不會丟失信息。這個VIVI是

先說明一下在加電之前的這個軟硬件情況,這個三星公司根據(jù)ARM920T軟核生產(chǎn)的這個s3c2410集成了64M的sdram和64M的nandflash存儲器。Vivi和UCOS都存儲在這個nandflash中,因為nandflash斷電后不會丟失信息。這個VIVI是三星公公司為ARM系列芯片書寫的bootloader,用于開發(fā)階段,做系統(tǒng)的引導程序。

VIVI存放在flash 0x00000000地址開始的地方,UCOS存放在flash 0x03f30000地址開始的地方。ARM920T開機從flash啟動,啟動時把flash前4K (即vivi的前4K)COPY到SDRAM(這種啟動方式是利用Nandflash啟動,COPY前4K到sdram中是硬件自動實現(xiàn)的),vivi的前4K 代碼中有用于COPY剩余VIVI的代碼。執(zhí)行完這些代碼之后,VIVI就控制了FLASH的讀取,串口的控制以及用戶shell接口,當然它還有其他一些功能。當用戶執(zhí)行bootucos命令時,VIVI會把ucos相關(guān)代碼從flash 0x03f30000 COPY到SDRAM0x30008000的地方。當然也可以設(shè)置VIVI自動引導ucos執(zhí)行。當代碼copy完畢后,vivi會把PC值改成0x30008000去執(zhí)行。

我們先說一下為什么我們非要說具體的那個地址那,咱們前面說了,編譯好的程序有一個load地址,一個真正運行的地址,0x30008000這個地址就是咱們說的程序的裝載地址,這個地址是我們用編譯器指定的地址,也就是通過在ads工程里后綴名是scf的文件配置的。在這個文件里我們配置了程序的裝載地址和程序運行的地址,我們?yōu)槭裁匆付ㄟ@兩個地址那?我們整個工程的程序是最后鏈接時一次性固定的絕對地址,也就是說最終鏈接出來的程序地址和真正運行的地址是一致的。只不過我們一般不會把這些代碼直接放到相應的部位去罷了,其中一個原因就是,我們?yōu)榱嗽诓患与姇r保存程序會把程序放到非易失的存儲設(shè)備里去,而我們運行時會把程序copy到運行速度比較快的sdram中去。也就是說,本來這些靜態(tài)鏈接的程序的執(zhí)行地址都是固定的了,我們要在這些程序運行之前要把這些程序放對位置。我們必須知道我們的程序裝載到什么地址和真正在什么地址運行。這樣我們才能知道那些裝載地址和運行地址不一樣的程序段應該怎么搬運。至于搬運的工作,你可以自己手工實現(xiàn),也可以用ADS提供的庫函數(shù)實現(xiàn)。

跳轉(zhuǎn)到這個0x30008000去執(zhí)行這個地址處的指令,我們這個工程編譯出來后誰是第一條指令那?我們平時寫的程序都是從main()函數(shù)開始執(zhí)行,但我們這個嵌入式的開發(fā)可不是哦,在分析完啟動代碼后你就知道了,在執(zhí)行的所謂的main()函數(shù)之前要做很多工作的。

arm映像文件的入口點有兩種類型:一種是映像文件運行時的入口點,稱為初始入口點(initial entry point),另一種是普通入口點(entry point).
初始入口點是映像文件運行時的入口點,每個映像文件只有一個唯一的初始入口點,它保存在ELF頭文件中。假如映像文件是被操作系統(tǒng)加載的,操作系統(tǒng)是通過跳轉(zhuǎn)到該初始入口點處來加載該映像文件。
普通的入口點是在匯編中用ENTRY偽操作定義。他通常用于標志該段代碼是通過異常中斷處理程序進入的。這樣連接器刪除無用的段時不會將該段代碼刪除。一個映像文件中可以定義多個普通入口點。
應該注重的是,初始入口點可以使普通入口點,但也可以不是普通入口點.

初始入口點必須滿足下面兩個條件:
1.初始入口點必須位于映像文件的運行時域內(nèi)。
1.1飽含初始入口點的運行時域不能被覆蓋,他的加載地址和運行地址必須是相同的。
可以使用連接選項-entry address來指定映像文件的初始入口點。這時,address指定了映像文件的初始入口點的地址值。對于地址0x0處為rom的嵌入式應用系統(tǒng),可以使用-entry 0x0來指定映像文件的初始入口點。這樣當系統(tǒng)復位后,自動跳轉(zhuǎn)到該入口開始執(zhí)行。假如映像文件是被一個加載器加載的,該映像文件該映像文件必須包含一個初始化入口點。這種映像文件通常還包含了其他普通入口點,這些普通入口點一般為異常中斷處理程序的入口地址。
當用戶沒有指定-entry address時,連接器根據(jù)下面的規(guī)則決定映像文件的初始入口點。
假如輸入的目標文件中只有一個普通入口點,該普通入口點被連接器當成映像文件的初始入口點。
假如輸入的目標文件中沒有一個普通入口點,或者其中的普通入口點多于一個,則連接器生成的映像文。

我們編譯好的可執(zhí)行文件時去除了頭格式的映像文件,我們講的本來就是操作系統(tǒng),所以這個程序不是通過初始入口點執(zhí)行的第一條指令,應該是通過普通入口點來執(zhí)行的,通常是中斷向量表。也就是程序中用偽指令entry指定的指令段的第一條指令。我們用ADS1.2打開ucos的學習資料的工程中的第十個實驗(ucos系統(tǒng)移植實驗)。在startup文件夾中有一個startup.s 的匯編程序,這個就是ucos的啟動代碼了。由ENTRY偽指令指定的第一條指令是b ColdReset,所以第一條指令就是它了。

咱先不管這個第一條指令的問題,我的目的是把我學習的UCOS講述給你聽,但這需要一定的講述規(guī)范,希望我說的你能聽懂,愿意看下去,我想這樣做:

先從整體描述一下整個過程,然后在分階段概括這一階段整個硬件和軟件系統(tǒng)干了什么?為什么會有這些順序?為什么要這么干?在這個過程中可能思維隨即發(fā)散到任何有關(guān)系的知識點。最后我將逐一分析源代碼,在分析源代碼時遇到的問題,都將解決,當然包括那些精華和美。還可能闡述一下我的理解和方法,以及我對學習的一些認識。我是想按照一定的規(guī)范去寫這個東東,但是我又不想完全按照一種思路去寫,畢竟我是隨意書寫的。我的整體思路就是針對硬件和軟件在整個時間流里都干了什么?為什么要這么干為主要線路。在這個線路中涉及到的所有疑問和知識點都將一一展開闡述。我盡量做到自然,而不是強加給你一些生硬的概念,因為人不喜歡被。被學習,被干活,被記憶。

理解UCOS最好的方式是閱讀其源代碼,一本很好的參考書是嵌入式實時操作系統(tǒng)ucos-ii,邵貝貝譯

聲明:在寫這個文檔時,我還有很多地方?jīng)]有真正弄明白,所以有些地方可能我也說不清楚,但我會把我的疑問寫出來,我什么時候想明白了,我會把它寫出來,如果你知道請你告訴我,我會很高興的。

在說明一下現(xiàn)在的情況:現(xiàn)在ucos的所有代碼(包括啟動的bootloader)都被vivi copy到0x30008000的內(nèi)存地址開始的地方了,然后PC值改為0x30008000,取出這個地址放的arm指令就開始執(zhí)行這條指令了。前面已經(jīng)分析完整個工程編譯出來的可執(zhí)行程序的第一條指令了。

好了,下面開始說整個班子以及UCOS的整體啟動過程,只是大概的說明流程,至于會為什么這樣的問題等到具體詳解的時候在具體解釋。

硬件初始化,主要是讓硬件平臺處于一個可知的狀態(tài),重要的一點就是初始化C語言運行環(huán)境。

UCOS初始化

UCOS運行并執(zhí)行應用程序

哎 ,這樣看的話,整個過程還真挺簡單的,哈。

下面具體講解硬件初始化階段,這個就真的比較麻煩了,但沒關(guān)系,咱們慢慢說。

從具體代碼上看,它主要干了這些活:

關(guān)閉看門狗,(一個用于開發(fā)階段的硬件,到代碼講解時具體說明)

屏蔽中斷掩碼寄存器(現(xiàn)在整個硬件平臺的控制權(quán)都在UCOS,在初始化的時候,我們不希望被打擾,具體原因我們以后說)

初始化各個模式堆??臻g(堆棧空間很重要哦)

COPY中斷向量表(關(guān)于為什么要copy,我們在后面說)

初始化c庫環(huán)境

然后跳轉(zhuǎn)到主應用程序(即我們平時說的main()函數(shù))

下面這些代碼是用匯編寫的代碼,其中分號后面的是注釋。

下面就以具體代碼為例,詳細講解啟動代碼。

每個代碼塊做一個說明,對于特別重要的代碼,我在代碼后面做詳細注釋。注釋寫在//后面,如果此處有很重要知識點的話,單獨起一段進行說明。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;

;;; Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.

;;;

;;; Startup Code for

;;; S3C2410 : Startup.s

;;;; by threewater 2005.2.22

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

GET 2410addr.s //引入2410addr.s文件里的內(nèi)容,作用像是c語言里的#include一樣。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Some ARM920 CPSR bit discriptions

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Pre-defined constants

USERMODE EQU 0x10

FIQMODE EQU 0x11

IRQMODE EQU 0x12

SVCMODE EQU 0x13

ABORTMODE EQU 0x17

UNDEFMODE EQU 0x1b

MODEMASK EQU 0x1f

NOINT EQU 0xc0

I_Bit * 0x80

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在C語言的世界里,main函數(shù)扮演著無比重要的角色,它是每個C程序的起點和終點。每當一個C程序被編譯并運行時,main函數(shù)都是第一個被執(zhí)行的函數(shù)。理解main函數(shù)的原理,對于深入學習C語言乃至整個計算機科學的底層機制都至...

關(guān)鍵字: C語言 main函數(shù)

程序員入門進階 我 們在剛寫程序的時候,第一個都是 hello world。

關(guān)鍵字: C語言 main函數(shù)

最近項目開發(fā)需要用到ucos,之前有聽說過,但沒用過,之前一直從事的與Linux相關(guān)的開發(fā)工作,基于應用的學習,所以本文偏向于應用的認知,只具備以下的認知即可進行開發(fā)啦,OS,其實都差不多。 ? ?本文只是個人學習uco...

關(guān)鍵字: ucos

  引言   汽車的普及為人們的生活帶來了方便,同時也給人們提出了一大難題——汽車防盜。本設(shè)計是為了解決以往汽車防盜產(chǎn)品的缺點和不足而開發(fā)的集成傳感、報警和遠程圖

關(guān)鍵字: 數(shù)據(jù)采集 操作系統(tǒng) s3c2410 汽車防盜系統(tǒng)

  引言   巡航控制系統(tǒng)(CCS)是20世紀60年代發(fā)展起來的,又稱為恒速行駛系統(tǒng)。巡航控制系統(tǒng)工作時,ECU根據(jù)各種傳感器輸送來的信號判斷汽車的運行狀況,通過執(zhí)行元件自動調(diào)節(jié)節(jié)氣門的

關(guān)鍵字: ARM 三星 Linux ecu s3c2410 電子控制系統(tǒng)

  在過去一百年里(l906-2005),全球地表平均溫度升高了0.74攝氏度,未來20年,每十年全球溫度將會升高0.2攝氏度。氣候變暖已成為不容忽視的、直接影響全球生產(chǎn)和生活問題。  

關(guān)鍵字: can總線 s3c2410

  在此設(shè)計的基于 GPRS 的遠程安防監(jiān)控系統(tǒng),是采用的是攝像機傳送視頻信號經(jīng)壓縮編碼后,通過內(nèi)部總線傳送到內(nèi)置的 Web 服務器。用戶在監(jiān)控端可以直接通過瀏覽器觀看 Web服務器上的攝像機視

關(guān)鍵字: GPRS s3c2410 安防監(jiān)控

C語言標準在一開始(C90標準 5.1.2條),就規(guī)定了程序的執(zhí)行環(huán)境。對于沒有操作系統(tǒng)的環(huán)境來說,C程序的入口函數(shù)是什么都可以(也就是說的在單片機的C程序里,或者在操作系統(tǒng)的底層代碼的C入口處,不需要是main函數(shù))。

關(guān)鍵字: C語言 main函數(shù) 基礎(chǔ)教程 基礎(chǔ)知識

網(wǎng)上介紹LINUX下的一般驅(qū)動程序開發(fā)示例浩如煙海,或是因為簡單,關(guān)于DMA驅(qū)動的介紹卻寥寥無幾;近期zhaoyang因工作需要,花了幾日時間開發(fā)了某設(shè)備在S3C2410處理器Linux下DMA通信的驅(qū)動程序,有感于剛接...

關(guān)鍵字: Linux s3c2410 dma驅(qū)動

1引言目前 , 在嵌入式系統(tǒng)里基于ARM核的嵌入式處理器已經(jīng)成為市場主流。隨著ARM技術(shù)的廣泛應用 , 建立面向ARM構(gòu)架的嵌入式操作系統(tǒng)也就成為當前研究的熱點。S3C2410是SAMSUNG公司基于ARM920T處理器...

關(guān)鍵字: s3c2410 移植 標準linux
關(guān)閉