Help us understand the problem. What is going on with this article?

Armのunaligned accessについて

More than 1 year has passed since last update.

How does the ARM Compiler support unaligned accesses?のメモ。

unaligned accessとは

ロード・ストア命令において、データサイズでアラインメントされていないアドレスにアクセスすること。
e.g. アドレス0x0002からのロングワード(4バイト)アクセス(LDR/STR)など。
C言語でpackedの構造体メンバにアクセスする場合などに起こりうる。

unaligned accessを行うとどうなるか

ARMv5以前

データアボート例外発生。

ARMv6以降

ハードウェアでunalinged accessをサポート(設定でON/OFF)。

ハードウェアではどう扱っているか

unalinged accessが発生した場合、インタフェースのバス幅(64bit or 128bit)分まとめて読み込み、必要な部分のみ処理することにより対応。処理が増える分、当然aligned accessより遅くなる。
また、Device memoryに設定されているバス(通常、ペリフェラルが繋がる(FPGA含む))には当てはまらない(例外発生)。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away