programing:arm-programing:arm-dmb-dsb-isb
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| programing:arm-programing:arm-dmb-dsb-isb [2018/10/03 10:27] – yoko | programing:arm-programing:arm-dmb-dsb-isb [2026/07/28 13:16] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ARMは記述した順番に命令実行されない | + | ====== |
| - | =============================== | + | |
| ARMマイコンでは、命令実行を効率化する為にCPU内部ハードウェアレベルで、命令実行の入れ替えを行っている。 | ARMマイコンでは、命令実行を効率化する為にCPU内部ハードウェアレベルで、命令実行の入れ替えを行っている。 | ||
| 従って、命令を記述した順番に命令実行やデータアクセスが必ずしも実行されない。特に、IOレジスタ操作などで実行順番が重要な場合には注意が必要。 | 従って、命令を記述した順番に命令実行やデータアクセスが必ずしも実行されない。特に、IOレジスタ操作などで実行順番が重要な場合には注意が必要。 | ||
| 行 6: | 行 5: | ||
| 尚、このような効率化はARMマイコンに限らず最近の高性能CPUでは当たり前に使われている技術。 | 尚、このような効率化はARMマイコンに限らず最近の高性能CPUでは当たり前に使われている技術。 | ||
| - | バリア命令 | + | ===== バリア命令 |
| - | --------- | + | |
| ARMにはこのような事象に対処する為に、下記の命令を備えている。 | ARMにはこのような事象に対処する為に、下記の命令を備えている。 | ||
| 行 22: | 行 20: | ||
| - 命令同期バリア命令はパイプラインをフラッシュし、命令キャッシュ(またはメモリ)から再フェッチする。 | - 命令同期バリア命令はパイプラインをフラッシュし、命令キャッシュ(またはメモリ)から再フェッチする。 | ||
| - | 記述例 | + | ===== 記述例 |
| - | ----- | + | |
| 下記、ルネサスのサンプルプログラムから抜粋。 | 下記、ルネサスのサンプルプログラムから抜粋。 | ||
| 行 58: | 行 55: | ||
| </ | </ | ||
| - | - EWARMでは、`__DSB()` `__ISB()` などのようにコンパイラ組み込み関数を利用しても記述できる。 | + | - EWARMでは、`__DSB()` `__ISB()` などのようにコンパイラ組み込み関数を利用しても記述できる。(`# |
| - | 補足 | + | ===== 補足 |
| - | ---- | + | |
| - I/ | - I/ | ||
| + | |||
| + | ===== 参考 ===== | ||
| + | |||
| + | - [[wpjp> | ||
| + | - [[http:// | ||
| + | - [[https:// | ||
| + | - [[https:// | ||
programing/arm-programing/arm-dmb-dsb-isb.1538530067.txt.gz · 最終更新: by yoko
