Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запустить программу из RAM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
A. Fig Lee
Дано: плата от Олимекса на 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?
A. Fig Lee
все, разобрался.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.