LINUX.ORG.RU

Qt Creator и микроконтроллеры

 , , , ,


3

3

Хочу попробовать использовать Qt Creator (всё же это очень хорошая IDE) для разработки под микроконтроллеры, такие как AVR и MSP430.

UPD: С помощью CMake всё получилось. Сейчас CMakeLists.txt в Qt Creator выглядит так:

project(test)
SET(MCU "msp430f5529")
SET(FIRMWARE_FILE ${PROJECT_NAME}.elf)

SET(CMAKE_SYSTEM_NAME Generic)
SET(CMAKE_C_COMPILER msp430-elf-gcc)
SET(CMAKE_CXX_COMPILER msp430-elf-g++)

SET(CMAKE_C_FLAGS "-mmcu=${MCU} -Os")
SET(CMAKE_C_LINK_FLAGS "")
SET(CMAKE_CXX_FLAGS "-mmcu=${MCU} -Os")
SET(CMAKE_CXX_LINK_FLAGS "")
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)

INCLUDE_DIRECTORIES("/opt/ti/mspgcc/msp430-elf/include")

cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${FIRMWARE_FILE} ${SRC_LIST})

add_custom_target("upload"
	mspdebug tilib "prog ${FIRMWARE_FILE}"
	DEPENDS ${FIRMWARE_FILE}
	COMMENT "Uploading ${FIRMWARE_FILE} to ${MCU} using mspdebug"
)

make upload выполняется на шаге деплоймента, так что нажав «Запустить» в IDE я прошиваю микроконтроллер.

Теперь новый вопрос:

Можно ли прикрутить отладку? mspdebug умеет запускаться в режиме gdb-сервера, надо только заставить Qt Creator при старте отладки выполнять команду «mspdebug tilib gdb», а потом подключаться к GDB на локальном порту 2000.

★★★★★

Последнее исправление: KivApple (всего исправлений: 3)

Используй cmake или autotools. Криэтор их умеет, аутотулс вроде чуть хуже чем cmake, но в принципе, в криэторе жить можно и с ними.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Получилось настроить сборку и прошивку с помощью CMake. Прошивка происходит в рамках этапа деплоймента Qt Creator'а. Вопрос в том, можно ли теперь прикрутить отладку.

Я прошиваю МК с помощью утилиты mspdebug, которая умеет запускаться в режиме сервера GDB. Если заставить Qt Creator как-нибудь подключиться к нему, то я, вероятно, получу возможность пошаговой отладки своей прошивки, что было бы очень круто (пока у меня получалось лишь пошагово отлаживать ассемблерный листнг средствами самого mspdebug, но это не то).

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от pon4ik

Только там транспорт наверное компорт какой нибудь, я вот х3, получится ли это в криэторе без правки провернуть, но там, думаю, в плагине 10 строчек кода поправить что бы другой транспорт добавить.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Да посмотрел, там только tcp. Ну если есть свободное время, я надеюсь от тебя улетит патч в криэтор:)

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Мне по идее и нужен TCP - mspdebug слушает localhost:2000 и ждёт подключения. mspdebug это такая консольная утилита для работы с некоторыми программаторами для MSP430.

Я добавил в Qt Creator отладчик msp430-gdb, компилятор msp430-gcc, создал из этого комплект msp430 и выбрал его при запуске отладчика. В качестве исполняемого файла указал elf-файл прошивки. И эта штука пишет ошибку, что не может запустить отладчик «No Engine». При это не происходит никаких попыток подключения к mspdebug (он пишет в консоль, когда подключается клиент).

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 2)

Можно ли прикрутить отладку? mspdebug умеет запускаться в режиме gdb-сервера, надо только заставить Qt Creator при старте отладки выполнять команду «mspdebug tilib gdb», а потом подключаться к GDB на локальном порту 2000.

Да, можно использовать любые GDB сервера. Только желательно использовать QBS проекты а не CMake (хотя, взлетит или нет - я не в курсе).

Сейчас в QtCreator есть плагин BareMetal, который и надо использовать.

* В QtCreator v3.3.x - там точно поддерживается вроде как только GDB over TCP. Таким образом, в настройках BareMetal устройства достаточно только прописать хост (localhost) и порт для подключения к GDB серверу. Но сам сервер должен быть запущен ранее вручную. Если же gdb сервер поддерживает пайпы, то можно исхитриться и сделать так, чтобы сам криэйтор запускал GDB сервер в процессе отладки. Кстати, там по дефолту прописана работа с OpenOCD в pipe режиме.

* В QtCreator v3.4 я модифицировал BareMetal плагин, расширив его функционал (как мне кажется). Теперь он поддерживает OpenOCD и STLink сервера, которые он может сам стартовать как в Pipe так и в TCP/IP режимах. Еще имеется некий «Default» вариант, аналогичный тому, что было ранее в предыдущем креаторе. Скачать снапшот того что будет можно тут.

Т.е. как-бы QtCreator будет заточен под OpenOCD и STLink.. Если хочется добавить что-то дополнительно (например, J-Link и прочие сервера) - то не проблема: просто см. исходники и делай по аналогии. :) У меня просто не было ничего другого кроме как stm32f4discovery чтобы проверить и добавить еще какие дебаггеры/сервера (типа как в Keil/IAR и прочей шняги).

kuzulis ★★
()
Ответ на: комментарий от kuzulis

Я и выбрал BareMetal, но ошибка всё равно есть.

http://itmages.ru/image/view/2220653/13decab8

http://itmages.ru/image/view/2220654/f51ce3b6

http://itmages.ru/image/view/2220655/96ed8ed1

http://itmages.ru/image/view/2220656/9546061e

http://itmages.ru/image/view/2220657/64fbdaad

Вот так всё настроено.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Нужно прописывать хост и порт в свойствах самого BareMetal устройства. Также нужно прописать корректные GDB init/reset команды. Но если честно, я ХЗ, взлетит или нет, сам разбирайся что там да как с твоим MSP. :)

A, криэйтор не может определить тип движка для работы с твоим отладчиком. Он должен в свойствах твоего отладчика (в таблице где ты задаешь путь к отладчику) написать тип как «GDB», а у тебя оно в «Не определен» стоит. Т.е. или старая версия отладчика у тебя или хз что еще.

Кроме того, GDB должен быть собран с поддержкой Python !!! Иначе нифига не будет отлаживаться (ну это так, к слову).

kuzulis ★★
()
Последнее исправление: kuzulis (всего исправлений: 1)
Ответ на: комментарий от KivApple

В общем, пересобери свой отладчик для работы с MSP (погугли как это делается, и можно ли это сделать). Нужен GDB как можно свежее, лучше если оно будет если > v 7.8.x

kuzulis ★★
()
Ответ на: комментарий от kuzulis

Выбрал другой отладчик (у меня есть две версии). Второй вроде определился:

http://itmages.ru/image/view/2220737/875305fa

При запуске отладки Qt Creator переключается в режиме отладки, однако тут же пишет в «Вывод приложения» «Ошибка отладки» и «Отладка завершена». При этом к серверу GDB от mspdebug так никто и не подключился.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от kuzulis

Он показывает версию только, если я только что ввёл имя отладчика, если окно было закрыто и открыто, то там «Неизвестно». Вероятно, он не запрашивает заново. Вот версия:

http://itmages.ru/image/view/2220745/f3a8ac8a

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Тебе надо стартануть сервер отладки руками, для начала, и проверить вообще цепляется ли отладчик удалённо. Возможно msb430-gdb это и не гдб вовсе, или какая то древняя версия.

Обычный системный gdb, к этому серверу умеет коннектиться?

pon4ik ★★★★★
()
26 июня 2016 г.
Ответ на: комментарий от pon4ik

программный gdbserver

попалась на глаза такая статья, автор предлагает некий вариант софтовой отладки, для устройств на чипах типа atmega 328/32u4 и подобных которые умеют отлаживаться только хардварно через JTAG и debugWire http://www.codeproject.com/Articles/1037057/Debugger-for-Arduino

насколько я понимаю внедрением в программу библиотечного кода (он прилагает его) который эмулирует gdbserver на стороне устройства

ваше мнение?

amigo421
()
Ответ на: программный gdbserver от amigo421

Далёк от embeded

Моё мнение, если транспорт позволяет, то сам протокол gdbserver должен быть довольно прост, т.е шанс, что тип критично налажал, довольно мал.

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

Конкретно насчёт подключения к удалённому отладчику, я сужу на основе опыта подключения к gdbserver поставляемому из коробки в centos6(6.x вроде бы, или 7.2 даже) с помощью клиента версии 7.11. Там я терпел похожие фэйлы, пока не обновил сервер(отладки).

pon4ik ★★★★★
()

Не знаю, как дело обстоит в QtCreator, но я в Code::Blocks для stm32 делал так:

В настройках отладчика есть вкладка Aditional GDB Commands, там есть два поля ввода, соответственно в них писал:

Before connection:

shell xterm -e st-util & disown
set remotetimeout 60000

Это запускает st-util в окне xterm, «отпускает» запущенный процесс и ждет пока он откроет соответствующий порт.

Соответственно у тебя нужно запустить mspdebug с соответствующими аргументами.

After connection:

load
tb main
monitor jtag_reset

Это грузит прошивку, ставит временный бряк на начало мэйна и ресетит девайс, под msp430 команда на ресет нужна другая.

shkolnick-kun ★★★★★
()
Ответ на: комментарий от KivApple

Ещё когда-то приделывал пипетарный отладчик от lpexpresso, и там делал так:

6. Написать инит скрипт для gdb(gdb_init) с таким содержанием:
target extended-remote :3333
set remotetimeout 60000
set mem inaccessible-by-default off
set arm force-mode thumb
load /home/anonimous/bugurtos/tests/arch/cm3/sched/Debug/sched.axf
tb main
run

7. Пометсить скрипт в каталог с исполняемым файлом, который собираемся отлаживать.

...

9. Запсутить gdb, причем именно тот, который идет в комплекте поставки с IDE lpcxpresso:
/usr/local/lpcxpresso_4.1.0_164/lpcxpresso/tools/bin/arm-none-eabi-gdb -command=gdb_init sched.axf

Возможно это чем-то поможет...

shkolnick-kun ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.