我目前有一个C项目,我必须将特定值(0xaa)写入特定地址(0x3fec0),我想在编程序列中编写它。我找到的解决方案如下:
我在链接器文件中写了另一节:
/* Custom flag section in linker file */
_flag_start = 0x3fec0;
.flag _flag_start :
{
KEEP(*(.flag));
}
我将值写为静态变量:
static uint8_t flag __attribute__((section (".flag"))) __attribute__((__used__)) = 0xaa;
效果很好,我设法在正确的地址写下正确的值。然而,它也会生成一个非常重的二进制文件:因为我将此部分设置为0x3fec0,我的二进制文件将是261824字节(十进制的0x3fec0),意味着大约255KB,就好像它填充空数据直到它到达此地址。
我的问题是:如何执行相同的操作,但不会影响二进制文件的大小?
答案 0 :(得分:1)
您可以尝试将其输出为另一种格式,例如Motorola s-record(srec)或intel HEX。 您用来刷新设备的程序可能支持这些格式,并跳过不同地址范围之间的无用数据,以加快传输速度。
答案 1 :(得分:0)
我发现解决方案更容易理解,实施,并且效果很好。
我只是创建了一个包含字节" 0xAA"的.bin文件。并将我的MCU专用编程器写入我的设备(如果您想了解规格,它是Atmel MCU,我使用的是atprogram程序)。我在我的MCU上用正确的偏移量(0x3fec0)写了这个二进制文件的内容,所以它会在正确的位置。