Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отладка MSP430 под эклипсом в linux.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
shamrel
Приветствую!
Собственно, в описании темы проблема озвучена. В настоящий момент развернут Toolchain для MSP, успешно подружен с Eclipse.
Из командной строки работает mspdebug.
Первый вопрос, как научить Eclipse дебажить код?
Уважаемый мною (читал ваш блог и не только на технические темы) zhevak в одной из тем на форуме рассказал как дебажить контроллер в консольном режиме. В связи с чем вопрос, как с этим работать? Как имея программу на Си произвести ее отладку? Как узнать адреса для точек останова, выполнить пошагово код, прочитать регистры периферии? Или для этого нужно сначала дизассемблировать?
shamrel
В продолжение.
Где взять crt0.S ? Где он должен лежать и для чего он вообще нужен? Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа:
/home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S
Как Эклипс натравить на нужный файл?
Сергей Борщ
Давно не работаю с MSP, отвечу в общем.
Для того, чтобы красиво отлаживать в эклипсе, надо поставить ее дополнение C/C++ GDB hardware debugging. Далее в настройках отладчика (Run->debug configurations) выбрать этот раздел (GDB hardware debugging), создать новую конфигурацию запуска, в ней исправить название отладчика (gdb) на название вашего (msp-gdb или как его там) и указать порт gdb-сервера. Затем вам нужно найти и запустить gdb-сервер, который будет связываться с вашей железкой. Я не знаю, является ли mspdebug gdb-сервером.

Добавлено: поверхностное гугление показывает, что в качестве gdb-сервера можно использовать gdbproxy.
zhevak
Цитата(shamrel @ Mar 20 2015, 13:54) *
1. как научить Eclipse дебажить код?

2. как дебажить контроллер в консольном режиме. В связи с чем вопрос, как с этим работать?

3. Как имея программу на Си произвести ее отладку?

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

5. Где взять crt0.S ?

6. Где он должен лежать и для чего он вообще нужен?

7. Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа:
/home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S

8. Как Эклипс натравить на нужный файл?


Ты в ответе за тех кого приручил (с) Блин!


1. К сожалению, не могу подсказать. Я с эклипсом не работаю. Для моего компа он слишком "тяжелый", поэтому я его не использую.


2. На сколько я помню, mspdebug по Си-шному исходнику вроде бы не "бегает". Что-то не припомню чтобы я отлаживал в нём Си-шные проги. я уж года два наверно с MSP не работаю, забывается всё быстро.


3. Что бы я сделал, если бы коснулось меня проблема отлаживать Си-шные проги в mspdebug. Я бы вывел из elf-файла дизассемблированный листинг, в нем будут физические адреса команд и данных, перемежающиеся с исходным кодом на Си. отлаживаживать. Имея под руками такой листинг, я думаю, не составит больших проблем установить с помощью mspdebug точки останова, а так же проверять значения ячеек памяти с данными. Ну, как-то так, наверно.

Вывод листинга из elf-а можно существить командой:

$ msp430-objdump -dSt myproga.elf > myproga.lst

Вместо myproga.elf, разумеется, Вы должны подставить имя своего файла.


4. MSP430 можно отляживать с помощью gdb-сервера. gdb-сервер -- это такая программа, которая с одной стороны общается через отладчик с вашим МК, а с другой стороны -- принимает запросы (команды) от клиентской программы и отдает ей результаты. К gdb-серверу обычно подключаются через сокеты (сетевой IP-адрес + TCP/IP-порт). Таким образом, можно отлаживать устройства на разных компах. Если отладка производится на том же компе, где расположена программа клинета, то вместо сетевого адреса либо ничего не указывается, либо указывается localhost. (Имя localhost траслируется в IP-адрес 127.0.0.1, что означает, что это тот же самый комп.)

Вот пример работы с gdb-сервером для msp430:

После того как залили код в МК, запускаем прокси-сервак на порту 2000 (можно взять любой другой ещё не занятый):

msp430-gdbproxy --debug --port=2000 msp430

Далее создаем в рабочем директории скрытый файл .gdbinit и записываем в него следующие строки:

set remoteaddresssize 64
set remotetimeout 999999
target remote localhost:2000

После чего запучкаем отладчик:

msp430-gdb myproga.elf

Это в кратце. Ну а для получения более детальных знаний, нужно гуглить. У меня нет возможности для более глубоких консультаций. Для этого лучше нужно написать книгу или что-то в этом духе. Мне кажется, что за меня это наверняка уже кто-то сделал, нужно просто поискать.


5. Ну, грубый ответ такой -- сначала погуглить, и если гугл ничего полезного не даст, то написать самому. Сложного в crt0.S ничего нет. Этот файл предназначен для начальной (я бы сказал -- аппаратной) настройки процессора переде тем как будет вызвана Си-шная функция main. К этим настройкам следует отнести, например, (временно) отключить вотчдог, установить указателя стека, настроить систему тактирования ядра и периферии, настроить периферийные устройства. Возможно вам понадобиться очистить память, проинициализировать какие-нибудь данные. Ну и в конце этого файла нужно вызвать main.

