Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разметка памяти
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
segment
Вообщем шняга какаято. Вопрос возник изза того что LPC2000 flash utility выдает ошибку
Код
lpc21isp version 1.48
File main.hex:
    loaded...
New Extended Linear Address Record [04] out of memory range
Current Memory starts at: 0x00000000, new Address is: 0x40000000

Компиляция проходит успешно, никаких варнингов нету.
Вот кусок кода когда при котором возникает ошибка при прошивке
Код
static uart_config_t config =
{
    .controller = 0,
    .baudrate = 9600,
    .length = 8,
    .stop = 1

};

int main( void )
{
    char buffer[256] = { 0 };

    cpu_init();

    uart_init( &config );

    while(1)
    {
           ...
        }
}

А вот при таком коде ошибки НЕ возникает
Код
int main( void )
{
    uart_config_t config =
    {
        .controller = 0,
        .baudrate = 9600,
        .length = 8,
        .stop = 1

    };

    char buffer[256] = { 0 };

    cpu_init();

    uart_init( &config );

    while(1)
    {
        ...
        }
}

Вообще ничо понять не могу, воощем нид хелп.
ЗЫ
Вложил crt0.s и LPC2129-ROM.ld



Кстати, и не только при этом возникает ошибка, я первый раз заметил это при использовании malloc стандартного, при любом использовании malloc - прошивать отказываеца.. crying.gif
KRS
так у вас копия инициализированных данных вместо флеша лежит в ОЗУ
надо секции .data размещать во флеше
что то типа
Код
    .data :                             /* collect all initialized .data sections that go into RAM */
    {
        _data = .;                      /* create a global symbol marking the start of the .data section */
        *(.data)                        /* all .data sections  */
        _edata = .;                     /* define a global symbol marking the end of the .data section */
    } >RAM AT >ROM                    /* put all the above into RAM (but load the LMA copy into FLASH) */
segment
Код
/* .data section which is used for initialized data */
  /*.data : AT (_etext)*/
  .data :
  {
    _data = .;
    *(.data)
    *(.data.*)
    *(.gnu.linkonce.d*)
    SORT(CONSTRUCTORS) /* mt 4/2005 */
    . = ALIGN(4);
    *(.fastrun) /* "RAM-Functions" */
  } > RAM

Добавил AT >ROM и заработало! Спасибо. А вот fastrun тогда будет в ROM чтоли? Короче где почитать как эффективно писать такие скрипты и как правильно их писать?
KRS
Цитата(Сега @ Jan 27 2009, 22:39) *
Добавил AT >ROM и заработало! Спасибо. А вот fastrun тогда будет в ROM чтоли? Короче где почитать как эффективно писать такие скрипты и как правильно их писать?

Нет тоже будет в RAM (после того как стартап скопирует данные и эти функции в RAM).
AT >ROM сообщает линкеру что данные надо положить в ROM, но реально они будут в RAM.

Почитать можно например здесь
http://www.codesourcery.com/gnu_toolchains.../doc2866/ld.pdf
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.