1

at this site http://www.mikrocontroller.net/articles/Konzept_f%C3%BCr_einen_ATtiny-Bootloader_in_C (sorry it's in German, I had to use google translator) it's described a way of changing the reset address value when linking the code by using:

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

and then, in the code, we define the bootreset value to be:

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

where 0x1800 is our code start.

I tried this in Atmel Studio and it works exactly as it says, but on linux using avr.gcc 4.5 it doesn't :S

Anyone know how can I make this work in linux avr-gcc, preferably both (win and linux) ?

Thanks.

4

1 に答える 1

2

たくさん掘り下げた後、私は答えを見つけました。

私が使用していた avr-objcopy コマンド ライン引数には、-j .text などの 16 進数へのコード変換に特定のセクションのみが含まれていたため、カスタム .bootreset セクションが除外されていました。

Atmel Studio では、デフォルトの動作は -R を使用して特定のセクションを除外するため、上記のカスタム セクションが含まれます。

このカスタム セクションを 16 進数に追加するには、avr-objcopy で -j (または -J は今は思い出せません) .bootreset を実行します。

于 2012-10-25T18:36:53.727 に答える