Jump to content

    
Sign in to follow this  
shamrel

Отладка MSP430 под эклипсом в linux.

Recommended Posts

Приветствую!

Собственно, в описании темы проблема озвучена. В настоящий момент развернут Toolchain для MSP, успешно подружен с Eclipse.

Из командной строки работает mspdebug.

Первый вопрос, как научить Eclipse дебажить код?

Уважаемый мною (читал ваш блог и не только на технические темы) zhevak в одной из тем на форуме рассказал как дебажить контроллер в консольном режиме. В связи с чем вопрос, как с этим работать? Как имея программу на Си произвести ее отладку? Как узнать адреса для точек останова, выполнить пошагово код, прочитать регистры периферии? Или для этого нужно сначала дизассемблировать?

 

Share this post


Link to post
Share on other sites

В продолжение.

Где взять crt0.S ? Где он должен лежать и для чего он вообще нужен? Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа:

/home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S

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

Share this post


Link to post
Share on other sites

Давно не работаю с MSP, отвечу в общем.

Для того, чтобы красиво отлаживать в эклипсе, надо поставить ее дополнение C/C++ GDB hardware debugging. Далее в настройках отладчика (Run->debug configurations) выбрать этот раздел (GDB hardware debugging), создать новую конфигурацию запуска, в ней исправить название отладчика (gdb) на название вашего (msp-gdb или как его там) и указать порт gdb-сервера. Затем вам нужно найти и запустить gdb-сервер, который будет связываться с вашей железкой. Я не знаю, является ли mspdebug gdb-сервером.

 

Добавлено: поверхностное гугление показывает, что в качестве gdb-сервера можно использовать gdbproxy.

Share this post


Link to post
Share on other sites
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. Не могу сказать. Не работаю с Эклипсом.

 

 

Уф-ф!

Share this post


Link to post
Share on other sites
Где взять crt0.S ? Где он должен лежать и для чего он вообще нужен?
В нем выполняется инициализация окружения перед запуском main(). Более подробно можно нагуглить. Во всяком случае, первые три ссылки на запрос "crt0.s" объясняют все очень подробно.

Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа:

/home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S

Предполагаю, что на вашем компьютере такого пути нет. Значит была прилинкован уже оттранслированный код из библиотеки и это путь на том компьютере, на котором эта библиотека собиралась.

Как Эклипс натравить на нужный файл?
Если вам действительно нужно подставить на место библииотечного свой файл - добавьте его в проект и используйте ключ -nostartfiles линкера.

Share this post


Link to post
Share on other sites

Сергей, zhevak, благодарю за советы!

Удалось поднять дебаг в Эклипсе, причем дебаг по Си коду.

Создал пустой файл crt0.S, доставил плагин "zylin".

Отладка запустилась. Точки останова ставятся, код выполняется. Значения переменных можно отследить. Однако, для работы с регистрами периферии нужен специальный файл с описанием архитектуры в формате XML (плагин "EmbSys Registers" ), иначе, только по адресам, естественно, под мой чип такого файла не оказалось. Вся система вышла на удивление нестабильной и глючной, потому виртуалка и буду IAR осваивать. :(

 

Резюме. Отлаживать MSP430 под Eclipse в Линух можно, но сложно. НЕ РЕКОМЕНДУЮ!

Еще раз, всем спасибо. Тему можно считать закрытой.

Share this post


Link to post
Share on other sites
доставил плагин "zylin".
Это что-то очень старое. Сейчас вся его функциональность реализована в дополнении "C/C++ GDB hardware debugging".

для работы с регистрами периферии нужен специальный файл с описанием архитектуры в формате XML (плагин "EmbSys Registers" ), иначе, только по адресам, естественно, под мой чип такого файла не оказалось
Ой. Он пишется вдумчиво за день. Или дописывается постепенно, по мере использования новой периферии в программе.

потому виртуалка и буду IAR осваивать.
Если есть возможность покупать его каждые пару лет (новую версию) и под каждое новое семейство процессоров - то почему бы и да?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this