既にこのトピック(特にHow to get address of some struct member in array of structures)について質問があります。マップファイル内のメンバー構造のアドレス?
私たちがstruct
を使用してハードウェアデバイスを記述すると、各構造メンバーはハードウェアデバイスのいくつかのレジスタに対応するでしょう - 構造の各メンバーが正しくマップされているかどうかハードウェアの各レジスタ?
コンパイラのABIはメンバーの配置を指示しますが、ユーザーは間違いを犯す可能性もあります。マッピングが正しく行われたかどうかを確認する唯一の方法は、実行時に確認することです。 マップファイル(少なくともGNU ld用)は、構造体メンバの配置に関するヒントを提供しません。
コンパイラーやリンク時に各構造メンバーがどこにあるのか知る方法はありますか?
あなたは正しいですが、これは移植可能な方法では不可能です。あなたは特定のコンパイラの拡張機能や動作に頼らなければなりません – Ctx
これはとにかくシステム固有のものです。コードをまったく異なる種類のコンピュータに移動すると、ハードウェアデバイスはそこには存在しません。 –
は絶対合意し、(CPU、コンパイラ)に依存します。しかし、同じCPUと同じコンパイラでも、マッピングに間違いがないことを確認したいと思います。マップファイルを使用して構造メンバーのマップを表示する方法を探しています。しかし、唯一の方法は、実行時にそれらのアドレスを表示するコードを持つことです。 –