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

 
 
 
Reply to this topicStart new topic
> Отладка в SRAM, LPC2400, Keil, J-Link
adnega
сообщение Jun 27 2008, 06:18
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Добрый день!

Использую 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 байта) или отладчик делает принудительный переход на начало ОЗУ?
{Может, и не нужна?}
Go to the top of the page
 
+Quote Post
viael
сообщение Jun 27 2008, 22:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата(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
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 30 2008, 12:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



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 без всякого "мусора"?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 20:21
Рейтинг@Mail.ru


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