Использование среды разработки Code::Blocks для программирования Launchpad

В свете последних чудесных плясок с бубном вокруг Code Compose Studio и осознанием невозможности сборки и компиляции проектов, написанных для свободно-распространяемого под лицензией GNU GPL, компилятора «mspgcc», я был вынужден провести некоторые поиски альтернативной среды разработки. И тут, на 43oh.com внезапно материализовалась чудесная инструкция, как подружить замечательную среду разработки «Code::Blocks» — в отличие от других, предлагаемых Texas Instruments — более человеческую, свободно распространяемую и бесплатную, не имеющую ограничений по размеру кода.


(инструкция переведённая, собранная из кусочков отсюда)
кросспост отсюда



1. Скачиваем с официального сайта среду разработки Code::Blocks
2. Скачиваем набор компилятора mspgcc

3. Создаём папку
"C:\hightec\"
туда распаковываем архив с компилятором, в папку "msp430";




4. Если ещё не установили, — устанавливаем «Code::Blocks», в первый запуск должен произойти автоматический поиск и обнаружение компилятора для MSP430;

5. Создаём новый проект: -> выбираем пустой проект -> жмём кнопку «go».

Задаём проекту имя, например «msp430-test». Само имя проекта здесь не важно, но оно будет использоваться в будущем для создания шаблона, поэтому выбираем на своё усмотрение. Желательно не использовать пробелы, это может привести к невозможности дальнейшей компиляции. В первый раз программа потребует задания папки для хранения проектов, — указываем ей путь и жмём далее;



7. Теперь необходимо выбрать наш компилятор, — выбираем из списка «GNU GCC compiler for MSP430» и жмём «finish». Сode::blocks выдаст около 3сообщений о невозможности установить кое-какие настройки для компилятора, — игнорируем эти сообщения;



8. Настраиваем компилятор:
  • Выбираем меню settings -> compiler. В верхней части необходимо снова выбрать тип компилятора из списка, — выбираем «GNU GCC compiler for MSP430»;

  • Переходим на вкладку «Toolchain executables». Во внутренней вкладке «Program files» должен отобразиться автоматически обнаруженный компилятор, поля должны соответствовать следующему:
C Compiler: msp430-gcc.exe
C++ compiler: msp430-g++.exe
Linker for dynamic libs: msp430-gcc.exe
Linker for static libs: msp430-gcc.exe
Make program: make.exe


  • -Переходим во вкладку «Additional paths» Добавляем путь к стандартным библиотекам
    C:\hightec\msp430\msp430\include

  • На вкладке "Compiler setting" выбираем "other options" Добавляем туда следующую строку:
    -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=msp430g2553

  • Переходим на вкладку "Linker settings", в ней в окне "other linker options" добавляем строку
    -Os -Wl,-gc-sections,-u,main -mmcu=msp430g2553

  • Сохраняем настройки;
 

9. Собираем проект. В панели меню выбираем "Project/Properties/Build targets". Убираем галочки с поля "auto-generate filename extension". В имени выходного файла меняем расширение с *.exe на *.elf. Жмём «ok», сохраняемся и выходим из этого диалога;


10. Создаём новый файл в проекте. В панели меню выбираем "File/new/file C/C++ file -> go -> next", задаём имя файла и полный путь, выбираем все опции и жмём "Finish";


Добавляем в файл следующее содержимое (для примера, можете добавить что-то своё):


#include "msp430g2553.h"
void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // останавливаем Watchdog;

}

и сохраняем его.


11. Скомпилируем наш проект. В панели меню выбираем "build -> build workspace". На выходе в окне логов должны получить что-то вроде такого сообщения:


-------------- Build: Debug in msp430-test (compiler: GNU GCC Compiler for MSP430)---------------
msp430-gcc.exe -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=msp430g2553 -c main.c -o obj\Debug\main.o
main.c:3:6: warning: return type of 'main' is not 'int' [-Wmain]
msp430-gcc.exe -o bin\Debug\msp430-test.exe obj\Debug\main.o -Os -Wl,-gc-sections,-u,main -mmcu=msp430g2553
Output size is 7.47 KB
Process terminated with status 0 (0 minutes, 5 seconds)
0 errors, 1 warnings (0 minutes, 5 seconds)

