maxntf 0 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Подскажите как отладчику указать, чтоб он стартовал с определенного адреса? Читал, что вроде как нужно в скаттер файле определить точку входа через команду 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 1 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Я отлаживаю программу без загрузчика, с обычными адресами. А потом ту же программу компилирую под загрузчик, со сдвинутым адресом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Я отлаживаю программу без загрузчика, с обычными адресами. А потом ту же программу компилирую под загрузчик, со сдвинутым адресом.А я заставляю отладчик при запуске/сбросе записать в VTOR адрес начала образа (=начала таблицы векторов) приложения и загрузить в указатель стека число из нулевого вектора приложения, а в PC - число из первого вектора. Но у меня не Кейл. Может и Кейла можно научить такому? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Может и Кейла можно научить такому? ЕМНИП, там скрипт отладчика всё это позволяет сделать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Да любой отладчик или загрузчик, знающий что такое кортекс, должен иметь скрипт устанавливающий стек и точку входа. А VTOR я обычно в самом приложении устанавливаю значением, которое линкер подставляет. Так надёжнее, мало ли откуда загрузиться придётся. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Может. Кейл может. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 41 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Если бутлоадер корректно всё загружает, то Вы и попадёте на свой 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 3 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба Подскажите как отладчику указать, чтоб он стартовал с определенного адреса? Эт зависит от отладчика. В общем случае смотреть надо скрипты отладчика под каждый конкретный чип. Например J-Link прежде чем загрузит отладочную версию программы выполняет кучу скриптов. Там и нейтрализация WDT, и активизация схем тактирования, и операции с памятью и т.д. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maxntf 0 15 сентября, 2018 Опубликовано 15 сентября, 2018 (изменено) · Жалоба Отлаживаю в Keil - ST-Link Debugger. Попробовал по совету x893 создал файл debug.ini. Похоже это то, что мне нужно. Только там получается что при запуске отладчика, он стартует с 0x08005004, а после reset(в отладчике) уже с 0x08000004. Помогите пожалуйста допилить этот ini. Изменено 15 сентября, 2018 пользователем maxntf Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба Помогите пожалуйста допилить этот ini. SP=*(int*)0x08000000 PC=*(int*)0x08000004 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maxntf 0 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба 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 1 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба У меня сейчас получается что при загрузке отладчика срабатывает функция Setup(), а когда я нажимаю в нем Reset то SP и PC сбрасываются. И получается что нужно перезагружать отладчик. Можно в командной строке отладчика вызвать "Setup()". Кстати, вот что-то интересное пишут. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maxntf 0 15 сентября, 2018 Опубликовано 15 сентября, 2018 (изменено) · Жалоба Кстати, вот что-то интересное пишут. Спасибо! То, что нужно. 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(); } Изменено 15 сентября, 2018 пользователем maxntf Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться