最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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

我理解的44b0的BOOTLOADER

作者:zcw9911 欄目:ARM技術(shù)
請大家多發(fā)言
希望大家都能說說自己的理解,這樣才能互相提高,也能降低我們這些剛?cè)腴T學習難度

2樓: >>參與討論
hainanboy
RE
44B0也可以copy到RAM里運行呀!只要你的中斷向量處跳轉(zhuǎn)到RAM就可以吧

3樓: >>參與討論
qiuyang957
zcw9911真棒
太好了

4樓: >>參與討論
勇敢的心
你看的啟動代碼可能是沒有COPY的
還有另一種有COPY操作的啟動代碼
COPY的時候就需要用到LINKER產(chǎn)生的那些標號
那一段的宏提供給向量模式的中斷使用

5樓: >>參與討論
lynn5302
好帖頂一下
對于COPY那一段有點迷糊。是不是LINKER沒里沒寫RW地址,RW區(qū)就會緊跟RO區(qū)呢?

6樓: >>參與討論
monsterchp
有點不明白?
我看的代碼是COPY到RAM中去運行的!我有點沒明白的是當主程序調(diào)用子程序的時候怎么就知道了現(xiàn)在應(yīng)該是用在RAM中的子程序而不是在FLASH中的。在程序編譯的時候不是已經(jīng)將程序地址都定了嗎?

7樓: >>參與討論
qioujw
我頂!
好貼,我頂頂。

8樓: >>參與討論
hainanboy
re
To monsterchp
ARM的連接器在連接的時候生成的符號,比如說有一個子程序為LOOP,這個LOOP的地址是相對于R0_BASE的,所以你設(shè)置你的R0_BASE為RAM區(qū)是,自然會正確的跑到RAM中LOOP的地址去了,但是前提是你已經(jīng)COPY你的程序到RAM里了!但是還有一點是為什么我在執(zhí)行COPY程序從FLASH到RAM時也用到了一些標號呀,為什么不會跑到RAM里呢?那可能是因為你執(zhí)行的匯編指令的尋址方式不一樣! 

9樓: >>參與討論
monsterchp

to hainanboy
這就是說如果我不把程序從FLASH中考到RAM中來,我的程序就不能在FLASH中運行嗎?找子程序的時候也直接往RAM里面跳?好象不是這樣的吧!

10樓: >>參與討論
zcw9911
我認為
如果 hainanboy 是說的那樣 應(yīng)該不能用 三星公司給的初始化例子,應(yīng)該是自己寫的初始化程序,最主要的是自己寫SCATER文件,不過44B0沒有地址重新映射寄存器,所以能不能實現(xiàn)還要實踐

11樓: >>參與討論
hainanboy
To monsterchp
好象是這樣的哦!比如adr指令他就是相對于FLASH的,ldr指令是相對于R0_BASE的.你可以設(shè)置一下Linker->Listings選中symbols和Image map你就可以看看輸出.看看你的子程序運行時的地址是多少,我也是剛學,望大家多多交流交流

12樓: >>參與討論
hainanboy
RE
44B0沒有Remap,中斷來的時候肯定是要到FLASH里去的,然后再跳轉(zhuǎn)出來的!請各位指教一下,應(yīng)用程序是怎么燒到FLASH里,而不會覆蓋BOOT,是BOOT里提供tftp呢?還是BOOT程序里有把自己COPY到高地址的FLASH里呢? 謝謝

13樓: >>參與討論
qiuyang957
to hainanboy
“adr指令他就是相對于FLASH的,ldr指令是相對于R0_BASE的”

這句話怎么理解呢,能詳細解釋一下嗎?

14樓: >>參與討論
勇敢的心
我的看法
To monsterchp
標號的地址是在連接時確定的,所以直接引用標號不是位置無關(guān)的,但是B/BL指令是位置無關(guān)的,因為它在指令中只包含了一條到目標位置相對于當前位置的偏移量,這樣一來,不管在哪里運行,B/BL是不會跳錯地方的
to hainanboy
ADR偽指令和LDR偽指令是有區(qū)別的,ADR相對于當前PC,而LDR相對于RO,所以,使用ADR將取得一個相對于當前PC的量,而LDR將取得一個常數(shù),因為在連接時就確定了

15樓: >>參與討論
php139
我也在學習這個文件!關(guān)注中
暫時插不上嘴   

但是頂一下 

16樓: >>參與討論
hainanboy
RE
正如勇敢的心所說的!

17樓: >>參與討論
ARM_hunhun
44b0   Bootloader
Dear all,
     The program can run both in FLASH and SRAM. About the interrupt SYSTEM, the ENGINEER can design it according to the need.
     I have designed a 44b0 SYSTEM, the interrupt function code is in FLASH, and POWER on my bootlaoder can loader the code to SRAM and then jump to the SRAM, when the interrupt is active the code can jump to the FLASH vector and then jump to the SRAM to run the function again.  

18樓: >>參與討論
php139
繼續(xù)頂一下
   哈哈!又有新認識。繼續(xù)頂



19樓: >>參與討論
monsterchp
明白了不少,多謝大家!
繼續(xù)頂!

20樓: >>參與討論
hainanboy
re
BOOTLOADER之后應(yīng)該如何跳轉(zhuǎn)到應(yīng)用程序的呢?是不是用fp指針嗎?大家認為用JTAG下載程序是下載到R0_BASE處還是下載到FLASH里的0x000處呢?

21樓: >>參與討論
zcw9911
看的多,討論的少
本來還想寫寫我對SWI中斷和44B0中斷用法的理解

22樓: >>參與討論
cxzeng
不錯,應(yīng)該加酷么?
 
23樓: >>參與討論
snowdance
關(guān)于ADR和LDR的討論及一些疑問
 以如下程序為例:
        AREA Jump,CODE,READONLY
        CODE32

num        EQU 5

        ENTRY
        
start
        MOV r0,#4
        MOV r1,#3
        MOV r2,#2
        MOV r4,#0
        
        CMP r0,#num
        BHS stop
        
        ADR r3,JumpTable
        
        CMP r0,#2
        MOVEQ r4,#0
        LDREQ pc,[r3,r4,LSL#2]
        
        CMPNE r0,#4        
        MOVEQ r4,#1
        LDREQ pc,[r3,r4,LSL#2]
        
        CMPNE r0,#6        
        MOVEQ r4,#2
        LDREQ pc,[r3,r4,LSL#2]
        
        CMPNE r0,#8        
        MOVEQ r4,#3
        LDREQ pc,[r3,r4,LSL#2]
        

DEFAULT
        MOVEQ r0,#0
SWITCHEND
                
stop
        MOV r0,#0x18
        LDR r1,=0x20026
        SWI 0x123456
        
JumpTable
        DCD CASE1
        DCD CASE2
        DCD CASE3
        DCD CASE4
        DCD DEFAULT
        
CASE1
        ADD r0,r1,r2
        B SWITCHEND
        
CASE2
        SUB r0,r1,r2
        B SWITCHEND    
        
CASE3
        ORR r0,r1,r2
        B SWITCHEND            
                        
CASE4
        AND r0,r1,r2
        B SWITCHEND        
        
        END                                

  該程序是用跳轉(zhuǎn)表的方法來進行分支轉(zhuǎn)移,即實現(xiàn)SWITCH功能。程序中用到了ADR和LDR。
  將該程序在ADS下編譯后(RO為默認值0x8000),調(diào)用ADX進行軟件仿真,將其匯編程序調(diào)出來,發(fā)現(xiàn)ADR r3,JumpTable語句被匯編成:
    add      r3,pc,#0x3c ; #0x805c
  該語句對應(yīng)的地址為0x8018,執(zhí)行后r3的值為0x805c,而0x805c正是標號JumpTable的值。
  也就是說,ADR r3,JumpTable就是將JumpTable的值賦給r3,實際進行的計算是:
    r3 = 0x8018 + 8 + 0x3c
    抽象一下是:
    r3 = PC + 本指令地址相對于JumpTable偏移值(這是由編譯器自動計算出來的)
  這里的PC是當前指令+8個字節(jié)。
  至于LDR,該程序中LDR r1,=0x20026,匯編后的指令為:
    ldr      r1,0x00008090 ; = #0x00020026
  而地址0x00008090處的語句為:
    dcd      0x00020026
  這樣就實現(xiàn)了將0x00020026賦給r1的目的。
  像LDR r1,=ADDR1這樣的語句,也是類似處理的。
  可見,ADR與LDR都相當于數(shù)據(jù)傳送指令,只是它們實現(xiàn)的機理不同,而且有其它一些限制,下面是杜春雷那本<<ARM體系結(jié)構(gòu)與編程>>中對兩者的說明:

  ADR
  在匯編編譯器處理程序時,ADR偽指令被編譯器替換成一條合適的指令。通常,編譯器用一條ADD指令或SUB指令來實現(xiàn)該ADR偽指令的功能。如果不能用一條指令來實現(xiàn)ADR偽指令的功能,編譯器將報告錯誤。
  因為ADR偽指令中的地址是基于PC或者基于寄存器的,所以ADR讀取到的地址為位置無關(guān)的地址。當ADR偽指令中的地址是基于PC時,該地址與ADR偽指令必須在同一段代碼段中。

  LDR{cond} register,=[expr|label-expr]
    expr為32位的常量。編譯器將根據(jù)expr的取值情況,如下處理LDR偽指令:
    1、當expr表示的地址值沒有超過MOV或MVN指令中的地址取值范圍時,編譯器用合適的MOV或者MVN指令代替LDR偽指令。
    2、如果超過了,編譯器將該常數(shù)放在數(shù)據(jù)緩沖區(qū)中,同時用一條基于PC的LDR指令讀取該常數(shù)。
  Label-expr為基于PC的地址表達式或者是外部表達式。當Label-expr為基于PC的地址表達式時,編譯器將label-expr表示的數(shù)值放在數(shù)據(jù)緩沖區(qū)中,同時用一條基于PC的LDR指令讀取該數(shù)據(jù)。當Label-expr為外部表達式,或者非當前段的表達式時,匯編編譯器將在目標文件中插入連接重定位偽操作,這樣連接器將在連接時生成該地址。

  但還是存在一些疑問:
    1、什么叫基于PC或者基于寄存器?
    2、勇敢的心兄所說的“ADR相對于當前PC,而LDR相對于RO,所以,使用ADR將取得一個相對于當前PC的量,而LDR將取得一個常數(shù)”這句話在本程序中怎么具體解釋一下?
        3、每本資料都說,映像文件分為這樣的段那樣的段,程序一開始要把代碼從ROM拷到RAM中運行,但是在初始一開始,定義異常向量那一段,即如下代碼處:
  AREA    Init,CODE,READONLY
    ENTRY
ResetEntry
    b ResetHandler                ;for debug
    b HandlerUndef                ;handlerUndef
    b HandlerSWI                ;SWI interrupt handler
    b HandlerPabort            ;handlerPAbort
    b HandlerDabort            ;handlerDAbort
    b .                            ;handlerReserved
    b HandlerIRQ
    b HandlerFIQ

PC值就已經(jīng)是RO的值了,這時還沒有
24樓: >>參與討論
snowdance
RO的意義?
設(shè)置RO為0xc100000,是不是就是將代碼從0x00處搬到0xc100000處開始執(zhí)行?

25樓: >>參與討論
zcw9911
RO的意義?
ro read ONLY 的意思。

26樓: >>參與討論
qiuyang957
re:RO的意義
通過閱讀代碼,我認為具體把哪些代碼復(fù)制到哪個地方不是一定的,我看的代碼只拷貝了拷貝程序以及拷貝程序后邊的代碼到SDRAM的相應(yīng)地址。還可以把RO段全部拷貝到SDRAM

27樓: >>參與討論
勇敢的心
to snowdance
1. 就是和哪里的值進行計算的意思
2. 正如你所分析的,ADR指令在匯編后被編譯為當前PC加上一個偏移量,就是基于PC來進行計算,所以,無論這段程序在什么地方運行,R3中總能得到TABLE的地址,因為這個偏移量是個相對的量,說白了,就是TABLE到當前語句的'距離'是一定的.
   再來看看LDR,看編譯結(jié)果就知道,結(jié)果始終是固定的.
3. 44B0復(fù)位后從0開始運行,就是ROM,PC是0,而不是在AXD中看到的RO,COPY的過程必須由程序來完成,而不是自動就出現(xiàn)在RO了

28樓: >>參與討論
rabsl
頂一下
我不懂怎么把程序從FLASH拷到SDRAM啊,哪些代碼可以完成這項工作的呢?

29樓: >>參與討論
xlfdan
支持zcw9911把SWI中斷和44B0中斷用法貼出來。!
支持zcw9911把SWI中斷和44B0中斷用法貼出來!!

正在雪

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
NAND FLASH和NOR FLASH詳解[收集整理]
這個IP頭的校驗碼好像不對,為什么這么算? ?
幫忙。。。。。
項目合作,請高手優(yōu)化 ffmpeg 軟解碼庫以適應(yīng)S3C2410 320x240
大家有沒有試試在ucos下采集usb攝像頭的數(shù)據(jù)?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號