Цитата(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. Не могу сказать. Не работаю с Эклипсом.
Уф-ф!