image$$ro$$limit|等常量的問題
|image$$ro$$limit|是不是指資料段,在flash中的起始位址阿(如果**燒在flash中的話)!
|image$$rw$$base|是不是flash中的資料段的在sdram的執行起始位址阿![!21ki@][@21ki!]
|image$$zi$$base|是不是sdram中0位址區起始阿!
|image$$zi$$limit|是不是sdram中0位址區的結束位址阿 !
如果照我理解的沒有錯的話,下面那段**把flash中的資料段複製到了sdram中的某個位置,[!21ki@][@21ki!]
然後再sdram中初始化了乙個0區域,這個0區域的作用我不是很清楚,猜測是為c程式的變數做準備的,不知對不對!
那麼還有乙個問題,能不能把**段也搬到sdram中執行,這樣**的執行速度不是更快了麼?我看了好幾個版本的啟動**,為什麼大家都不這麼做!謝謝
啟動**裡面有這樣一段:
ldr r0, =|image$$ro$$limit| ;get pointer to rom data[!21ki@][@21ki!]
ldr r1, =|image$$rw$$base| ;and ram copy[!21ki@][@21ki!]
ldr r3, =|image$$zi$$base| [!21ki@][@21ki!] ;zero init base => top of initialised data[!21ki@][@21ki!]
cmp r0, r1 ;check that they are different[!21ki@][@21ki!]
beq %f1 ;若相等則跳轉到1,相同,則不拷貝該區間,初始化零資料區
0
cmp r1, r3 ; 如果r0不等於r1,r1和r3比較,copy init data[!21ki@][@21ki!]
ldrcc r2, [r0], #4 ; --> ldrcc r2, [r0] + add r0, r0, #4 [!21ki@][@21ki!]
strcc r2, [r1], #4 ; --> strcc r2, [r1] + add r1, r1, #4[!21ki@][@21ki!]
bcc %b0 ;當無符號數r1[!21ki@][@21ki!]
1 [!21ki@][@21ki!]
ldr r1, =|image$$zi$$limit| ;top of zero init segment, mov r2, #0 ;r2=0[!21ki@][@21ki!]
2 [!21ki@][@21ki!]
cmp r3, r1 ;比較r3和r1,注意這個時候r1是|image$$zi$$limit|,zero init[!21ki@][@21ki!]
strcc r2, [r3], #4 ;當無符號數r3strcc r2, [r3] + add r3, r3, #4[!21ki@][@21ki!]
bcc %b2 ;當無符號數r3
關於常量指標 指標常量等
在學習c語言中,我們會很頭疼指標這一東西,可以說指標是c語言的靈魂。不懂指標,就相當於c語言不過關。接下來,我將簡要說下指標,重點放在指向指向非常量資料的非常量指標 指向常量資料的非常量指標 指向非常量資料的常量指標 只想常量資料的常量指標。指標 指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶...
《C 》關於指標限定(指標常量 常量指標等)
int const int const const int 常量指標 指向常量的指標 const int const 常量指標常量 只能讀取不能修改。const 修飾的只是限定指標的操作!但不能限定空間上的實體的可改變性。因為 乙個實體可能被不止乙個變數所關聯,所以實體被其他關聯變數的改變是有可能的...
2 注釋 常量 變數 轉移字元 等
2 注釋 常量 變數 轉移字元 等 標籤 空格分隔 未分類 注釋 可以注釋多行,但是不能巢狀注釋 可以巢狀 注釋單行 字串 hello word 這種由雙引號引起來的一串字元稱為字串字面值 string literal 或者簡稱字串。由於一些符號有他們特殊的功能 因此當你想列印出它們本身時需要用反斜...