Cortex-M
ARMのCortexファミリの一種
ハーバードアーキテクチャ
デバッグ
デバッグに記載,Cortex-M4での場合の話が主
アーキテクチャ
PSR
プログラムステータスレジスタ.
これは3つのレジスタから構成されている.
- アプリケーションプログラムステータスレジスタ(
APSR
)- 演算結果のフラグ - 割り込みプログラムステータスレジスタ(
IPSR
) - 割り込み番号 - 実行プログラムステータスレジスタ(
EPSR
) - 実行状態bit
これらのレジスタはまとめてxPSR
としてアクセスも可能.
IPSR
割り込みプログラムステータスレジスタ
現在の割り込みハンドラの番号が入る.何も割り込みが発生していなければここは0になる.
Cortex-M0
ARMv6-M Thumb命令セットが実装,
命令セットアーキテクチャ(ISA)はThumb,Thumb-2サブセット(それぞれがいくつか入ってる感じ?)
Cortex-M0 テクニカルリファレンス マニュアル
ARMv6-Mと戯れる 第1号 ~ARMv6-Mと戯れる準備をしよう~
ArmプロセッサはArm命令セットThumb命令セットが使えるらしい
だけどCortex-M3以降はThumb命令セット専用になった模様,正直Cortex-Mプロセッサしか使ってないので,実質Thumb命令のみ感
Cortex-M3
ARMv7-Mアーキテクチャ
Thumb2命令セットに統一(Arm7はArm命令(32bit長),Thumb命令(16bit長)混在だった)
統合ネスト型ベクタ割り込みコントローラ(NVIC)
リアルタイムOSMOTIC,スケジュールタスクのための統合システムタイマ
Cortex-M4
Cortex-M23,33
ARMv8-Mアーキテクチャを搭載
BaselineとMainlineの2つのサブプロファイルが存在.
Baseline → ARMv6-M, Mainline → ARMv7-Mという対応に近い.
TrustZoneというIoT向けのセキュリティ機能が追加で組み込まれているのが大きなポイント.
ARMv7-Mはスレッド(非特権)モードとハンドラ(特権)モードという2つの動作モードがあるが,ここに非セキュアステートとセキュアステートが追加され,計4つの動作モードを遷移して動作する.
Amazon FeeRTOSはARMv8-Mの事前設定がされたバージョンがすでにリリースされている.
AWS が、Armv8-M 対応 FreeRTOS 向けに事前設定された例をさらにリリース
FPUが積まれているか確認
corecm4.hやcorecm7.hファイルの中に
__STATIC_INLINE uint32_t SCB_GetFPUType(void)
という関数があり、これでFPUの有無、単精度か倍精度かを返してくれる。