| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
關(guān)于44Binit.s中的程序復(fù)制代碼的不解 | 
  
| 作者:劍下亡魂 欄目:ARM技術(shù) | 
;**************************************************** ;拷貝并粘貼 RW data/zero initialized data * ;**************************************************** adr r0, ResetEntry ldr r1, BaseOfROM cmp r0, r1 ldreq r0, TopOfROM beq InitRamData ;**************************************************** ;計算拷貝程序在FLASH中的實際位置 * ;**************************************************** ldr r2, =CopyProcBeg sub r1, r2, r1 add r0, r0, r1 ldr r3, =CopyProcEnd ;**************************************************** ;將拷貝程序復(fù)制到ram中 * ;**************************************************** 0 ldmia r0!, {r4-r7} stmia r2!, {r4-r7} cmp r2, r3 bcc %B0 ;******************************************************** ;開始用ram中的拷貝程序復(fù)本將所有剩下的代碼復(fù)制到ram中 * ;******************************************************** ldr r3, TopOfROM ldr pc, =CopyProcBeg ;******************************************************** ;本段將代碼由實際燒入的地址拷貝到ro-base所指定的位置 * ;只拷貝CopyProcEnd以后的代碼 * ;******************************************************** CopyProcBeg 0 ldmia r0!, {r4-r11} stmia r2!, {r4-r11} cmp r2, r3 bcc %B0 CopyProcEnd sub r1, r2, r3 sub r0, r0, r1 InitRamData ldr r2, BaseOfBSS ldr r3, BaseOfZero 0 cmp r2, r3 ldrcc r1, [r0], #4 strcc r1, [r2], #4 bcc %B0 mov r0, #0 ldr r3, EndOfBSS 1 cmp r2, r3 strcc r0, [r2], #4 bcc %B1  | 
  
| 2樓: | >>參與討論 | 
| 作者: 劍下亡魂 于 2006/3/9 17:53:00 發(fā)布:
         ro=0x0c008000, rw=NC 下載到FLASH后運行 adr r0, ResetEntry ldr r1, BaseOfROM r0的值是多少?0還是ro_base? adr r0, ResetEntry 與 ldr r0, =ResetEntry 有啥區(qū)別? ldr r2, =CopyProcBeg r2的值又是多少?offset還是ro_base+offset  | 
  |
| 3樓: | >>參與討論 | 
| 作者: 劍下亡魂 于 2006/3/9 17:56:00 發(fā)布:
         還有 sub r1, r2, r3 sub r0, r0, r1 在程序復(fù)制完成后的這兩條指令有什么用? r2-r3不是等于0的嗎?  | 
  |
| 4樓: | >>參與討論 | 
| 作者: 劍下亡魂 于 2006/3/9 18:00:00 發(fā)布:
         ldr pc, =CopyProcBeg 由程序看是把PC值置為ro_base+標志CopyProcBeg的偏移量 也就是說=CopyProcBeg的值就是ro_base+標志CopyProcBeg的偏移量  | 
  |
| 5樓: | >>參與討論 | 
| 作者: eqtwo 于 2006/3/10 19:40:00 發(fā)布:
         幫你頂  | 
  |
| 6樓: | >>參與討論 | 
| 作者: 劍下亡魂 于 2006/3/10 23:41:00 發(fā)布:
         現(xiàn)在只有這點不明白 sub r1, r2, r3 sub r0, r0, r1 在程序復(fù)制完成后的這兩條指令有什么用? r2-r3不是等于0的嗎? 偶想不出在什么情況下,R2、R3的值會不相等? 還是在考慮了在THUMB狀態(tài)下可能會不等的情況?  | 
  |
| 7樓: | >>參與討論 | 
| 作者: 劍下亡魂 于 2006/3/13 10:42:00 發(fā)布:
         DX們請幫忙解釋一下啊。 sub r1, r2, r3 sub r0, r0, r1 這兩句具體有什么用處??  | 
  |
| 8樓: | >>參與討論 | 
| 作者: EQTWO 于 2006/3/13 16:11:00 發(fā)布:
         在幫你頂下  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |