音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(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

ADS中文教程中例程的一點疑惑

作者:zbp_uestc 欄目:ARM技術(shù)
ADS中文教程中例程的一點疑惑
看了ADS中文教程過后,里邊有一段例程我照著寫了一次,編譯,連接都通過了過后我用AXD軟件仿真,在反匯編跟蹤發(fā)現(xiàn)居然程序來就是從main開始執(zhí)行,匯編的一小段背忽略了???
具體代碼如下:

文件Init.s
    IMPORT    main;
    AREA    Init,CODE,READONLY;
ENTRY
    LDR        R0,=0x3ff0000;
    LDR        R1,=0xe7ffff80;
    STR        R1,[R0];
    LDR        SP,=0x3fe1000;
    BL        main;
    B        .
    END

文件main.c
#define    IOPMOD    (*(volatile unsigned *)0x03ff5000)
#define    IOPDATA    (*(volatile unsigned *)0x03ff5008)


void Delay(unsigned int);


int main()
{
    unsigned LONG LED;
    IOPMOD=0xffffffff;
    IOPDATA=0x01;
    
    for(;;)
        {
        LED=IOPDATA;
        LED=(LED<<1);
        IOPDATA=LED;
        Delay(10);
        
        if(!(IOPDATA&0x0f))
            {
            IOPDATA=0x01;
            }
        }
    
    return 0;


}


void Delay(unsigned int x)
{
    unsigned int i,j,k;
    for(i=0;i<=x;i++)
        for(j=0;j<0xff;j++)
            for(k=0;k<0xff;k++);

}





AXD調(diào)試的時候程序直接就從__main標(biāo)號的地方開始了!!!!????希望大人給與解釋一下,我再寫一個小程序測試看看其中的流程.

調(diào)試的反匯編代碼:
ENTRY    [0xe59f0010]   ldr      r0,0x00000018 ; = #0x03ff0000
00000004    [0xe59f1010]   ldr      r1,0x0000001c ; = #0xe7ffff80
00000008    [0xe5801000]   str      r1,[r0,#0]
0000000c    [0xe59fd00c]   ldr      r13,0x00000020 ; = #0x03fe1000
00000010    [0xeb00003b]   bl       main
00000014    [0xeafffffe]   b        0x14  ; (ENTRY + 0x14)
00000018    [0x03ff0000]   dcd      0x03ff0000  ....
0000001c    [0xe7ffff80]   dcd      0xe7ffff80  ....
00000020    [0x03fe1000]   dcd      0x03fe1000  ....
__main    [0xe28f8090]   add      r8,pc,#0x90 ; #0xbc
00000028    [0xe898000f]   ldmia    r8,{r0-r3}
0000002c    [0xe0800008]   add      r0,r0,r8
00000030    [0xe0811008]   add      r1,r1,r8
00000034    [0xe0822008]   add      r2,r2,r8
00000038    [0xe0833008]   add      r3,r3,r8
0000003c    [0xe240b001]   sub      r11,r0,#1
00000040    [0xe242c001]   sub      r12,r2,#1
.               .
.               .
.               .


2樓: >>參與討論
icyacht
我來說
我試了,把主函數(shù)名main 改成 Main 或其他名字,當(dāng)然 INIT。S里也要改,就可以了,我也很奇怪。。。。

3樓: >>參與討論
zbp_uestc
我去試試看,謝謝icyacht的方法
不過有沒有人能給出點具體的解釋,這個怎么回事啊??

4樓: >>參與討論
zbp_uestc
我用icyacht的方法試了,有點問題
編譯完了有一個警告
warning:L6305W: image does not have an entry point

5樓: >>參與討論
icyacht
還有
  ENTRY 應(yīng)該是空格寫,后面還要加上CODE32 ,然后把main改成其他的名字,就可以的。  估計main 被編譯器用作某種特殊的東西了吧?搞不清!
   還有,我用的周立功的實驗板的例子程序里,啟動文件startup.s 里面 最后用的是 b __main (注意這里用main 就可以,奇怪),而C程序里的主函數(shù)名是main ,沒有前面的"__" . 不知是為什么.
   還有其他程序里見過前面只帶一格"_"的,還請高手講講,是不時"__"和"_" 有什么特別含義?

6樓: >>參與討論
icyacht
對了還有
周立功例子里講的例程里還需要設(shè)置OPTION選項里的ARM Linker,再編譯連接.具體是:
1.output 頁里 RO Base  設(shè)成 0x40000000,RW Base   設(shè)成 0x40003000
2. options 頁里 image entry point 設(shè)成 0x40000000
3. layout 頁里 object /symbol 設(shè)成init.o ,section 設(shè)成init

這樣的話,也是可以的,不過要注意,還是不能用"main",選其他名字吧;注意觀察PC的值,這樣設(shè)置的話一開始PC的值就是0x40000000

7樓: >>參與討論
zbp_uestc
我在編譯過程必須將ENTRY頂格書寫
我在編譯過程必須將ENTRY頂格書寫編譯猜不會有我上邊寫的那個警告.還有我發(fā)發(fā)現(xiàn)主要把聲明main改為聲明_main下邊跳到_main
也可以編譯通過不過全部都不是從最原來的入口ENTRY處開始執(zhí)行的,找不到原因,
icyacht你可以不可以把你編譯好的這個工程文件發(fā)給我,我看看到底差錯在什么地方??

我的郵箱是zbp_uestc@163.com
謝謝!!

8樓: >>參與討論
zbp_uestc
謝謝icyacht的回答,我已經(jīng)明白我為什么錯了
主要原因在于我把標(biāo)號ENTRY頂格書寫,這樣造成編譯器認為ENTRY是一個普通的標(biāo)號,不是關(guān)鍵字 造成!
謝謝1!1!1!

9樓: >>參與討論
icyacht
呵呵
知道原因了 ,那我就不用發(fā)了 

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
有片內(nèi)帶ROM、RAM 還帶 TFT LCD Controller的ARM芯片嗎
AT91SAM7S64串口PDC報"DATA ABORT"故障
有關(guān)AT91SAM7S64的中斷嵌套啟動文件的問題
哪位大俠知道油田測量系統(tǒng)的0-1500V,0-250A該如何測量?
有關(guān)nandflash/K9F1G08U0A的問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號