Дано: плата от Олимекса на LPC2148,
Ubuntu, openocd, CodeSorcery toolchain.
Программка blinky с сайта олимекса для мигания светодиодами.
Для дебага хочу запустить программу из RAM.
Чтоб можно было брекпойнты поставить.
погуглил, почитал, посмотрел примеры.
Вот здесь например тред:
http://www.embeddedrelated.com/groups/AT91SAM/show/2452.phpК сожалению, там Атмел, у меня - Филлипс.
Чтото не могу разобратся.
Линкер скрипт описывает секции и куда они идут.
Ето работает, однако почемуто когда пишу
Код
ENTRY(_startup)
/* specify the LPC2148 memory areas */
MEMORY
{
flash : ORIGIN = 0, LENGTH = 512K /* FLASH ROM */
ram_isp_low(A) : ORIGIN = 0x40000120, LENGTH = 223 /* variables used by Philips ISP bootloader */
ram : ORIGIN = 0x40000200, LENGTH = 32224 /* free RAM area */
ram_isp_high(A) : ORIGIN = 0x40007FE0, LENGTH = 32 /* variables used by Philips ISP bootloader */
}
SECTIONS
{
. = 0; /* set location counter to address zero */
startup : { *(.startup)} >ram AT>flash /* the startup code goes into FLASH */
. = ALIGN(4);
.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 FLASH */
и смотрю потом main.dmp - там и LMA и VMA указывают на тот же аддресс.
"AT" не срабатывает?
Ну ладно, понять хоть принцип.
Судя потому что пишут в ассемблерной ставке crt.S ( пример Martin Thomas )
они копируют .data секцию, только когда программа размещается во флаш.
И больше никаких копи нет.
Значит - ето просто компилится в RAM и при отладке загрузчиком типа openocd
грузится прям сразу в RAM, минуя флеш?
Вроде выглядит логично.
Тогда непонятно, как программа по ресету переключается в "run from memory"
state?
Сначала идет бутлоадер, он найдет програму во флаше,ее и запустит.
Но я чтото не видел в примерах, чтоб из флаша шло переключение на RAM?
Верить нельзя никому, даже себе. Мне - можно.