Цитата(TanT @ Feb 19 2009, 07:44)

Хм... засада ещё в том, что кроме кода у меня ничего нет.
Все мучения для осуществления удалённой смены прошивки. Флешка может хранить две копии прошивки. Удалённая сторона, которая посылает новую прошивку не знает куда (по какому из двух возможных адресов) положит её мой загрузчик, а он будет складыват соответственно в область свободную от исполняемого кода. Таким образом как не компили не угадаешь. Разбираться надо на месте, тобишь в бутлоадере.
Можно, конечно, опросить сначала мою LPC2378 где, что у неё лежит и как она себя чувствует, а потом уже слать прошивку, но это совсем последний вариант.
Вам нужно просто разместить или исполнять с разного адреса один и тот-же бинарик?
Если второе - то нужно скомпилить с position independent code - для gcc опция -fPIC.
И стартап нужно написать правильно, без привязки к конкретным адресам, а вычисляя их по время выполнения.
Куда прошивку будет ложить бутлоадер - это ему (бутлоадеру) придется решать. Он на то и бутлоадер, чтобы знать что и где у него лежить и куда писать новую прошивку.
Цитата(A. Fig Lee @ Feb 19 2009, 05:53)

лихко! (теоретицки) на практике у меня так и не получилось.
то есть в линкер скрипте там опция есть "AT":
например:
Код
SECTIONS
{
. = 0; /* set location counter to address zero */
startup : { *(.startup)} >flash /* the startup code goes into FLASH */
.text : /* collect all sections that should go into FLASH after startup */
{
*(.text) /* all .text sections (code) */
*(.rodata) /* all .rodata sections (constants, strings, etc.) */
*(.rodata*) /* all .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* all .glue_7 sections (no idea what these are) */
*(.glue_7t) /* all .glue_7t sections (no idea what these are) */
_etext = .; /* define a global symbol _etext just after the last code byte */
} >ram AT>flash /* put all the above into RAM and copy in FLASH */
код должен скомпилится для локейшен RAM, но записатся во FLASH.
онако - фигушки, VMA и LMA один и тот же - RAM.
На практике нужно стартап написать так, чтобы он не использовал абсолютной адресации и скопировал себя (т.е. всу прошивку) в RAM.