1. 程式人生 > 其它 >Arm入門第二講,配置Arm環境

Arm入門第二講,配置Arm環境

目錄

Arm入門第二講,配置Arm環境

一丶簡介

​ 關於市面上Arm的環境應該有好多. 在之前記得又看到過gcc也可以配置. 不過我這裡用的是Keil uVision5 程式

這裡給出官方下載連結: Keil uVision5 不過鑑於這個程式下載慢配置不穩定.這裡我就提供個百度盤連結.

連結:https://pan.baidu.com/s/1Kc-6Bw4v5Y7u2JvUHDtxvw
提取碼:5765

二丶工具配置

​ 工具下載之後一Next(繼續)下去即可. 跟正常軟體安裝一樣. 不懂上網搜.這裡不截圖

2.1 工程的建立

​ 當安裝之後首先要建立一個功能. 點選Project->New uVision Project 則會出現一個彈出視窗.

我們只需要在下面檔名一覽輸入你自定義的名字即可. 他則會建立一個工程到這個資料夾下. 點選 儲存之後

則需要你選擇 裝置 如下圖 我們選擇ARMCM0即可:

點選OK按鈕 之後這裡就會彈出 Run-Time 環境設定 如下圖

這裡把上面的選擇都勾上即可.下面就說明欄位的意思

CMSIS 這個選項是ARM與其它廠商定義的一個公共的介面

Device 裝置的意思. 是arm執行需要的

OK之後介面如下

CMSIS Device都是我們在建立的時候選擇的. 這裡的工程名是我們建立的時候起的名字. 然後在Source Group 1

上面右鍵選擇 Add New Item to Group'Source Group 1' ... 開啟之後就能看到可以建立好多檔案.包括C C++的原始檔.

為了學習這裡選擇建立C 原始檔 字尾名為.c結尾. 建立之後我們的 Source Group1裡面就有我們的C原始檔了

我們就可以在裡面寫 標準的C原始碼了 如下:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	printf("HelloWorld");
	return 0;
}

2.2 程式的編譯(Build) 與除錯配置

  • 1.程式的編譯

    ​ 程式編譯很簡單. 只需要 按快捷鍵 F7 或者在 hellword.c 位置右鍵 選擇build即可

  • 2.程式的除錯配置

    ​ 配置除錯 我們首先要開啟配置介面. 這裡有三種方式

    1 快捷鍵 Alt+F7

    ​ 2.直接在介面中選擇

    ​ 3.在選單欄 專案(Protect中選擇)

    下面兩種看下圖:

    開啟後介面如下 保持選擇跟紅色框一致即可:

    此時我們就支援除錯. F9可以程式碼前面設定斷點. F10 F11分別就是步過和進入的意思. 啟動除錯可以在選單欄中的Debug選項中設定. 除錯跟其它IDE一樣都是有得. 只需要熟悉下即可.

    設定之後就可以看到IDE應有的除錯功能了. 包含堆疊 記憶體 暫存器等

2.3 程式入口與系統入口的瞭解

​ 我們的程式如下:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	printf("HelloWorld");
	return 0;
}

那麼有過C開發知識的人應該知道, main 函式就是入口點. 對這是沒錯的. 它就是我們程式的入口點

而如果用VC++開發過C程式的人應該知道. main也是由其它封裝好的函式呼叫的. 也就是 _mainstartup 好像是這個名字.

在我們這個程式中,也有類似與 _mainStartup 入口. 也就是我們所說的程式入口.

他就在 Device下的->Startup_ARMCM0.s中.

如下圖:

這個簡單瞭解下即可.

三丶編寫最簡單的Asm

​ 這個專案不光可以建立C檔案 也可以建立彙編 Asm檔案. 只需要按照配置的時候建立C檔案 改為建立ASM檔案即可.

建立好 asm檔案之後填寫下列程式碼

Version EQU 0    ;set version number     這裡設定版本好. 而且和x86彙編一樣 分號(;)代表註釋
	area IBinary_Armtest,code,readonly  ;這裡設定 程式碼 名字 以及屬性值 是隻讀還是其他. 其中名字可以隨便改
	entry							 ;定義我們的入口點
	export main						 ;main 比如與上面我們所講的系統入口點呼叫的入口一致,這裡就是main

main							    ;函式的名字
start								;函式開頭
	mov R0,#0x4
	mov R1,#0x8                       ;這裡的彙編與x86一樣, r0賦值為4 r1賦值為8  
	add R0,R0,R1;add r0 r0,r1意思就是最後的r0 r1相加. 結果放到最前面的r0中. 與x86也類似
stop
	b stop
	end								;結束

如果你拷貝這個程式碼到編譯器中,並且編譯是不會成功的. 原因在於

mov R0,#0x4
mov R1,#0x8                       
改為:
movs R0,#0x4
movs R1,#0x8                       

原因在於這裡的mov指令沒問題. 可是這種指令必須在後面加上影響標誌相關的屬性. 這裡跟x86不一樣. 大體意思就是

你操作完一個指令之後你要告訴我是進位了 是溢位了 還是其它咋地了. 關於標誌為在上一節簡介過. 這裡只需要知道加上s即可.

後面會完整的學習指令.