亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 2482 | 回復(fù): 0
打印 上一主題 下一主題

用Keil的mdk-arm工具鏈在命令行模式下開發(fā)ARM [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-12-21 08:41 |只看該作者 |倒序?yàn)g覽
以前曾經(jīng)使用GNU的 arm-linux-* 工具鏈在命令行模式下寫過ARM的代碼,前段時(shí)間安裝了Keil的mdk-arm 開發(fā)工具,心血來潮想試試在命令行下能不能開發(fā)ARM,結(jié)果成功了。我所測(cè)試的代碼非常簡(jiǎn)單,只是一個(gè)實(shí)驗(yàn),具有實(shí)用價(jià)值的代碼沒有測(cè)試過。
當(dāng)然,如果有了圖形界面的IDE再使用命令行開發(fā),是多此一舉、舍近求遠(yuǎn)了,這只是個(gè)人愛好吧。
我的環(huán)境:
windows7旗艦版;Keil arm-mdk V4.2;Cygwin(已經(jīng)安好了make等基本工具)
模擬開發(fā)的器件是arm最近推出的cortex-m4(帶DSP處理單元).

整個(gè)工程只包含4個(gè)文件:?jiǎn)?dòng)文件head.s、C文件main.c、分散加載文件start.sct、Makefile。下面是各個(gè)文件的內(nèi)容。

head.s
  1.      1          IMPORT main
  2.      2          AREA startup,CODE
  3.      3          THUMB
  4.      4          DCD 0x20000000
  5.      5          DCD reset

  6.      6  reset   PROC
  7.      7          ENTRY
  8.      8          ; CPACR is located at address 0xE000ED88
  9.      9          LDR.W R0, =0xE000ED88
  10.     10          ; Read CPACR
  11.     11          LDR R1, [R0]
  12.     12          ; Set bits 20-23 to enable CP10 and CP11 coprocessors
  13.     13          ORR R1, R1, #(0xF << 20)
  14.     14          ; Write back the modified value to the CPACR
  15.     15          STR R1, [R0]

  16.     16          push {r0-r1}

  17.     17          LDR R0,=main
  18.     18          BL main
  19.     19          B .
  20.     20          ENDP
  21.     21          ALIGN
  22.     22          END
其中的第8-15行是開啟FPU處理單元的代碼(針對(duì)有FPU的處理器),第16行用來測(cè)試堆棧的情況;第6行和第20行的PROC、ENDP告訴編譯器這是個(gè)執(zhí)行程序段(以便編譯器在編譯時(shí)把跳轉(zhuǎn)地址的bit 0變?yōu)閱螖?shù),例如第5行變成reset所在的地址+1,這是因?yàn)閏ortex-m4只支持thumb代碼,在向thumb代碼跳轉(zhuǎn)時(shí)PC地址bit0必須為1)。

main.c
  1.      1 int main()
  2.      2 {
  3.      3 float a=3.14159;
  4.      4 float b=2.987;
  5.      5 float c;
  6.      6 c=a*b*b;
  7.      7 return (int)c;
  8.      8 }
這里使用了浮點(diǎn)運(yùn)算,以測(cè)試是否能正確編譯浮點(diǎn)運(yùn)算為FPU的硬件指令。

start.sct
  1. 1 ROMLOAD 0x0 0x4000
  2. 2 {
  3. 3 EXEC_RO 0x0
  4. 4 {
  5. 5 head.o(startup, +first)
  6. 6 *(+RO)
  7. 7
  8. 8 }
  9. 9 RAM 0x1FFF8000
  10. 10 {
  11. 11 *(+RW,+ZI)
  12. 12 }
  13. 13 }
分散加載文件,把啟動(dòng)代碼放到最開始。

