Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отладка программы под бутлоадер.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > Keil
maxntf
Подскажите как отладчику указать, чтоб он стартовал с определенного адреса?
Читал, что вроде как нужно в скаттер файле определить точку входа через команду ENTRY. Только как это сделать я не знаю, что указывать в ее параметрах?
Или это не то?
Сам файл у меня тот, что предлагается стандартно (с измененной адресацией под бут)
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08005000 0x0000B000  {   ; load region size_region
  ER_IROM1 0x08005000 0x0000B000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x200000C0 0x00001F40  { ; RW data
   .ANY (+RW +ZI)
  }
}
ViKo
Я отлаживаю программу без загрузчика, с обычными адресами. А потом ту же программу компилирую под загрузчик, со сдвинутым адресом.
Сергей Борщ
QUOTE (ViKo @ Sep 14 2018, 18:24) *
Я отлаживаю программу без загрузчика, с обычными адресами. А потом ту же программу компилирую под загрузчик, со сдвинутым адресом.
А я заставляю отладчик при запуске/сбросе записать в VTOR адрес начала образа (=начала таблицы векторов) приложения и загрузить в указатель стека число из нулевого вектора приложения, а в PC - число из первого вектора. Но у меня не Кейл. Может и Кейла можно научить такому?
scifi
Цитата(Сергей Борщ @ Sep 14 2018, 21:14) *
Может и Кейла можно научить такому?

ЕМНИП, там скрипт отладчика всё это позволяет сделать.
VladislavS
Да любой отладчик или загрузчик, знающий что такое кортекс, должен иметь скрипт устанавливающий стек и точку входа. А VTOR я обычно в самом приложении устанавливаю значением, которое линкер подставляет. Так надёжнее, мало ли откуда загрузиться придётся.
ViKo
Может. Кейл может.
x893
Если бутлоадер корректно всё загружает, то Вы и попадёте на свой Reset_Handler.
Ставьте BP на него или на main().

Или сделайте файл debug.ini примерно такой (F1 поможет)

FUNC void Setup (void) {

SP = _RDWORD(0x08005000); // Setup Stack Pointer
PC = _RDWORD(0x08005004); // Setup Program Counter
XPSR = 0x01000000; // Set Thumb bit
_WDWORD(0xE000ED08, 0x08005000); // Setup Vector Table Offset Register
}

Setup();
LOAD %L INCREMENTAL nocode // load debug info without performing reset
// or
// LOAD %L INCREMENTAL

g,main

Как то так
AlexandrY
Цитата(maxntf @ Sep 14 2018, 16:34) *
Подскажите как отладчику указать, чтоб он стартовал с определенного адреса?

Эт зависит от отладчика.
В общем случае смотреть надо скрипты отладчика под каждый конкретный чип.
Например J-Link прежде чем загрузит отладочную версию программы выполняет кучу скриптов.
Там и нейтрализация WDT, и активизация схем тактирования, и операции с памятью и т.д.
maxntf
Отлаживаю в Keil - ST-Link Debugger.

Попробовал по совету x893 создал файл debug.ini. Похоже это то, что мне нужно. Только там получается что при запуске отладчика, он стартует с 0x08005004, а после reset(в отладчике) уже с 0x08000004.
Помогите пожалуйста допилить этот ini.
scifi
Цитата(maxntf @ Sep 15 2018, 10:10) *
Помогите пожалуйста допилить этот ini.

SP=*(int*)0x08000000
PC=*(int*)0x08000004
maxntf
Цитата(scifi @ Sep 15 2018, 13:37) *
SP=*(int*)0x08000000
PC=*(int*)0x08000004


Это куда?
Вот файлик debug.ini
Код
FUNC void Setup (void) {

SP = _RDWORD(0x08005000); // Setup Stack Pointer
PC = _RDWORD(0x08005004); // Setup Program Counter
XPSR = 0x01000000; // Set Thumb bit

}

Setup();
LOAD %L INCREMENTAL nocode // load debug info without performing reset


Там бы дописать что-то типа:
Код
IF(RESET) Setup();


Только возможно ли такое?
У меня сейчас получается что при загрузке отладчика срабатывает функция Setup(), а когда я нажимаю в нем Reset то SP и PC сбрасываются. И получается что нужно перезагружать отладчик.
scifi
Цитата(maxntf @ Sep 15 2018, 14:00) *
У меня сейчас получается что при загрузке отладчика срабатывает функция Setup(), а когда я нажимаю в нем Reset то SP и PC сбрасываются. И получается что нужно перезагружать отладчик.

Можно в командной строке отладчика вызвать "Setup()".
Кстати, вот что-то интересное пишут.
maxntf
Цитата(scifi @ Sep 15 2018, 14:27) *
Кстати, вот что-то интересное пишут.

Спасибо! То, что нужно.
Код
FUNC void Setup (void) {

SP = _RDWORD(0x08005000); // Setup Stack Pointer
PC = _RDWORD(0x08005004); // Setup Program Counter
XPSR = 0x01000000; // Set Thumb bit

}

Setup();
LOAD %L INCREMENTAL nocode // load debug info without performing reset

FUNC void OnResetExec(void) {
    Setup();
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.