12. Сохраняем наш проект как шаблон, чтобы в дальнейшем использовать его для создания новых проектов, для этого в панели меню выбираем "file -> save project as template name the template" и жмём «Ok»;


Теперь мы можем создать новый проект из нашего шаблона:


"File -> New -> Project" выбираем наш шаблон, — готово! Остаётся научить наш компилятор дебажить и заливать прошивку в контроллер.

1. Для отображения информации о нашей прошивке добавим автоматический запуск после компиляции информационного файла msp430-size.exe из комплекта mspgcc. Для этого выбираем в панели меню "Project/Build options..." переходим на вариант "Debug" во вкладку "Pre/Post build steps", в поле "Post-build steps" добавляем строку
c:\hightec\msp430\bin\msp430-size.exe ${PROJECT_DIR}${TARGET_OUTPUT_FILE}
(без кавычек, в одну строку) и сохраняем;


После сборки проекта будет выводиться информация о размере файла для загрузки в контроллер и другая информация, примерно такая:

-------------- Build: Debug in msp430-test (compiler: GNU GCC Compiler for MSP430)---------------
msp430-gcc.exe -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=msp430g2553 -c main.c -o obj\Debug\main.o
main.c:3:6: warning: return type of 'main' is not 'int' [-Wmain]
msp430-gcc.exe -o bin\Debug\msp430-test.exe obj\Debug\main.o -Os -Wl,-gc-sections,-u,main -mmcu=msp430g2553
Output size is 7.47 KB
Running target post-build steps
c:\hightec\msp430\bin\msp430-size.exe C:\CodeBlocks-Projects\msp430-test\bin\Debug\msp430-test.exe
text data bss dec hex filename
112 0 2 114 72 C:\CodeBlocks-Projects\msp430-test\bin\Debug\msp430-test.exe
Process terminated with status 0 (0 minutes, 11 seconds)
0 errors, 1 warnings (0 minutes, 11 seconds)

 

2. Создадим макросы для заливки прошивки в контроллер, для этого создадим своё меню в панели "Tools":

Переходим в меню "Tools/ configure tools" и добавляем новое меню, например — "Upload". Указываем в качестве параметров:


Name — «Upload»

Executable
C:\hightec\msp430\mspdebug\mspdebug


Parameters
tilib -d USB --force-reset "prog ${PROJECT_DIR}${TARGET_OUTPUT_FILE}"


Working directory
${PROJECT_DIR}${TARGET_OUTPUT_DIR}



Параметры внизу можно настроить как удобнее, у меня установлен чекбокс на первом пункте, — это позволит не закрыться окну прошивальщика после заливки.

 

Теперь чтобы загрузить наш проект в контроллер, — нужно выполнить следующие действия:

1. Написать проект;

2. Собрать (Build) наш проект для launchpad, убедиться в отсутствии ошибок в выводе компилятора

3. Загрузить получившийся файл в контроллер (Tools/Upload)

 

Готово


Загружаем в контроллер наш тестовый проект: "Tools/Upload":


(я использовал пример с миганием светодиода, используя прерывания)

В результате получаем:



файлы проекта

оригинальный источник
там же можно посмотреть видео с описанием на английском языке.
Статья в сообществе по Code::Blocks

Комментарии (75)

RSS свернуть / развернуть
А ещё с помощью mspdebug отлаживать можно, он GDB сервер реализует.
0
да, но хочется их объединить с C::B
0
Так C::B ж вроде GDB и поддерживает в качестве отладчика?
0
Поддерживает, только я не понял, как оно работает вместе с мсп430.
0
Если я правильно понимаю, то нужно дебаггером в настройках компилятора указать прилагающийся msp430-gdb, ему в параметрах указать подключаться к GDB-серверу, а в качестве оного указать кодблоксу в настройках запускать при запуске дебага mspdebug. Правда, не знаю как конкретно это делается. А может GDB и сам умеет сервер запускать, если указать это ему в командной строке.
0
Довольно просто. В случае MSP430 Launchpad в качестве отладчика.
В поле «Additional shell commands->Before connection» пишем:
Debug.cmd

В файле Debug.cmd:
start mspdebug rf2500 < mspdebug_commands.txt

В файле mspdebug_commands.txt:
prog main.elf
gdb 1234

Ну и не забыть msp430-gdb.exe в качастве текущего отладчика выбрать.
+1
А зачем файл debug.cmd? Что мешало его содержимое сразу в Additional shell commands поместить? Алсо, mspdebug нельзя без скармливания ему команд из файла настроить?
0
Что мешало его содержимое сразу в Additional shell
Так было просто удобнее. А может CB start не прожевывал, чтоб запустить процесс асинхронно. Не помню уже.
0
start вроде и нужен чтобы асинхронно запускать. Для этого ключик какой-то есть. А оно сервер по окончанию отладки закрывает или вручную надо?
0
Можно без всяких cmd.
В домашней папке размещается файл .mspdebug с содержимым:
opg gdb_loop true
gdb

В отдельном окошке запускаем mspdebug rf2500
— и он сам вступает в цикл коннекта.

А в настройках проекта (на картинке — во вкладке Additional GDB Commands) добавляем после подключения команды
erase
load

Соответственно, запускаем проект не зелёной стрелочкой (запуск), а красной (debug/continue). При этом C::B цепляется к отладчику, загружает в него программу, ставит точки останова — и отладка пошла!

Что НЕ работает — отображение регистров процессора.
Но это всегда можно исправить командой info registers прямо в панели отладчика.
Или display $регистр — если хочется отслеживать значение после каждого шага программы.
+1
Не получается. Уже мажется, но все еще воняет. Подробно:
1) в директории /home создал файл .mspdebug с содержимым:
opt gdb_loop true
gdb 1234

(добавил порт 1234 — т.к. без него gdb ругался
Can't bind to port 2000: Address already in use)
2) Во вкладке Remote connection опций проекта Debug добавил localhost и port 1234 — как описал neiver
3) Там же в Additional GDB commands добавил erase и load после соединения (как раз до этого еще и не дохожу)
4) запускаю отладчик (из /home):
mspdebug rf2500
5) Стартуя, отладчик пишет:
Bound to port 1234. Now waiting for connection...
а когда в Кодблокс нажимаю красную кнопку Отладка, вижу следующее:
— Кодблокс пишет
— mspdebug пишет:

То есть, mspdebug начал выполнять команду gdb 1234 — и сломался. А Кодблокс законектился и пишет, что программа не работает.
Что не так?
0
А я что-то не пойму: в загружаемом архиве с mspgcc вовсе нет папки с mspdbg.
0
0
хм. а ведь да, там нет mspdebug. Я скачивал с энергией вместе, наверное там был
0
Так чьо делать-то? Просто поиск mspdebug дает пакеты под Линукс. Это тоже интересно, но в данном случае мы же говорим о винде? Или?
0
Уж извините за нубство, но кто-то может объяснить: при создании инструмента Upload автор предлагает указывать Executabnle: C:\hightec\msp430\mspdebug\mspdebug. Следует ли из этого, что мне нужно искать не библиотеку MSP430.DLL, а некую программу, использующую эту библиотеку? Если да — то какую?
0
файл mspdebug.exe
0
Ну, это я из Энергии достал. Ща как-то работает, хотя отладку я так и не смог запустить.
Но хочу обратить внимание на одну ошибочку, которую коллега amx (на форуме) помог мне обнаружить: в Compiler settings -> Toolchain executables -> Linker for static libs указано msp430-gcc.exe. Это не позволяет создавать библотеки. Нужно указать:
msp430-ar.exe
0
забыл на радиокоте спросить — этот редактор поддерживает автокомплит и подобные плющки? сегодня видел пост на хабре про плагини подсветки кода для еклипса — что-то новое
и что там с отладчиками и компиляторами для стм32 и авр? у меня атмел студио 6 не ставится что-то на хп и винавр давно не обновлялся
0
калыч, внимание, вопрос!!! каким МПХ твой вопрос касается мсп430? наличием кодеблока как среды?
0
он не относится к мсп430
он относится к иде и если он поддерживает автокомплит и все такое, то я бы заменил им все остальные

я читал про еклипс и винавр, вот и спросил, может быть эта среда тоже поддерживает другие мк
0
дело не в среде. дело в наложении рук. и только.
0
О, он чудесен! Он поддерживает всё! О подробностях можно почитать в предыдущей статье, той, что по ссылке в самом низу.
0
0
  • avatar
  • slur
  • 25 марта 2013, 21:03
к чему бы это?
0
забыл на радиокоте спросить — этот редактор поддерживает автокомплит и подобные плющки? сегодня видел пост на хабре про плагини подсветки кода для еклипса — что-то новое
и что там с отладчиками и компиляторами для стм32 и авр? у меня атмел студио 6 не ставится что-то на хп и винавр давно не обновлялся
Это к посту kalobyte-ya
0
инфа устарела и тулчейна больше нет
0
как так? Куда делся? О_о
0
Никуда он не делся: для Linux
для винды.
0
Да, версия 3.41.
0
3.4.1 то есть :)
0
А какой версии там GCC?
0
4.6.2, а у меня в системе — 4.7.2. Slackware-current.
0
а меня перекидывало на страницу со студией
сейчас нормально открылось
0
Хмм. Ты прав насчет устарел, не обновлялся он уже с августа 2012-го как минимум… А в исходниках ядра вроде бы все что нужно и так есть, да и gcc умеет собирать код для AVR…
0
а зачем там идут хедеры к нему? разве они не идут в комплекте с инсталлятором для виндовса или это для красноглазиков специально?
0
Как зачем? И в виндовом тулчейне они есть.
0
работает и в линукс, компилит линкует, отладчик ещё не пробовал
0
Вообще, — Песня! Не правда ли?!
0
не совсем, офицальная поддержка msp430 заявлена только под виндовс, под линукс работает но через костыли, тоесть в списке компиляторов изначально gnu gcc msp нет, я делал копированием от gnu gcc и правил там пути и название компиляторов что работает, но по идее костыль, посмотрел поддерку авр так там все лучше там и авр компилятор есть и там в авр компиляторе можно тип процессора выбрать, хочу с эти разобраться добавить msp430 среда мне понравилась
пока разбирабсь с Wizardom для msp430 посмотрим что получится
0
Я аж светился от радости, когда проекты, выдававшие 100500+ ошибок под CCS (например — libemb), вдруг чудесным образом вообще без проблем скомпилировались в C::B. В CCS почему-то даже предпроцессор отказывался работать, игнорирую дефайны для мсп430 и ругаясь на дефайны для стм.
0
*игнорируя
0
запили MSP430 Wizard, поддержку средой msp430-gcc в линуксе
ток это дело в общем оказалось тупиковым походу, в свн сейчас нет ни msp430 ни avr
(в IRC никто не рассказал почему так)
поэтому разработчикам патчи отправлять не буду, если надо пишите вышлю или deb или исходники
0
Откуда дровишки? Я постоянно пересобираю C::B из SVN под линухом и что-то пока не заметил, что бы у меня оттуда исчез AVR =)
Отправлять wizard разработчикам надо, если он не заточен под устаревший фреймфорк компиллеров. Теперь, кстати, описание компиляторов живёт в src/plugins/compilergcc/resources/compilers и MSP430-GCC там есть (в том числе и для линукс).
0
спасибо! вероятно я не там искал
пойду смотреть
0
Буквально на днях прилелел свежий пакет в убунту, где всё запилено.
Правда, коряво.
Ланчпадовских mmcu нет в опциях.
Линкером прописат msp430-g++ вместо gcc.
Но в целом работает.
0
Дык, слать патчи разрабам надо. Пвтчи с пояснениями или, в крайнем случае, фьючер-реквесты.
0
тут каг-бэ не CodeBlocks в ходу, а gcc. Если последний собирает всё нужное — то совершенно никаких проблем нет пришпилить профиль к C::B.
0
кто предпочитает Eclipse есть неплохая статья, правда я ее не опробовал :)
0
Да, статья хорошая :)
0
У меня при билде ругается на «can not find -lstdc++». Никто не сталкивался с таким?
0
Похоже, проблема в том, что компилер работает в С++ режиме, а не С, и вызывает msp430-g++.exe вместо msp430-gcc. Но как выбрать режим С, не понятно.
0
Дошло. У меня в линкере был прописан g++ почему-то. Сделал как на картинке, и все заработало.
we.easyelectronics.ru/uploads/images/00/32/70/2013/03/25/5c862d.png
0
А это по дефолту сделали.
И вообще говоря — готоывй шаблон компилятора там весьма условно «готовый».
Что, однако, никак не мешает его «допилить» — благо нужно всего лишь поправить имя линкера, да создать ещё профиль дебаггера.
0
Тут несколько моментов.
1. (важно!) — нужно поменять линковщик с msp430-g++ на msp430-gcc (причём это и для C и для C++).
2. В последних C::B можно самому задать опции компилятора. Не в отдельном меню строчкой, а именно в гуе. Правый клик на списке — и там выбираем добавить опцию. Например, для msp430g2452 добавляем опцию с именем msp430g2452, compiler flags -mmcu=msp430g2452, linker flags=msp430g2452, категория MSP430 MCU derivatives, exclusive=true.
Теперь можно выбирать этот чип прямо в свойствах проекта — и нужные ключи будут автоматически добавлены к опциям компилятора и отладчика.

Ещё полезный момент: при отладке достаточно больших проектов DEBUG-версия может не поместиться в памяти. В этом случае можно вынести отлаживаемый кусок кода в отдельный файл и задать для него отдельную команду сборки (например, без оптимизации). А весь остальной проект собирать с -Os (оптимизация по размеру). Небольшой неоптимизированный кусочек уже вполне помещается в память, и отладка становится возможной. Ну и нужно не забыть поставить опцию -g для всего проекта, чтобы были отладочные символы (они НЕ прошиваются в чип, но нужны отладчику)
0
круто! надо будет попробовать. Я в последнее время небольшие проекты/части программы отлаживаю в CCS, а весь проект уже собираю в C::B. Чем удобен CCS — так это тем, что можно наставить брейкпоинтов кучу, ещё в нём удобно смотреть регистры и значения переменных.
0
Ну, брекпоинты (аппаратные) ограничены возможностями чипа.
Я вот сейчас пишу проектик на G2452 — и там этих поинтов два :). При том, что gdb использует один для своих нужд (шаг по строчкам кода) — если оба поставить себе, то шаг по строчкам превращается в заход во все функции, что уныло.
Но учитывая, что CCS на линухе (ubuntu) с ланчпадом не работает ВООБЩЕ, это всё же неплохой вариант.
Регистры и значения переменных тоже вполне смотрятся — причём переменные напрямую средствами C:: В, а остальное — в консоли gdb. В нём же можно делать и напрямую недоступные вещи (например, поставить брекпоинт непосредственно по адресу памяти).
0
при отладке достаточно больших проектов DEBUG-версия может не поместиться в памяти
Не надо для DEBUG-версии устанавливать опции оптимизации отличающимися от Release-версии. За исключением отдельных случаев.
0
Обычно для «фаршированных» проектов я ставлю -Os.
Из-за этого отладка не всегда комфортна — многие локальные переменные оказываются недоступными (optimized out), ход программы тоже не всегда предсказуем.
Отсюда и возникает вариант: нужную для отладки процедуру запилить в отдельный файл; для него отключить все оптимизации. А остальные файлы проекта по-прежнему с -Os.
0
отладка не всегда комфортна — многие локальные переменные оказываются недоступными
Есть такое дело.

для него отключить все оптимизации
Зачем же всеотключать, есть ещё O2, O1.
Не факт что файл с включённой оптимизацией потом работать будет.
0
O1, O2 — это уже оптимизация по скорости. Файл, как правило, получается бОльшего размера.
А включенная оптимизация на работоспособность лично у меня не влияла ни разу. Единственное — в этом случае нужно включать -Wall и внимательно изучать все сообщения.
Есть ещё вариант — разрабатывать на чипе с более комфортными ограничениями (например, если я целюсь в 8кб — можно временно и комфортно отлаживать на 16кб чипе).
В целом схема проекта с одним неоптимизированным файлом такая:
1. Добавляю файл unoptimized.cpp (ну, мне С++ просто комфортнее) — ТОЛЬКО в конфиг DEBUG (т.е. в релизной версии он вообще не будет включаться в компиляцию)
2. Задаю для него кастомное правило сборки — как раз-таки вызов компилятора без оптимизации.
3. Для релизной версии задаю в опциях -DNDEBUG — и добавляю в удобном месте (как правило, в самом «подвале») другого рабочего исходника #ifdef NDEBUG #include 'unoptimized.cpp' #endif.
И на этом всё. Отладочная версия от релизной отличается только этим файлом, а также наличием опции -g и отсутствием стрипа (хотя стриповать символы и в релизной версии тоже незачем; mspdebug их не будет заливать в устройство в любом случае).
0
Вот блин объясните пожалуйста!
Почему не компилируется цикл for?
for (int i = 0; i <0; i++);

Вот, что пишет:
error: 'for' loop initial declarations are only allowed in C99 mode|
0
добавить -std=c99 к опциям компилятора
0
это где? если не секрет :)
0
0
сделайте так:
int i = 0;
for(i=0; i<0; i++);

объявление переменных в инициализаторе цикла в чистом си вроде не поддерживается.
0
да, на гуглил тоже самое :)
Вот что подскажите. Все сделал по инструкции скачал тестовый проект все прошивает и работает.
А если создаю свой проект то прошивка не загружается, в консоли это -> -1

В чем может быть дело ?
Еще, я, заметил в папке тестового проекта есть msp430-test.exe и msp430-test.layout
Как быть? :)
0
Хм. Вот чет msp430g2744 не компилит.
Вот что выдает — «cannot open linker script file memory.x: No such file or directory»
0
хм, сегодня поставил их «Code composer studio 6», до сих пор под впечатлением )
Прям и не скажешь что Eclipse, все шустрое, отточенное-вылизаное — просто счастье )
Теперь появилось огромное желание изучать MSP430, тем более эта студия позволяет разрабатывать и под Tiva C в том числе.
Как народ пользует IAR — не могу даже преставить.
0
одно только расстраивает — то ли SBW такой медленный, или сама по себе отладка такая (
0
Ооо, это Вам на самом деле очень повезло, что начали с 6-й версии! 6-я версия — это просто шедевр, наконец-то допилили до того, что можно комфортно работать. Предыдущие были очень даже хороши насчёт глюков и тормозов, не всегда нормально компилятор компилил, интерфейс с МК отваливался, и другие интересные и непредсказуемые вещи происходили. А IAR лично у меня вызвал отвращение с первой же попытки его приручения.
Я до 6-й большие проекты даже не пытался в CCS собирать, отлаживал по частям, а цельный проект в C::B уже делал. Теперь вроде и в 6-й всё работает.
0
а вот скажите пожалуйста…
имеет смысл вместо SBW что есть на демоплате, докупать клон FET430UIF?
Будет ли JTAG заметно быстрее?
0
вроде SBW есть уже почти на всех MSP430G,MSP430L и конечно MSP430FR (другие думаю нет смысла пробовать, сильно устарели по сравнению с темиже STM32L0xx, а цена то огого )).
0
SBW точно есть на LP5529
0
хотел написать jtag, конечно
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.