реклама на сайте
подробности

 
 
> Запустить программу из RAM, Не надо писать загрузчик в crt.S ?
A. Fig Lee
сообщение Feb 10 2009, 01:12
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Дано: плата от Олимекса на 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?


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 02:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016