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

 
 
 
Reply to this topicStart new topic
> objcopy для pic30/xc16, где найти или чем заменить
Ноль с переносом
сообщение Jun 27 2018, 08:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 6-01-09
Пользователь №: 42 957



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

















Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение


Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jun 28 2018, 04:59
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Дебаггер (аппаратный через ICSP) не работает непосредственно с релизом кода. Для запуска отладки нужен цельный исходник (вместе с отладчиком), который будет скомпилирован в код ДЛЯ ОТЛАДКИ. В этом коде даже маппинг ОЗУ перемещен, так как работа дебаггера требует использования части ОЗУ.
Единственным методом отладки при работе с произвольным кодом прошитым через бутлоадер, является формирование своего канала обмена данными между кодом и софтом на ПК.
При отладке через житаг ситуация иная, но Вы ничего не упоминали про житаг.
ЗЫ. Присмотрелся к сканам. А о какой отладке идет речь. когда в среде вообще нет подключенного отладчика?
Go to the top of the page
 
+Quote Post
Ноль с переносом
сообщение Jun 28 2018, 13:20
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 6-01-09
Пользователь №: 42 957



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

В теле программы резервируется место под загрузчик:
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())

Цитата(Марк_Я @ Jun 28 2018, 08:59) *
ЗЫ. Присмотрелся к сканам. А о какой отладке идет речь. когда в среде вообще нет подключенного отладчика?


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

Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jun 29 2018, 09:23
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



А симулятор реализует RTSP?
Что то я не припомню такой возможности у него?
Go to the top of the page
 
+Quote Post
Ноль с переносом
сообщение Jun 29 2018, 11:43
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 6-01-09
Пользователь №: 42 957



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

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

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


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

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


Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2018 - 19:58
Рейтинг@Mail.ru


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