Internet of Things | cortex-M シリーズ CPU のコアを探る | C コードでアセンブリ関数を呼び出す | アセンブリ ステートメントを直接追加する | レジスタとプロセッサ モード | Internet of Things 開発シリーズの基礎をゼロにして Cortex-M シリーズ CPU をいじるコース - 学習ノート (3 )

C コードでアセンブリ関数を呼び出す

tip1: アセンブリ関数の書き方

例: READONLY の後にアセンブラ関数を追加する

ここに画像の説明を挿入

		 EXPORT ADD_OPT
ADD_OPT	FUNCTION
		ADD R0, R0,#1
		BX	LR
		ENDFUNC

ここに画像の説明を挿入

main 関数に呼び出しを追加します。

extern int ADD_OPT(void);  //如果不加void,编译器会提示warn:warning: function declaration isn’t a prototype(函数声明不是原型)

int main(void)
{
	int i = 0;

	i = i +1 ;

	ADD_OPT();
}

デバッグ モード、リセット、F11 を押してステップごとに実行:
ここに画像の説明を挿入
add+1 操作を実行:
mov を追加して R1 の値を表示:
ここに画像の説明を挿入

アセンブリ ステートメントを C コードに直接追加する

·組み込みアセンブリ ステートメント
__asm{ アセンブリ関数またはコード} . インライン アセンブリ ステートメントの例:



int main(void)
{
	int i = 0;

	i = i +1 ;

	int r1; //若无此定义会提示:Implicit physical register R1 should be defined as a variable

	__asm

	{
		ADDS r1,#1
	}
}

__asm void add_opt()
{

		ADDS R0,R1

		BX LR
}

C 言語の組み込みアセンブリ asm 構文については、ブログ投稿を参照してください。

ヒント: MDK コメントは中国語で表示されます

MDK のエンコーディングは、chinese2312 に設定されています ([編集] > [構成] > [エディタ] > [エンコーディング])。

Cortex-M アーキテクチャ CPU コアのレジスタとプロセッサ モード

Cortex-M アーキテクチャの CPU コア レジスタ

ここに画像の説明を挿入
ここに画像の説明を挿入

デモ

スタートアップファイルを開いてデバッグ状態に入り、リセット:
F:\IOT\PRJ\first_prj\RTE\Device\STM32F407ZGTx\startup_stm32f407xx.s
ここに画像の説明を挿入
1ステップ実行、LR値変化:
ここに画像の説明を挿入
命令追加: MOV R1, PC,
ここに画像の説明を挿入
再コンパイル:
debug,リセット, PC の値を見てください:
ここに画像の説明を挿入
これはパイプライン命令であるため、表示される値は異なります (実際には現在のアドレス + 4 の後の値):

特に説明するいくつかのレジスタ

R13 MSP/PSP
R14 LR
R15 PC
2 特殊レジスタ
プログラム ステータス レジスタ xPSR
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

Cortex-M アーキテクチャ CPU プロセッサの動作状態、モード、特権レベル

1 動作状態
デバッグ状態
Thumb状態(Thumb命令実行)
2 特権レベルと動作モード
2種類の特権レベル 特権
レベル
非特権レベル(ユーザーレベル):特殊レジスタ、特殊ステータスレジスタの書き込み禁止
2つの動作モード
ハンドラモード
スレッド(スレッド) ) モデル
ここに画像の説明を挿入

3状態とモードとレベルの切り替え
ここに画像の説明を挿入
ここに画像の説明を挿入

MDK でのデモ

内部の CONTROL の 0 ビットを 1 に変更します。
ここに画像の説明を挿入
ここに画像の説明を挿入

影響を受ける値は反転表示され、非特権になりますここに画像の説明を挿入

内部の CONTROL の 0 ビットを 3 に変更します。
ここに画像の説明を挿入

SP レジスタを 0 に設定します。実行を継続し、割り込みをトリガーします。
ここに画像の説明を挿入

HardFault_Handler
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Medlar_CN/article/details/130508445