新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Eclipse在線調試ARM11——Tiny6410+OpenJTAG

        Eclipse在線調試ARM11——Tiny6410+OpenJTAG

        作者: 時間:2016-11-28 來源:網絡 收藏
        Eclipse、CDT、OpenJTAG驅動、工具鏈以及OpenOCD的安裝這里就不多說了,請根據OpenJTAG附帶光盤中的說明進行安裝,這里是OpenJTAG附帶光盤中的配置文檔,需要的話可以下載:

        http://download.csdn.net/detail/girlkoo/4632348

        本文引用地址:http://www.104case.com/article/201611/322800.htm

        1.工程的創建及編譯

        Eclipse配置完成后我們來創建一個工程,首先是啟動Eclipse,Workspace可以根據自己的需要選擇,接下進行工程創建,File->New->C Project,在Project Name中填寫工程名稱,可以根據自己的項目需求填寫,這里我寫為leds,在下方的Project type選擇框中選擇Makefile project->Empty Project,在Toolchains選擇框中選擇Other toolchain,然后點擊Finish即可完成Tiny6410工程的創建,接下來我們編寫代碼,當然是leds燈的控制代碼,因為Leds燈代碼的例子多,容易懂,運行結果還可以在板子上直接看到,相當于學習編程時的Hello world。

        新建文件start.S(File->New->File from template),編寫如下代碼:

        1. .externMain
        2. .global_start
        3. _start:
        4. ldrr0,=0x70000000
        5. orrr0,r0,#0x13
        6. mcrp15,0,r0,c15,c2,4
        7. ldrr0,=0x7E004000
        8. movr1,#0
        9. strr1,[r0]
        10. ldrsp,=8*1024
        11. blMain
        12. halt:
        13. bhalt

        新建文件main.c(File->New->Source File),編寫如下代碼:

        1. voiddelay(inttimes){
        2. volatileinti;
        3. for(i=0;i!=times;++i){
        4. ;
        5. }
        6. }
        7. voidMain(){
        8. volatileunsignedlong*gpkcon0=(volatileunsignedlong*)0x7F008804;
        9. volatileunsignedlong*gpkdat=(volatileunsignedlong*)0x7F008808;
        10. inti=0;
        11. *gpkcon0=(1<<16)|(1<<20)|(1<<24)|(1<<28);
        12. while(1){
        13. *gpkdat=~(i<<4);
        14. if(++i==16)
        15. i=0;
        16. delay(10000);
        17. }
        18. }

        新建文件Makefile(File->New->File from template),編寫如下代碼:

        1. all:leds.bin
        2. leds.bin:start.omain.o
        3. arm-elf-ld-Ttext0-oleds.elfstart.omain.o
        4. arm-elf-objcopy-Obinaryleds.elfleds.bin
        5. arm-elf-objdump-Dleds.elf>leds.dis
        6. start.o:start.S
        7. arm-elf-gcc-g-ostart.ostart.S-c
        8. main.o:main.c
        9. arm-elf-gcc-g-omain.omain.c-c
        10. clean:
        11. rm*.oleds.elfleds.binleds.dis

        然后就可以編譯該工程了,在Project Explorer中選中該工程(這里是leds)右鍵并在菜單中選擇Build Project即可編譯該工程,如果需要清除編譯產生的代碼選擇Clean Project即可,到這里已經完成了Tiny6410工程的編輯和編譯工作。

        2.Eclipse通過OpenJTAG在線調試Tiny6410

        使用Eclipse在線調試Tiny6410實際上是使用gdb在線調試Tiny6410,Eclipse的調試模塊是對GDB的封裝。GDB在線調試實際上是GDB的遠程調試,也就是說用GDB遠程鏈接GDB Server進行遠程調試,GDB遠程調試的詳細信息這里不多講,可以自己網上搜索一下。遠程調試時本機GDB從ELF文件中獲取調試信息,這就是配置調試信息時設置的C/C++ Application是編譯過程中生成的ELF文件而不會最終燒寫到ARM上運行的BIN文件的原因。

        GDB可以在本機的ELF文件上獲取調試信息,但是單是這樣還不夠,還需要將對應的BIN文件燒寫到目標機的內存中,這樣進行通過GDB調試目標機時Eclipse將GDB下達調試指令轉換成OpenOCD的指令,由OpenOCD通過OpenJTAG來操作硬件,這樣,就是實現了GDB在本機下達調試指令,目標機相應的做出反應,也就是常說的單步調試。

        由于GDB遠程調試Tiny6410時需要將BIN文件下載到內存,所以

        (1)如果代碼在片內SRAM(Steppingstone)中運行

        此時代碼的連接地址為0且代碼的體積小于Steppingstone的大小,對于Tiny6410來說代碼的體積需要小于8KB,這種情況下無需目標機初始化,可以直接調試程序。

        (2)如果代碼在SDRAM、DDR或者其他存儲設備中運行

        此時代碼的連接地址為0x50000000~0x5FFFFFFF之間,體積也有可能大于Steppingstone的容量,這時GDB調試前需要下載一個程序到Tiny6410來初始化其DDR,這樣OpenOCD才能通過OpenJTAG來將目標程序燒寫到DDR上。

        因此,應該針對以上兩種情況做不同處理,對于第一種情況,GDB初始化文件可以這樣寫:

        1. targetremote127.0.0.1:3333
        2. monitorhalt
        3. #這兩條命令是關MMU
        4. monitorarmmcr1501000
        5. monitorstep0
        6. 對于第二種情況可以這樣寫:
        7. targetremote127.0.0.1:3333
        8. monitorhalt
        9. #這兩條命令是關MMU
        10. monitorarmmcr1501000
        11. monitorstep0
        12. echoConfiguringsystem...
        13. #下載init.bin到片內內存,目的是初始化DDR
        14. monitorload_imageD:/Working/arm/init/init.bin0x0c000000
        15. #運行
        16. monitorresume0x0c000000
        17. #停止
        18. monitorhalt
        19. #等待停止
        20. monitorwait_halt

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 含山县| 陵川县| 桑植县| 乐亭县| 黑水县| 丹凤县| 弋阳县| 萨嘎县| 呼伦贝尔市| 广灵县| 寿光市| 台州市| 崇阳县| 济阳县| 永济市| 呼和浩特市| 乌拉特前旗| 郎溪县| 西藏| 额尔古纳市| 新昌县| 铁力市| 玉屏| 津市市| 舒城县| 永仁县| 呼伦贝尔市| 宣武区| 合肥市| 贡嘎县| 萝北县| 会同县| 沈阳市| 登封市| 红河县| 金塔县| 康平县| 车致| 丽江市| 甘洛县| 綦江县|