如果您可以告诉您的 C 编译器在 .buffer_end
之后立即可靠地放置一些标签(或变量) uint32_t buffer[32];
,那么您的汇编语言代码可以只使用该buffer_end
引用,而不是笨拙地让链接器添加两个值。
如果您在文件中定义缓冲区,.S
这样做很容易,但在文件中则不那么容易.c
。
FWIW,文件可能.o
包含一些大小信息。.o
我从一个带有二进制数据的文件为我的一个系统生成一个文件:
$ 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
在之后产生以下内容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
标签上的尺寸。
顺便说一句,如果您正在编写具有超过 256 字节 SRAM 的 AVR 芯片,您的代码可能需要正确使用lo8
/hi8
宏来测试所有 16 个地址位。