新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 簡單的啟動(dòng)代碼(Startup.s)分析

簡單的啟動(dòng)代碼(Startup.s)分析

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
以下啟動(dòng)代碼是從《ARM嵌入式系統(tǒng)實(shí)驗(yàn)教程(一)》中提取出來的。

 1;啟動(dòng)文件,初始化C程序的運(yùn)行環(huán)境,然后進(jìn)入C程序代碼。
2
3IMPORT|Image$$RO$$Limit|
4IMPORT|Image$$RW$$Base|
5IMPORT|Image$$ZI$$Base|
6IMPORT|Image$$ZI$$Limit|
7
8IMPORTMain;聲明C程序中的Main()函數(shù)
9
10AREA Start,CODE,READONLY;聲明代碼段Start
11ENTRY;標(biāo)識(shí)程序入口
12 CODE32;聲明32位ARM指令
13
14Reset LDRSP,=0x40003F00;設(shè)置堆棧
15
16;初始化C程序的運(yùn)行環(huán)境
17 LDRR0,=|Image$$RO$$Limit|
18LDRR1,=|Image$$RW$$Base|
19LDRR3,=|Image$$ZI$$Base|
20
21CMPR0,R1
22BEQ LOOP1
23LOOP0 CMPR1,R3
24LDRCC R2,[R0],#4
25STRCC R2,[R1],#4
26BCCLOOP0
27
28LOOP1 LDRR1,=|Image$$ZI$$Limit|
29MOVR2,#0
30LOOP2 CMPR3,R1
31STRCC R2,[R3],#4
32BCCLOOP2
33
34B Main;跳轉(zhuǎn)到C程序代碼Main()函數(shù)
35
36END

本文引用地址:http://m.butianyuan.cn/article/201611/321098.htm從ADS1.2的幫助文檔可以看出以下幾個(gè)symbol的定義應(yīng)該是:
|Image$$RO$$Base|
表示RO輸出段運(yùn)行時(shí)起始地址,也可以說是程序代碼存放的起始地址,由-ro-base這個(gè)參數(shù)指定;
|Image$$RO$$Limit|
表示RO輸出 段運(yùn)行時(shí)存儲(chǔ)區(qū)域界限,其值可通過|Image$$RO$$Base|+Codesizes+RO Data sizes+4計(jì)算得出;
|Image$$RW$$Base|
表示RW輸出段運(yùn)行時(shí)起始地址,記得是運(yùn)行時(shí)的地址,而不一定是加載時(shí)的存放地址,因?yàn)镽W輸出段在加載時(shí)可能是在ROM中并緊跟著RO輸出段存放的,當(dāng)程序運(yùn)行時(shí)才移動(dòng)(在有些書中說是移動(dòng),個(gè)人覺得應(yīng)該只是復(fù)制,希望大家能幫我解釋一下,謝謝!) 到RAM起始地址為|Image$$RW$$Base|的區(qū)域,由-rw-base這個(gè)參數(shù)指定;未指定的話,默認(rèn)緊跟RO輸 出段,那么|Image$$RW$$Base|=|Image$$RO$$Limit|;
|Image$$RW$$Limit|
表示RW輸出 段運(yùn)行時(shí)存儲(chǔ)區(qū)域界限,其值可通過|Image$$RW$$Base|+RW Data sizes+4計(jì)算得出;
|Image$$ZI$$Base|
表示ZI輸出段運(yùn)行時(shí)起始地址,它是運(yùn)行時(shí)在RAM中生成的,緊跟著RW輸出段存放,其 值和|Image$$RW$$Limit| 一樣;
|Image$$ZI$$Limit|
表示ZI輸出 段運(yùn)行時(shí)存儲(chǔ)區(qū)域界限,其值可通過|Image$$ZI$$Base|+ZI Data sizes+4計(jì)算得出。


關(guān)鍵詞: 啟動(dòng)代碼Startup

評論


技術(shù)專區(qū)

關(guān)閉