新石器Wiki

近年はシリコン(石)から進化した便利なもので溢れる時代。そんな気になった事や試した事など記す。

ユーザ用ツール

サイト用ツール


programing:arm-programing:arm-dmb-dsb-isb


差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
programing:arm-programing:arm-dmb-dsb-isb [2020/03/19 08:32] yokoprograming:arm-programing:arm-dmb-dsb-isb [2026/07/28 13:16] (現在) – 外部編集 127.0.0.1
行 1: 行 1:
-ARMは記述した順番に命令実行されない +====== ARMは記述した順番に命令実行されない ======
-===============================+
 ARMマイコンでは、命令実行を効率化する為にCPU内部ハードウェアレベルで、命令実行の入れ替えを行っている。   ARMマイコンでは、命令実行を効率化する為にCPU内部ハードウェアレベルで、命令実行の入れ替えを行っている。  
 従って、命令を記述した順番に命令実行やデータアクセスが必ずしも実行されない。特に、IOレジスタ操作などで実行順番が重要な場合には注意が必要。 従って、命令を記述した順番に命令実行やデータアクセスが必ずしも実行されない。特に、IOレジスタ操作などで実行順番が重要な場合には注意が必要。
行 6: 行 5:
 尚、このような効率化はARMマイコンに限らず最近の高性能CPUでは当たり前に使われている技術。 尚、このような効率化はARMマイコンに限らず最近の高性能CPUでは当たり前に使われている技術。
  
-バリア命令 +===== バリア命令 =====
----------+
 ARMにはこのような事象に対処する為に、下記の命令を備えている。 ARMにはこのような事象に対処する為に、下記の命令を備えている。
  
行 22: 行 20:
   - 命令同期バリア命令はパイプラインをフラッシュし、命令キャッシュ(またはメモリ)から再フェッチする。   - 命令同期バリア命令はパイプラインをフラッシュし、命令キャッシュ(またはメモリ)から再フェッチする。
  
-記述例 +===== 記述例 =====
------+
 下記、ルネサスのサンプルプログラムから抜粋。 下記、ルネサスのサンプルプログラムから抜粋。
  
行 60: 行 57:
   - EWARMでは、`__DSB()` `__ISB()` などのようにコンパイラ組み込み関数を利用しても記述できる。(`#include <intrinsics.h>`が必要)   - EWARMでは、`__DSB()` `__ISB()` などのようにコンパイラ組み込み関数を利用しても記述できる。(`#include <intrinsics.h>`が必要)
  
-補足 +===== 補足 =====
-----+
   - I/Oデータアクセス順番を確保する為に、`DSB`命令などを使わずに、該当レジスタのダミーリードで記述してある例もある。(多少、命令の処理速度が速くなる為と思われる)   - I/Oデータアクセス順番を確保する為に、`DSB`命令などを使わずに、該当レジスタのダミーリードで記述してある例もある。(多少、命令の処理速度が速くなる為と思われる)
  
-参考 +===== 参考 =====
-----+
  
-1. [[wpjp>メモリバリア]] +  - [[wpjp>メモリバリア]] 
-2. [[http://i-saint.hatenablog.com/entry/20101005/1286208402|マルチスレッドとメモリ同期]] +  [[http://i-saint.hatenablog.com/entry/20101005/1286208402|マルチスレッドとメモリ同期]] 
-3. [[https://k-onishi.hatenablog.jp/entry/2019/03/10/000311|Linux Kernel ~ 同期機構 ~]] +  [[https://k-onishi.hatenablog.jp/entry/2019/03/10/000311|Linux Kernel ~ 同期機構 ~]] 
-4. [[https://srad.jp/~Yoh2/journal/544783/|ロード/ストア命令の追い越し例]]+  [[https://srad.jp/~Yoh2/journal/544783/|ロード/ストア命令の追い越し例]]
  
programing/arm-programing/arm-dmb-dsb-isb.1584574327.txt.gz · 最終更新: by yoko