buffer_end
の直後に何らかのラベル (または変数) を確実に配置するように C コンパイラに指示できればuint32_t buffer[32];
、アセンブリ言語コードはbuffer_end
、リンカーに 2 つの値を不自然に追加させる代わりに、その参照を使用することができます。
ファイルでバッファを定義する場合、そのようなことを行うのは簡単ですが、.S
ファイルではそれほど簡単ではありません.c
。
.o
FWIW、ファイルにサイズ情報が含まれている可能性があります。.o
システムの 1 つのバイナリ データを使用して からファイルを生成します。
$ avr-objcopy -B avr -I binary -O elf32-avr --readonly-text --rename-section .data=.text,contents,alloc,load,readonly,code foo.bin foo.o
これによりfoo.o
、 after を生成する が得られnm foo.o
ます。
00000c00 T _binary_foo_bin_end
00000c00 A _binary_foo_bin_size
00000000 T _binary_foo_bin_start
のタイプは_binary_foo_bin_size
、ケースに適応できる場合に役立つ場合があります-buffer_end
ラベルよりもサイズが必要な場合.
lo8
ところで、256 バイト以上の SRAM を持つ AVR チップの 1 つを書いている場合、コードはおそらく/マクロを適切に使用してhi8
16 アドレス ビットすべてをテストする必要があります。