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

objcopy для pic30/xc16

Здравствуйте! Я работаю с несамостоятельным проектом на PIC24 (MPLAB X), требующем загрузчика, и хочу отлаживать его вместе с загрузчиком. Я умею изготавливать .hex файл, содержащий код приложения вместе с загрузчиком, прописав пользовательский скрипт, выполняемый после компиляции. Если теперь выбрать в меню "Launch Debugger Main Project", то отладчик нормально исполняет суммарный код и даже доходит до запуска приложения, но не отображает отладочной информации, т.к. она не содержится в .hex файле. Но если выбрать "Debug Main Project", то вместо изготовленного .hex файла отладчиком загружается .elf файл, содержащий отладочную информацию, но не содержащий кода загрузчика. Есть ли способ заставить отладчик загружать отладочную информацию из одного файла, а код из другого файла? Или есть ли способ добавить секцию в .elf файл или совсем заменить исполнимый код в нём ? Не существует утилиты objcopy ни для pic30, ни для xc16, есть ли её аналоги?

 

2018-06-27-0001.png

 

2018-06-27-0002.png

 

2018-06-27-0003.png

 

2018-06-27-0004.png

 

2018-06-27-0005.png

 

2018-06-27-0006.png

 

2018-06-27-0007.png

 

 

post-42957-1530087742_thumb.png

post-42957-1530087748_thumb.png

post-42957-1530087765_thumb.png

post-42957-1530087774_thumb.png

post-42957-1530087780_thumb.png

post-42957-1530087784_thumb.png

post-42957-1530087788_thumb.png

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


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

Дебаггер (аппаратный через ICSP) не работает непосредственно с релизом кода. Для запуска отладки нужен цельный исходник (вместе с отладчиком), который будет скомпилирован в код ДЛЯ ОТЛАДКИ. В этом коде даже маппинг ОЗУ перемещен, так как работа дебаггера требует использования части ОЗУ.

Единственным методом отладки при работе с произвольным кодом прошитым через бутлоадер, является формирование своего канала обмена данными между кодом и софтом на ПК.

При отладке через житаг ситуация иная, но Вы ничего не упоминали про житаг.

ЗЫ. Присмотрелся к сканам. А о какой отладке идет речь. когда в среде вообще нет подключенного отладчика?

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


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

Решение не очень системное, но для конкретного проекта пойдёт.

 

В теле программы резервируется место под загрузчик:

const unsigned int BootloaderBody[0x1800] __attribute__ ((space(prog),section(".BootloaderSect"),address(0x00000000)));

 

Утилита objdump расскажет, где это место оказалось в .elf файле:

"c:\Program Files\Microchip\MPLAB C30\bin\bin\pic30-elf-objdump.exe" -x 1.elf > 1.txt

 

Пример вывода из 1.txt:

.BootloaderSect 00003000 00000000 00000000 00000154 2**1

154 - это смещение.

 

А дальше другой кастомный скрипт запишет на это место мясо загрузчика, главное результат сохранить в тот же .elf файл, чтобы его потом схавал симулятор. В таком духе исполнение даже доходит до main())

 

ЗЫ. Присмотрелся к сканам. А о какой отладке идет речь. когда в среде вообще нет подключенного отладчика?

 

ЗЫ. симулятор чем не устроил? Настоящего отладчика пока нет, я здесь причём?

 

 

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


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

А симулятор реализует RTSP?

Что то я не припомню такой возможности у него?

 

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


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

Нашёлся способ проще - в дереве проекта, Loadables, тыкнуть правой кнопкой и выбрать добавить .hex файл. Единственное исключение - в этом файле и в проекте не должно быть пересекающихся областей, содержащих данные, иначе выдаётся сообщение "Data conflict at address 0x000003". Потому как, похоже, ни приоритетов, ни порядка загрузки эти файлы не имеют и конфликты не разрешаются, что в общем случае может не проканать, если часть кода - чужая.

 

Марк, предложенный Вами метод - с "формированием" "своего" канала обмена - по сути преставляет собой расширение метода со светодиодами и осциллографим, - метод безусловно полезный и правильный, и я его частенько применяю - не важно, является ли таким каналом какой-нибудь Modbus@UART или шина PCI. Но утверждать, что этот метод единственный, не только преждевременно, но и не совсем правильно (вообще, обычно, в Вашем возрасте становится понятно, что любые критичные высказывания, как правило, преждевременны и не совсем правильны). Потому что, постулируя что это единственно возможный метод, Вы фактически утверждаете одно из двух:

- Либо что ничто другое невозможно,

- Либо что ничего больше мне не должно быть нужно.

Обратите внимание, что ни о том, ни о другом, Вас вообще-то не спрашивают. А именно, я не спрашивал Вас о том, надо мне это или нет - данный вопрос я решу самостоятельно. Вас же Я спрашивал о том, как это сделать. Ну а по первому пункту - как видите, Вам уже привели 2 (два) альтернативных метода.

 

А симулятор реализует RTSP? Что то я не припомню такой возможности у него?

 

Симулятор много чего не симулирует, и что? Ещё раз повторяю, нужен он мне или нет и зачем - это я решу позже. Ваша потребность критиковать понятна по другим постам - можете не продолжать. К тому же, помоему, настоящие отладчики занимают часть ресурсов в конце памяти, так что ничего особо смещать не придётся.

 

Всех остальных, если кто видел искомую утилиту или знает, чем её заменить, попрошу поделиться. Заранее спасибо.

 

 

 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти