5

256 バイト境界を越えない配列を作成することは可能ですか? つまり、個々の配列項目のアドレスは下位バイトのみが異なります。これは、配列を 256 バイトに揃えるよりも弱い要件です。私が考えることができる唯一の解決策は、に合わせることでしたがnext_power_of_two(sizeof(array))、このように現れるギャップについてはわかりません.

これは AVR マイクロコントローラー用のライブラリー用であり、これにより、割り込みハンドラーでいくつかの貴重な命令を節約できます。このプロパティを持つ必要がある配列は、ライブラリーによって使用される約 80 バイトの合計静的メモリーのうち 54 バイトの長さです。メモリ要件を増やさない方法を探しています。

avr-as gnu アセンブラーと avr-ld リンカーを使用しています。

例: 配列がアドレス 0x00f0 で開始する場合、上位ワードは配列を走査する間に 0x00 から 0x01 に変化します。

境界を越えない限り、アドレス 0x0100 から始まるか 0x0101 から始まるかはあまり気にしません。

4

2 に答える 2

1

この要件を満たすために必要なのは 64 バイトのアラインメントだけです。たとえば、次のように動作します。

uint8_t a[54] __attribute__ ((aligned(64)));
于 2010-10-13T12:50:06.327 に答える
0

AVR マイクロコントローラーについては何も知りませんが、一般的に言えば、静的変数は通常、実行可能ファイルのデータ セクションに配置されます。静的メモリの要件が低いため、データ セクションが 256 であることを確認する必要があるだけです。バイト整列。(デフォルトである可能性があります。x86では、通常はそうです。)リンカオプションを確認してください...

于 2010-10-29T19:42:20.220 に答える