1 / 11

組合語言與 C 語言的混合編譯實驗

組合語言與 C 語言的混合編譯實驗. 實驗目的: 掌握 ARM C 語言編譯 掌握 ARM 組合語言與 C 語言的混合編譯 實驗內容: 用組合語言實驗 LED 燈的閃爍 實驗設備: DMA2440XP 教學平台 ADS 1.2 試用版內建開發環境和除錯軟體 USB 連接線、串列連接線、電源. 1.1 ARM 程式呼叫 ATPCS ( ARM ). ARM 編譯中不同語言的程式只要遵守 ATPCS 規則就可實現不同語言間的互相呼叫。 ATPCS 是一系列用於規定應用程式之間互相呼叫的基本規則,這個規則包括: 支援資料限制檢查 支援唯讀位置無關( ROPI )

Download Presentation

組合語言與 C 語言的混合編譯實驗

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 組合語言與C語言的混合編譯實驗 實驗目的: • 掌握ARM C語言編譯 • 掌握ARM 組合語言與C語言的混合編譯 實驗內容: • 用組合語言實驗LED燈的閃爍 實驗設備: • DMA2440XP教學平台 • ADS 1.2 試用版內建開發環境和除錯軟體 • USB連接線、串列連接線、電源

  2. 1.1 ARM程式呼叫ATPCS(ARM) ARM編譯中不同語言的程式只要遵守ATPCS規則就可實現不同語言間的互相呼叫。ATPCS是一系列用於規定應用程式之間互相呼叫的基本規則,這個規則包括: • 支援資料限制檢查 • 支援唯讀位置無關(ROPI) • 支援可讀/寫段位置無關(RWPI) • 支援ARM程式和Thumb程式的混合使用 • 處理浮點運算 使用以上規定的ATPCS規則時,應用程式必須遵守如下: • 程式編寫遵守ATPCS • 變數傳遞以中間暫存器和資料完成 • 組合語言器使用-apcs開關選項 關於其他ATPCS規則,用戶可以參考ARM處理器相關書籍或登錄ARM公司網站。

  3. 1.2組合語言與C語言的互相呼叫 • 組合語言切換到C語言的方法 C語言中定義的函數名在組合語言中可作為標籤使用,因此,在組合語言中可使用程式分支指令直接轉移到C語言中定義的標籤(函數)中。下面程式實現從組合語言跳躍到C語言的Main函數中。 組合語言程式:

  4. 組合語言中函數的實現 程式只要遵守ATPCS相對應規則,就可以使用不同的程式編寫程式。程式間的互相呼叫最主要的是解決參數傳遞問題。應用程式之間使用中間暫存器及資料暫存器來傳遞參數,其中,第一個到第四個參數使用R0-R3,多於四個參數的使用資料暫存器進行傳遞。這樣,接收參數的應用程式必須知道參數的個數。但是,在應用程式被呼叫時,一般無從知道所傳遞參數的個數。不同語言編寫的應用程式在呼叫時可以自定義參數傳遞的約定,使用具有一定意義的形式來傳遞,可以很好地解決參數個數的問題。常用的方法是把第一個或最後一個參數作為參數個數(包括個數本身)傳遞給應用程式。

  5. 下面的程式就是用組合語言寫的一個簡單函數:下面的程式就是用組合語言寫的一個簡單函數: 上面的組合語言函數相當於如下聲明的C語言函數: int asse_add(int x, int y); 在組合語言中可以使用: BL asse_add 指令呼叫該函數。輸入時,r0為x參數,r1為y參數;輸出r0。該函數實現的功能很簡單,返回參數x與y的和。

  6. C語言呼叫組合語言檔的函數 以上面的asse_add函數為例,在C語言中聲明該函數在其他檔中實現: extern int asse_add(int x, int y); 然後就可像呼叫C函數一樣呼叫該函數: x = asse_add(10,20)。

  7. C語言中內嵌組合語言 ARM的編譯器支援內嵌組合語言。如下示例為C語言中採用內嵌組合語言的方式實現asse_add相同的功能:

  8. 1.3 實驗步驟 • 新建一個工程名為ASM_c,並新建原始檔案、輸入程式,設置好工程編譯產生映像檔。 • 硬體連接:用串列線將PC的COM1與實驗箱的UART1連起來,再用USB連接 • 線(A->B)將PC的USB HOST介面與實驗箱的USB Device介面連起來,最後插上12V電源。 • 下載、除錯並執行:該步驟操作過程與手冊5-3.2小節的步驟是類似的。 • 結合實驗內容和原理,觀察實驗現象,實驗結果應該是D2燈不停的閃爍。 • 完成實驗練習題。

  9. 1.4 應用程式編譯 • 參考程式碼 組合語言參考程式init.s如下:

  10. 上面是關於該實驗涉及到的部分函數,完整的程式請看光碟目錄的demo檔案夾下相對應實驗的工程目錄。上面是關於該實驗涉及到的部分函數,完整的程式請看光碟目錄的demo檔案夾下相對應實驗的工程目錄。

  11. 1.5 實驗過程 在進行NOR FLASH燒寫的時候,先要用20PIN的排線將實驗箱的20PINJTAG頭與JTAG小板的JP2介面座相連,同時串列埠線,USB線連接上,程式執行後,你會看到LED2不停的閃爍。

More Related