iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
Arm Platforms

30天從0開始探索嵌入式世界系列 第 15

Day15.進入 ARM 世界: ARM Cortex-M Programming

已經常用的一些指令集介紹完畢,接下來就是要如何使用 ARM Cortex-M 進行程式設計。

Cortex-M 系列可以使用arm assembly、C 語言或其他高級語言(Ex: National Instruments LabVIEW)進行程式設計。

Development Flow

ARM Cortex-M 應用程式設計其實與Day.2介紹的程式運行的基本概念(預處理、編譯、組譯、鏈結)非常類似。

而ARM也提供了強大的開發工具鏈 Keil、RVDS、ADS、DS-5、MDK

Arm assembly Tips

前面介紹了許多 ARM inter ,今天介紹程式設計常用的技巧 Function Calls。

  • 當我們用高階語言寫Function Calls 根本不用去想背後 Register 問題,因為編譯器都幫我們處理好了,而在 assembly 下我們必須常常考慮到 Register 該不該Backup ?
    • 在 Function Calls parameters該如何傳遞? stack or Register?
    • return value 該如何傳遞? stack or Register?

假設我們在Main call Function 使用到相同的 Register 該由誰 Backup 其實有一套規則。

希望 Register 分成三群
> r0-r3 進行parameters傳遞,因此在寫程式的時候盡量不要超過四個 parameters,不然需要使用memory就會慢很多。
> 假設原本caller 就有使用 r0-r3 必須由caller backup r0-r3
> 內部callee 需要 Register 使用 r4-r7,因此使用之前由callee backup
> r12-r15 盡量不要使用

在Cortex-M平台使用 C 來設計

由於現代 C 編譯器可以生成非常高效的程式碼,因此最好用 C 進行程式設計,而不是花費大量時間嘗試用assembly開發,後者容易出錯且可移植性較差,當然有些情況下我們必須使用assembly,因此會看到C與assembly的結合。

  • 使用C語言進行開發我們就不得提起 Common Microcontroller Software Interface Standard (CMSIS)
    • CMSIS是什麼?基於ARM Cortex處理器的微控制器的獨立於供應商的硬體抽象層

    • CMSIS還提供了處理器(Cortex M,Cortex A5/A7/A9)和外圍設備,RTOS和中間件組件的interface,他有定義一系列的 Macro,讓我們使用,我們就不用查詢記憶體位置操作對應的特殊 Register

最近有點小忙後續有時間在更新做詳細介紹。

參考資料

NYCU OCW Lec05 微處理機系統實驗
Introduction to Computer Systems


上一篇
Day14.進入 ARM 世界: ARM Instruction Sets
系列文
30天從0開始探索嵌入式世界15

尚未有邦友留言

立即登入留言