Некоторые компиляторы (с языка Си) не требуют наличия такого файла (crt0.S). На сколько я помню, так делал AVR CodeVision v.1.24. А вот про msp430-gcc -- я ничего не могу сказать. Не помню, что там


6. Лежать crt0.S может как в рабочем директории наравне с другими исходными файлами, так и в тандартном пути (там где располагаются файлы библиотек статической линковки). Всё зависит от задач и потребностей программиста. Не важно, где находится этот файл. Важно только иметь к нему правидльный прописанный путь. А для чего он нуже, я уже ответил в передыдущем пункте.


7. Да хрен его знает! А Вы случаем не смотрели -- там файл реально есть или он находится где-то в другом месте? Попробуйте поискать его.

На всякий случай команда для поиска:

$ find ~/pf -name crt0.S

запомнить ее формат просто: find <где искать> <что искать> <что делать, когда найдем>

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

Опция что искать может быть не одна. Это скорее целий набор критериев для поиска. Мы можеи искать по имени (-name), по типу (-type), по размеру, по дате создания, по владельцу, по правам доступа и т.д.

Если это сложно (извините, я не знаю какой у Вас уровнь знания Линукса ), то можно поступить по другому. Линукс поддерживает базу данных (условно) по всем файлам, которые у него есть. Перед тем как произвести поиске по этой базе, нужно сначала её подновить. Сама БД не подновляется, только по команде пользователя. Поэтому, если на разделах файловой системы производились какие-то изменения (удалялись файлы, записывались новые), то БД не будет соответствовать файловой системе. Подновить БД можно командой

# updatedb

или

$ sudo updatedb

После того как БД будет актуализирована, можно в неё искать файл. Команда поиска очень простая (шаблон команды -- locate <имя файла>):

$ locate crt0.S

В этом случае поиск будет знчительно быстрее, но гибкости в нём будет -- никакой.


8. Не могу сказать. Не работаю с Эклипсом.


Уф-ф!
Сергей Борщ
Цитата(shamrel @ Mar 20 2015, 09:54) *
Где взять crt0.S ? Где он должен лежать и для чего он вообще нужен?
В нем выполняется инициализация окружения перед запуском main(). Более подробно можно нагуглить. Во всяком случае, первые три ссылки на запрос "crt0.s" объясняют все очень подробно.
Цитата(shamrel @ Mar 20 2015, 09:54) *
Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа:
/home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S
Предполагаю, что на вашем компьютере такого пути нет. Значит была прилинкован уже оттранслированный код из библиотеки и это путь на том компьютере, на котором эта библиотека собиралась.
Цитата(shamrel @ Mar 20 2015, 09:54) *
Как Эклипс натравить на нужный файл?
Если вам действительно нужно подставить на место библииотечного свой файл - добавьте его в проект и используйте ключ -nostartfiles линкера.
shamrel
Сергей, zhevak, благодарю за советы!
Удалось поднять дебаг в Эклипсе, причем дебаг по Си коду.
Создал пустой файл crt0.S, доставил плагин "zylin".
Отладка запустилась. Точки останова ставятся, код выполняется. Значения переменных можно отследить. Однако, для работы с регистрами периферии нужен специальный файл с описанием архитектуры в формате XML (плагин "EmbSys Registers" ), иначе, только по адресам, естественно, под мой чип такого файла не оказалось. Вся система вышла на удивление нестабильной и глючной, потому виртуалка и буду IAR осваивать. sad.gif

Резюме. Отлаживать MSP430 под Eclipse в Линух можно, но сложно. НЕ РЕКОМЕНДУЮ!
Еще раз, всем спасибо. Тему можно считать закрытой.
Сергей Борщ
Цитата(shamrel @ Mar 23 2015, 11:41) *
доставил плагин "zylin".
Это что-то очень старое. Сейчас вся его функциональность реализована в дополнении "C/C++ GDB hardware debugging".
Цитата(shamrel @ Mar 23 2015, 11:41) *
для работы с регистрами периферии нужен специальный файл с описанием архитектуры в формате XML (плагин "EmbSys Registers" ), иначе, только по адресам, естественно, под мой чип такого файла не оказалось
Ой. Он пишется вдумчиво за день. Или дописывается постепенно, по мере использования новой периферии в программе.
Цитата(shamrel @ Mar 23 2015, 11:41) *
потому виртуалка и буду IAR осваивать.
Если есть возможность покупать его каждые пару лет (новую версию) и под каждое новое семейство процессоров - то почему бы и да?
mdmitry
EmbSysRegView поддерживает msp430: MSP430G2553. Информация о создании конфигурационных файлов на сайте разработчика есть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.