新石器Wiki

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

ユーザ用ツール

サイト用ツール


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


差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
programing:arm-programing:arm-dmb-dsb-isb [2018/10/03 10:27] 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:
   - 命令同期バリア命令はパイプラインをフラッシュし、命令キャッシュ(またはメモリ)から再フェッチする。   - 命令同期バリア命令はパイプラインをフラッシュし、命令キャッシュ(またはメモリ)から再フェッチする。
  
-記述例 +===== 記述例 =====
------+
 下記、ルネサスのサンプルプログラムから抜粋。 下記、ルネサスのサンプルプログラムから抜粋。
  
行 58: 行 55:
 </code> </code>
  
-  - EWARMでは、`__DSB()` `__ISB()` などのようにコンパイラ組み込み関数を利用しても記述できる。+  - EWARMでは、`__DSB()` `__ISB()` などのようにコンパイラ組み込み関数を利用しても記述できる。(`#include <intrinsics.h>`が必要)
  
-補足 +===== 補足 =====
-----+
   - I/Oデータアクセス順番を確保する為に、`DSB`命令などを使わずに、該当レジスタのダミーリードで記述してある例もある。(多少、命令の処理速度が速くなる為と思われる)   - I/Oデータアクセス順番を確保する為に、`DSB`命令などを使わずに、該当レジスタのダミーリードで記述してある例もある。(多少、命令の処理速度が速くなる為と思われる)
 +
 +===== 参考 =====
 +
 +  - [[wpjp>メモリバリア]]
 +  - [[http://i-saint.hatenablog.com/entry/20101005/1286208402|マルチスレッドとメモリ同期]]
 +  - [[https://k-onishi.hatenablog.jp/entry/2019/03/10/000311|Linux Kernel ~ 同期機構 ~]]
 +  - [[https://srad.jp/~Yoh2/journal/544783/|ロード/ストア命令の追い越し例]]
  
programing/arm-programing/arm-dmb-dsb-isb.1538530067.txt.gz · 最終更新: by yoko