Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отладка в SRAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
adnega
Добрый день!

Использую Keil и МК LPC2468, есть J-Link.

Как отлаживать программу в SRAM?

1. Как разместить код и данные в ОЗУ, правильно записать *.sct?
{Я описал *.sct так:
LR_IROM 0x40000000 0x00008000{
RW_IRAM 0x40000000 0x00008000{
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO +RW +ZI)
}
}
По адресу 0x0 - одни нули. По адресу 0x40000000 - BL __scatterload_rt2 (0x40000008).
Где вектора прерываний?
*.lst - в листинге мой код размещен с адреса 0x0, код с адреса 0x40000000 остутствует.
}
2. Как загрузить код и данные в ОЗУ?
{По-моему, это должен сделать J-Link, но как ему об этом сказать?}
3. Как начать выполнение кода с адреса 0x40000000?
{По-моему, это должен сделать J-Link, но как ему об этом сказать?}
4. В какой момент выполнять MEMMAP=2?
{Перед использованием прерываний?}
5. Нужна ли запись во флеш (например, первые 64 байта) или отладчик делает принудительный переход на начало ОЗУ?
{Может, и не нужна?}
viael
Цитата(adnega @ Jun 27 2008, 10:18) *
Добрый день!

Использую Keil и МК LPC2468, есть J-Link.

Как отлаживать программу в SRAM?

1. Как разместить код и данные в ОЗУ, правильно записать *.sct?
{Я описал *.sct так:
LR_IROM 0x40000000 0x00008000{
RW_IRAM 0x40000000 0x00008000{
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO +RW +ZI)
}
}
По адресу 0x0 - одни нули. По адресу 0x40000000 - BL __scatterload_rt2 (0x40000008).
Где вектора прерываний?
*.lst - в листинге мой код размещен с адреса 0x0, код с адреса 0x40000000 остутствует.
}
2. Как загрузить код и данные в ОЗУ?
{По-моему, это должен сделать J-Link, но как ему об этом сказать?}
3. Как начать выполнение кода с адреса 0x40000000?
{По-моему, это должен сделать J-Link, но как ему об этом сказать?}
4. В какой момент выполнять MEMMAP=2?
{Перед использованием прерываний?}
5. Нужна ли запись во флеш (например, первые 64 байта) или отладчик делает принудительный переход на начало ОЗУ?
{Может, и не нужна?}


Не морочь голову со scatter файлом. На вкладке Linker поставь галочкуUse Memory layout from Target Dialog. На вкладке Target в RO секции указываеш старт с адреса 0x40000000,Size(размер секции кода, я обычно для отладки делю срам пополам)0x8000.
На вкладке RW Start=0x40008000, Size=0x8000.
Создаеш файл RAM.ini примерно такого вида:

Код
FUNC void Setup (void) {
// <o> Program Entry Point
  PC = 0x40000000;
}


LOAD OBJ\lcd.axf INCREMENTAL     // название объектного файла

Setup();                             // Setup for Running

g, main

На вкладке Debug в качестве оладчика выбираеш J-Link, Initalization File = RAM.ini.
Если используются стандартный стартап от Keilа, то во вкладке ASM в дефайнах указать REMAP, RAM_MODE, если нет то сделать ремап самому.
Вот вроде фсе. smile.gif
adnega
1. Настроил в target области IROM, IRAM;
2. В user->program after build указал load.bat
load.bat
{
jlink.exe load.ini
}
load.ini
{
halt
loadbin file.axf, 0x3FFFFFCC
SetPC 0x40000000
g
q
}
3. Все работает. Только бинарные данные из ELF я, скорее всего, достаю не корректно (выкидываю первые 0x34 байта и гружу как есть).

Как достать бинарные данные из ELF без всякого "мусора"?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.