Russian Qt Forum
Ноябрь 06, 2024, 09:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Qt Embedded
>
[РЕШЕНО]Qt Creator + stm32
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО]Qt Creator + stm32 (Прочитано 33876 раз)
Larry
Гость
[РЕШЕНО]Qt Creator + stm32
«
:
Февраль 16, 2017, 09:52 »
Добрый день, форумчане.
Возникли вопросы по скрещиванию Qt Creator и stm32.
Взял пример с хабра:
https://habrahabr.ru/post/222877/
Проект собрался, но файл .elf вышел ~475kb
Кроме того постоянно выдает warning "Property 'linkerScripts' is not declared"...Куда он делся из модуля cpp?
Помогите пожалуйста разобраться. Хотелось бы заменить IDE на Qt Creator для работы с микроконтроллерами, т.к. после креатора остальные IDE не камильфо.
Спасибо.
«
Последнее редактирование: Март 02, 2017, 15:31 от Larry
»
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Qt Creator + stm32
«
Ответ #1 :
Февраль 16, 2017, 12:02 »
Цитировать
но файл .elf вышел ~475kb
И что? Вы думаете что к этому причастен Qt Creator?
Я вот думаю, что это не так, смотрите опции линковки и компиляции.
Цитировать
Куда он делся из модуля cpp?
Вроде никуда не девался.
Записан
ArchLinux x86_64 / Win10 64 bit
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #2 :
Февраль 16, 2017, 12:11 »
Цитировать
Куда он делся из модуля cpp?
Цитировать
Вроде никуда не девался.
Тогда почему появляется предупреждение, что не найдено это свойство?
опции вот:
Код:
cpp.commonCompilerFlags:
[
"-mcpu=cortex-m4",
"-mthumb",
"-mfpu=fpv4-sp-d16",
"-mfloat-abi=softfp"
]
cpp.linkerFlags:
[
"-mcpu=cortex-m4",
"-mthumb",
"-mfpu=fpv4-sp-d16",
"-mfloat-abi=softfp",
]
Записан
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #3 :
Февраль 16, 2017, 16:07 »
Проверил .elf в CooCox и Embitz, то действительно файл выходит больших размеров - значит это норма.
Собрал свой проект с qbs - зажигаю сегмент семисегментника, но в линковке выкидывает ошибки:
Код:
In function `zero_loop':
<artificial>:(.text+0x4e0): undefined reference to `_sidata'
<artificial>:(.text+0x4e4): undefined reference to `_sdata'
<artificial>:(.text+0x4e8): undefined reference to `_edata'
Код:
In function `Default_Handler':
<artificial>:(.text+0x4f4): undefined reference to `_sbss'
<artificial>:(.text+0x4f8): undefined reference to `_ebss'
Проверил в стартап объявлены...Что может быть?
Вот qbs:
Код:
import qbs
Project
{
name: "qbs"
Product
{
type: "application"
Depends { name: "cpp" }
cpp.executableSuffix: ".elf"
cpp.defines: "STM32F10X_LD_VL"
cpp.positionIndependentCode: false
cpp.debugInformation: true
cpp.commonCompilerFlags:
[
"-mthumb",
"-mcpu=cortex-m3",
"-msoft-float",
"-mfpu=vfp",
"-O0",
"-fdata-sections",
"-ffunction-sections",
"-fno-inline",
// "-std=c++11",
"-flto"
]
cpp.linkerFlags:
[
"-flto",
"-mthumb",
"-mcpu=cortex-m3",
"-msoft-float",
"-mfpu=vfp",
"-specs=nano.specs",
"-Wl,--start-group",
"-T" + path + "/src/linker/stm32f100c4_flash.ld",
"-lnosys",
"-lc",
"-lstdc++",
"-lm"
]
cpp.includePaths:
[
"src",
"src/cmsis",
"src/inc",
"src/linker",
"src/startup"
]
files:
[
"*.cpp",
"src/cmsis/*.c",
"src/cmsis/*.h",
"src/inc/*.c",
"src/inc/*.h",
"src/startup/*.c"
]
Properties
{
condition: qbs.buildVariant === "debug"
cpp.defines: outer.concat(["DEBUG=1"])
}
Group
{
qbs.install: true
fileTagsFilter: "application"
}
}
}
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Qt Creator + stm32
«
Ответ #4 :
Февраль 16, 2017, 18:19 »
Цитировать
Тогда почему появляется предупреждение, что не найдено это свойство?
Теперь оно называется по-другому (см.
linkerscript
)
Ах, не, кажется, теперь просто можно указывать ld скрипты как обычные файлы в списке (как исходники, заголовочные и прочее).
UPD: Или все-таки указывать теги скриптов явно
Код:
Group {
name: "linker scripts"
files: ["linkerscript1", "linkerscript2"]
fileTags: ["linkerscript"]
}
см. сорцы QBS: qbs\tests\auto\blackbox\testdata\linkerscripts\
«
Последнее редактирование: Февраль 16, 2017, 18:28 от kuzulis
»
Записан
ArchLinux x86_64 / Win10 64 bit
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #5 :
Февраль 16, 2017, 18:33 »
Спасибо большое.
.elf теперь собирается. Перегнал его в .hex, но пока не заработала прошивка
...буду дальше разбираться.
Записан
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #6 :
Февраль 17, 2017, 15:06 »
Так и не получил рабочую прошивку...
Собрал в EmBitz, то все работает (загорается сегмент семисегментника). Размер прошивки ~4kb.
Собрал в Qt Creator, то размер прошивки 9kb, но после заливки не хочет работать. GDB пока не прикрутил, поэтому посмотреть, где затык не могу.
Вложил проект...может есть ли у кого возможность проверить у себя
Спасибо.
P.S.: грешу все на тот же файл линковки..
Записан
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #7 :
Февраль 18, 2017, 09:02 »
Скачал проект для микроконтроллеров Миландра, то все собралось без проблем...не было ошибок и предупреждений...
По тому же скрипту (там как раз cortex-m3) собираю для stm32 и получаю кучу ошибок (вчера самостоятельно писал по мануалам qbs без использования модуля срр и получал те же ошибки)
.
Уже не знаю куда копать...перечитал уже все статьи по этой теме (у всех получается) и использую их скрипты переделанные под свою структуру проекта и постоянно, то прошивка не работает в камне, либо ошибки...
Вот qbs-скрипт (без использования модуля срр):
Код:
import qbs
Project {
name: "simple"
Product {
name: "micro"
type: "hex"
Group {
name: "sources"
files: ["*.c", "*.h", "*.S"]
fileTags: ['c']
}
Rule {
inputs: ["c"]
Artifact {
fileTags: ['obj']
filePath: input.fileName + '.o'
}
prepare: {
var args = [];
args.push("-mcpu=cortex-m3")
args.push("-mthumb")
args.push("-g")
args.push("-ffunction-sections")
args.push("-O0")
args.push("-Wall")
args.push("-Wunused")
args.push("-DM3")
args.push('-c');
args.push(input.filePath);
args.push('-o');
args.push(output.filePath);
var compilerPath = "c:/development/gcc-arm/bin/arm-none-eabi-gcc.exe"
var cmd = new Command(compilerPath, args);
cmd.description = 'compiling ' + input.fileName;
cmd.highlight = 'compiler';
cmd.silent = false;
return cmd;
}
}
Rule{
multiplex: true
inputs: ['obj']
Artifact{
fileTags:['elf']
filePath: project.name + '.elf'
}
prepare:{
var args = []
args.push("-mcpu=cortex-m3")
args.push("-mthumb")
args.push("-g")
args.push("-nostartfiles")
args.push("-O0")
args.push("-Wl,--gc-sections")
for(i in inputs['obj'])
args.push(inputs["obj"][i].filePath);
args.push("-Td:/work/workspace/uc/qbs_c/stm32f10x_flash.ld")
args.push('-o');
args.push(output.filePath);
var compilerPath = "c:/development/gcc-arm/bin/arm-none-eabi-gcc.exe"
var cmd = new Command(compilerPath,args);
cmd.description = "linking"+project.name
return cmd;
}
}
Rule{
inputs: ['elf']
Artifact{
fileTags:['hex']
filePath: project.name + '.hex'
}
prepare:{
var args = []
args.push("-O")
args.push("ihex")
args.push(input.filePath)
args.push(output.filePath)
var hexcreator = "c:/development/gcc-arm/bin/arm-none-eabi-objcopy.exe"
var cmd = new Command(hexcreator,args);
cmd.description = 'create_hex'+project.name
return cmd;
}
}
}
}
Ошибки которые вылазят:
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
error: unknown type name '__STATIC_INLINE'
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void)
и в том же роде
«
Последнее редактирование: Февраль 18, 2017, 09:07 от Larry
»
Записан
GraninDm
Гость
Re: Qt Creator + stm32
«
Ответ #8 :
Февраль 18, 2017, 10:24 »
А вот тут не смотрели
https://habrahabr.ru/post/258467/
Я по этой статье пытался на днях сделать компиляцию для ардуино.
Пока тоже не получилось.
Валятся ошибки...
И еще, как вариант
Вот для того
Код:
inputs: ['elf']
Artifact{
fileTags:['hex']
filePath: project.name + '.hex'
}
Наверное лучше использовать Transformer, а не Rule
Цитата
Transformer предназначен для срабатывания только на один фаил, с заранее определенным именем. Например, прошивальщик или какой-нибудь хитрый скрипт.
Записан
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #9 :
Февраль 18, 2017, 10:37 »
Да по этому тоже смотрел и делал
Можно попробовать и через Trasformer, но думаю не в этом дело, но как вариант.
Если использовать модуль срр, то все собирается, но в камне не работает.
Записан
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #10 :
Февраль 18, 2017, 11:32 »
подключил отладчик, но при запуске зависает на строке
.long TIM1_UP_TIM16_IRQHandler // TIM1 Update and TIM16
в стартапе, и просто висит
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Qt Creator + stm32
«
Ответ #11 :
Февраль 18, 2017, 17:32 »
У меня вообще не получилось сейчас запустить отладку, используя QtCreator с OpenOCD в режимах Startup Mode или "PIPE" или "TCP/IP".
Работает только отладка если ручками запустить OpenOCD сервер, а Startup Mode установить в "None".
Что-то опять поломали
.. Никто это не тестит, т.к. никому не нужно Bare Metal, поэтому и возникают такие плюхи.
PS: Я пробовал проект
https://github.com/alekseysidorov/te-stm32f407-qbs-template
Записан
ArchLinux x86_64 / Win10 64 bit
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #12 :
Февраль 18, 2017, 19:54 »
Видать поломали, т.к. где-то читал, что всплывали такие же ошибки как у меня в новых версиях. Хотя собирал один из примеров, но для микроконтроллера Миландр, то собрался вообще без проблем. Я сейчас читаю доки по qbs, может че-нить вычитаю
Есть еще предположение: я использую С++. Может в этом проблема?! Буду пробовать, т.к. Qt Creator мне очень удобен.
Записан
987654
Гость
Re: Qt Creator + stm32
«
Ответ #13 :
Февраль 19, 2017, 15:28 »
Приветствую.
У меня платка l1, однако возможно вам помочь получится.
как вариант
1) сдувайте прокат libopencm3 + libopencm3 examples компилятором прогоняйте и то и другое. Затем в папке с нужным вам тестовым бинарником делайте
Код:
arm-none-eabi-objcopy -Obinary name.elf name.bin
Как вариант можно сразу запустить построение бинарников с "make bin" для примеров
2) Есть такой проект "stm32l152-discovery-qbs-cubemx-master"
В qbs нужно будет заменить строку
Код:
// cpp.linkerScripts: [
// //"../TrueSTUDIO/F1032/libs.ld",
// ]
#на строку
Group {
name: "linker scripts"
files: ["../STM32L152RB_FLASH.ld",]
fileTags: ["linkerscript"]
}
а итоговый выходной файл так же прогнать через arm-none-eabi-objcopy
Может быть второй вариант потребует небольшие переделки от вас.
3) Тот которым работал изначально - это использовать 1 вариант + редактирование проекта в папке с примерами ( то есть в libopencm3 examples ) + ручные параметры сборки ( shell скрипт )
Записан
Larry
Гость
Re: Qt Creator + stm32
«
Ответ #14 :
Февраль 19, 2017, 16:31 »
Спасибо большое. Гляну, может что и получится.
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...