Перейти к содержанию
    

Разметка памяти

Вообщем шняга какаято. Вопрос возник изза того что 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:

arch.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так у вас копия инициализированных данных вместо флеша лежит в ОЗУ

надо секции .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) */

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 /* .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 чтоли? Короче где почитать как эффективно писать такие скрипты и как правильно их писать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил AT >ROM и заработало! Спасибо. А вот fastrun тогда будет в ROM чтоли? Короче где почитать как эффективно писать такие скрипты и как правильно их писать?

Нет тоже будет в RAM (после того как стартап скопирует данные и эти функции в RAM).

AT >ROM сообщает линкеру что данные надо положить в ROM, но реально они будут в RAM.

 

Почитать можно например здесь

http://www.codesourcery.com/gnu_toolchains.../doc2866/ld.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...