<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > GNU ARM匯編--(二)匯編編譯鏈接與運行

GNU ARM匯編--(二)匯編編譯鏈接與運行

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
GNU的匯編器是GNU Tools的一部分,可以用來(lái)ARM的匯編語(yǔ)言源代碼編譯為二進(jìn)制文件.關(guān)于GNU匯編器的介紹可以搜索《GNU Assembler Manual》.這里我們只是做一個(gè)簡(jiǎn)短的介紹,對GNU匯編器有一個(gè)大概的認識,同時(shí)通過(guò)兩個(gè)例子了解一下GNU ARM匯編.

給出一個(gè)模板文件:

本文引用地址:http://dyxdggzs.com/article/201611/321729.htm

[cpp]view plaincopy
  1. .text;Executablecodefollows
  2. _start:.global_start;"_start"isrequiredbythelinker
  3. .globalmain;"main"isourmainprogram
  4. bmain;Startrunningthemainprogram
  5. main:;Entrytothefunction"main"
  6. ;Insertyourcodehere
  7. movpc,lr;Returntothecaller
  8. .end
匯編器的使用:

一種匯編器是arm-elf-as,一種是arm-linux-as之類(lèi)的,這兩種匯編器是有細微區別.但是一般做開(kāi)發(fā),半導體廠(chǎng)商都會(huì )提供特定的編譯器,用那個(gè)編譯器應該是沒(méi)錯的,而且優(yōu)化效果應該是最優(yōu)的,畢竟是芯片公司提供的嘛.他們對體系架構最了解,很清楚的知道怎么去優(yōu)化.而我們一般的開(kāi)發(fā)者也可以了解處理器的體系架構和嵌入式系統的系統的特征來(lái)對匯編代碼和c代碼做優(yōu)化.

編譯過(guò)程:

arm-elf-as -marm7tdmi --gdwarf2 -o filename.o filename.s

-marm7tdmi是指定CPU,arm7tdmi是屬于A(yíng)RMv4T的,一般來(lái)說(shuō)同是ARMv4T應該是兼容的.

--gdwarf2是表示包含debug信息.

鏈接過(guò)程:

arm-elf-ld -o filename.elf filename.o

和UNIX系統編程一樣,我們可以根據上面的步驟寫(xiě)makefile,然后make一下.

具體ARM的指令集,偽指令就不寫(xiě)了,資料很多.

下面舉兩個(gè)ARM匯編的實(shí)例,一個(gè)是裸機下的蜂鳴器(簡(jiǎn)單的控制GPIO而已,比流水燈還簡(jiǎn)單),一個(gè)是ARM linux下的"hello world"(利用系統調用來(lái)實(shí)現的).

蜂鳴器的例子如下:

beep.lds beep.S Makefile start.S

start.S:

[cpp]view plaincopy
  1. .text
  2. .global_start
  3. _start:
  4. ldrr3,=0x53000000@WATCHDOG寄存器地址
  5. movr4,#0x0
  6. strr4,[r3]@寫(xiě)入0,禁止WATCHDOG,否則CPU會(huì )不斷重啟
  7. ldrsp,=1024*2@設置堆棧,注意:不能大于4k,因為現在可用的內存只有4K
  8. @nandflash中的代碼在復位后會(huì )移到內部ram中,此ram只有4K
  9. bl_main@跳轉到main函數
  10. halt_loop:
  11. bhalt_loop

beep.S

[cpp]view plaincopy
  1. .equGPBCON,0x56000010
  2. .equGPBDAT,0x56000014
  3. .global_main
  4. _main:
  5. ldrr0,=GPBCON
  6. ldrr1,=0x1
  7. strr1,[r0]
  8. loop:
  9. ldrr2,=GPBDAT
  10. ldrr1,=0x1
  11. strr1,[r2]
  12. bldelay
  13. ldrr2,=GPBDAT
  14. ldrr1,=0x0
  15. strr1,[r2]
  16. bldelay
  17. bloop
  18. delay:
  19. ldrr3,=0x4ffffff
  20. delay1:
  21. subr3,r3,#1
  22. cmpr3,#0x0
  23. bnedelay1
  24. movpc,lr
  25. .end

beep.lds
[cpp]view plaincopy
  1. OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")
  2. OUTPUT_ARCH(arm)
  3. ENTRY(_start)
  4. SECTIONS{
  5. .=0x33000000;
  6. .text:{
  7. *(.text)
  8. *(.rodata)
  9. }
  10. .dataALIGN(4):{
  11. *(.data)
  12. }
  13. .bssALIGN(4):{
  14. *(.bss)
  15. }
  16. }

makefile:


上一頁(yè) 1 2 下一頁(yè)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>