1

在这个网站http://www.mikrocontroller.net/articles/Konzept_f%C3%BCr_einen_ATtiny-Bootloader_in_C(对不起,它是德语,我不得不使用谷歌翻译器)它描述了一种在链接代码时更改重置地址值的方法使用:

-Wl,--section-start=.bootreset=0x00

然后,在代码中,我们将 bootreset 值定义为:

uint16_t boot_reset __attribute__((section(".bootreset"))) = 0xC000U + 0x1800 / 2 - 1;

其中 0x1800 是我们的代码开始。

我在 Atmel Studio 中试过这个,它的工作原理和它说的完全一样,但是在使用 avr.gcc 4.5 的 linux 上它没有:S

任何人都知道我怎样才能在 linux avr-gcc 中完成这项工作,最好是(win 和 linux)?

谢谢。

4

1 回答 1

2

经过大量挖掘,我找到了答案。

我使用的 avr-objcopy 命令行参数仅包括将代码转换为十六进制的特定部分,例如 -j .text 等,因此省略了自定义 .bootreset 部分。

在 Atmel Studio 上,默认行为是使用 -R 排除某些部分,因此将包含上面的自定义部分。

要在十六进制上添加此自定义部分,只需在 avr-objcopy 上 -j(或 -J 现在不记得了).bootreset。

于 2012-10-25T18:36:53.727 回答