Makefile
  1. 1 main.bin:main.c head.s
  2. 2 armcc --cpu cortex-m4.fp -O0 --apcs=interwork --li -g -c -I "C:\Keil\ARM\CMSIS\Include" main.c -o main.o
  3. 3 armasm --cpu cortex-m4.fp --li --apcs=interwork -I "C:\Keil\ARM\CMSIS\Include" head.s -o head.o
  4. 4 armlink --cpu cortex-m4.fp --no_startup --libpath "C:\Keil\ARM\RV31\LIB" --scatter start.sct head.o main.o -o main.axf
  5. 5 fromelf --bin --output main.bin main.axf
  6. 6 fromelf main.axf -c|sed -n '/Section #1/,$$p'|sed '/Section #2/,$$d'>_main.list
  7. 7 #dos2unix _main.list
  8. 8 clean:
  9. 9 rm *.o *.axf *.list *.bin
第4行這里有個(gè)--no_startup需要說明一下,在不添加這個(gè)選項(xiàng)時(shí),Keil會(huì)“自作聰明”的在生成的匯編代碼中添加一些代碼,這些代碼也許是我們并不想要的,所以增加這個(gè)--no_startup選項(xiàng)后就不再有這些代碼了。第6行后面的sed是從調(diào)試信息中過濾出我們所需要看的部分,其它的被濾除。

四個(gè)文件都具備后,在當(dāng)前目錄下執(zhí)行make指令(會(huì)有兩個(gè)警告信息,可以忽略),便可生成main.axf的調(diào)試映像了,可以在keil中調(diào)試;_main.list是生成的反匯編代碼,內(nèi)容如下:
  1. ** Section #1 'EXEC_RO' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
  2.         Size   : 88 bytes (alignment 4)
  3.         Address: 0x00000000

  4.         $d
  5.         startup
  6.                 0x00000000:     20000000        ... DCD    536870912
  7.                 0x00000004:     00000009        .... DCD     9
  8.         $t
  9.         $v0
  10.         reset
  11.                 0x00000008:     f8df0014        .... LDR.W   r0,[pc,#20] ; [0x20] = 0xe000ed88
  12.                 0x0000000c:     6801            .h LDR     r1,[r0,#0]
  13.                 0x0000000e:     f4410170        A.p.    ORR       r1,r1,#0xf00000
  14.                 0x00000012:     6001            .` STR     r1,[r0,#0]
  15.                 0x00000014:     b403            .. PUSH   {r0,r1}
  16.                 0x00000016:     4803            .H LDR     r0,[pc,#12] ; [0x24] = 0x29
  17.                 0x00000018:     f000f806        .... BL         main ; 0x28
  18.                 0x0000001c:     e7fe            .. B             0x1c ; reset + 20
  19.         $d
  20.                 0x0000001e:     0000            .. DCW   0
  21.                 0x00000020:     e000ed88        .... DCD     3758157192
  22.                 0x00000024:     00000029        )... DCD     41
  23.         $t
  24.         .text
  25.         main
  26.                 0x00000028:     eddf1a09        ....    VLDR     s3,[pc,#36] ; [0x50] = 0x40490fd0
  27.                 0x0000002c:     eef00a61        ..a.    VMOV.F32 s1,s3
  28.                 0x00000030:     eddf1a08        ....    VLDR     s3,[pc,#32] ; [0x54] = 0x403f2b02
  29.                 0x00000034:     eeb00a61        ..a.    VMOV.F32 s0,s3
  30.                 0x00000038:     ee601a80        `...    VMUL.F32 s3,s1,s0
  31.                 0x0000003c:     ee611a80        a...    VMUL.F32 s3,s3,s0
  32.                 0x00000040:     eeb01a61        ..a.    VMOV.F32 s2,s3
  33.                 0x00000044:     eefd1ac1        ....    VCVT.S32.F32 s3,s2
  34.                 0x00000048:     ee110a90        ....    VMOV     r0,s3
  35.                 0x0000004c:     4770            pG BX       lr
  36.         $d
  37.                 0x0000004e:     0000            .. DCW   0
  38.                 0x00000050:     40490fd0        ..I@    DCD     1078530000
  39.                 0x00000054:     403f2b02        .+?@    DCD     1077881602


您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP