Russian Qt Forum
Апрель 14, 2024, 11:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Qt Creator + stm32  (Прочитано 32219 раз)
Larry
Гость
« : Февраль 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 Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Февраль 16, 2017, 12:02 »

Цитировать
но файл .elf вышел ~475kb

И что? Вы думаете что к этому причастен Qt Creator?

Я вот думаю, что это не так, смотрите опции линковки и компиляции.

Цитировать
Куда он делся из модуля cpp?

Вроде никуда не девался.
Записан

ArchLinux x86_64 / Win10 64 bit
Larry
Гость
« Ответ #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
Гость
« Ответ #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 Offline

Сообщений: 2812


Просмотр профиля
« Ответ #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
Гость
« Ответ #5 : Февраль 16, 2017, 18:33 »

Спасибо большое.
.elf теперь собирается. Перегнал его в .hex, но пока не заработала прошивка Улыбающийся...буду дальше разбираться.
Записан
Larry
Гость
« Ответ #6 : Февраль 17, 2017, 15:06 »

Так и не получил рабочую прошивку...
Собрал в EmBitz, то все работает (загорается сегмент семисегментника). Размер прошивки ~4kb.
Собрал в Qt Creator, то размер прошивки 9kb, но после заливки не хочет работать. GDB пока не прикрутил, поэтому посмотреть, где затык не могу.
Вложил проект...может есть ли у кого возможность проверить у себя Улыбающийся
Спасибо.

P.S.: грешу все на тот же файл линковки..
Записан
Larry
Гость
« Ответ #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
Гость
« Ответ #8 : Февраль 18, 2017, 10:24 »

А вот тут не смотрели
https://habrahabr.ru/post/258467/
Я по этой статье пытался на днях сделать компиляцию для ардуино.

Пока тоже не получилось.
Валятся ошибки...

И еще, как вариант
Вот для того
Код:
inputs: ['elf']
            Artifact{
                fileTags:['hex']
                filePath: project.name + '.hex'
            }
Наверное лучше использовать Transformer, а не Rule

Цитата
Transformer предназначен для срабатывания только на один фаил, с заранее определенным именем. Например, прошивальщик или какой-нибудь хитрый скрипт.
Записан
Larry
Гость
« Ответ #9 : Февраль 18, 2017, 10:37 »

Да по этому тоже смотрел и делал  Улыбающийся
Можно попробовать и через Trasformer, но думаю не в этом дело, но как вариант.
Если использовать модуль срр, то все собирается, но в камне не работает.
Записан
Larry
Гость
« Ответ #10 : Февраль 18, 2017, 11:32 »

подключил отладчик, но при запуске зависает на строке
.long    TIM1_UP_TIM16_IRQHandler        // TIM1 Update and TIM16
в стартапе, и просто висит
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #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
Гость
« Ответ #12 : Февраль 18, 2017, 19:54 »

Видать поломали, т.к. где-то читал, что всплывали такие же ошибки как у меня в новых версиях. Хотя собирал один из примеров, но для микроконтроллера Миландр, то собрался вообще без проблем. Я сейчас читаю доки по qbs, может че-нить вычитаю Смеющийся
Есть еще предположение: я использую С++. Может в этом проблема?! Буду пробовать, т.к. Qt Creator мне очень удобен.
Записан
987654
Гость
« Ответ #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
Гость
« Ответ #14 : Февраль 19, 2017, 16:31 »

Спасибо большое. Гляну, может что и получится.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.