Шаблоны проекта HALMX с кодовыми блоками

Сжимать
Ср. 20 июля 2016 г. 16:45
Я создал репо с некоторыми небольшими программами, работающими под HALMX, используя CodeBlocks IDE.
Важным является использование HALMX в качестве библиотеки для конкретных вариантов STM32 (например, F103XB, F401XE, L476XX и т. Д.). К сожалению, HALMX нельзя использовать 100% в качестве общей библиотеки, потому что некоторые переменные конфигурации передаются, как определяется в ядре, как скорость Xtal. В предварительно определенных целях определяется 8 МГц xTal, любая другая скорость требует восстановления библиотеки (она очень проста, поскольку HSE_VALUE передается в качестве определения в командной строке GCC и не является твердым в коде). Все последние источники HALMX используются нетронутыми из файлов ST ZIP без каких -либо сгенерированных файлов CubeMX.
Для правильной компиляции требуется более новый GCC V5. (РЕДАКТИРОВАТЬ: Это неправильно, кажется, что v4.8 правильно строит цели)
На данный момент есть очень маленькие примеры кода. Важно сохранить источник одинаковым и построить бинарку со всеми поддерживаемыми библиотеками. Для достижения этой цели я реорганизую источники HALMX, но это мой тестовый стенд для HALMX и готовлюсь к тому, чтобы увидеть много изменений в дереве.

Я думаю, что это поможет всем начать с HALMX/CODEBLOCKS.
Репо здесь: https: // github.com/evark/cbp-halmx

Олли
Ср. 20 июля 2016 г. 8:11 вечера
Сламмер написал: Я думаю, что это поможет всем начать с HALMX/CODEBLOCKS.
Репо здесь: https: // github.com/evark/cbp-halmx

Сжимать
Ср. 20 июля 2016 г., 8:19 вечера
Я постараюсь завершить краткое руководство по настройке компилятора и интеграции в кодовые блоки в Windows/Linux как можно скорее. Не так сложно, на самом деле намного проще, чем затмение.

Rogerclark
Ср. 20 июля 2016 г. 22:01
@slammer

Можете ли вы подтвердить, что выход из куба теперь нуждается в GCC 5, чтобы правильно компилировать, или это просто кодовые блоки, которые нуждаются в GCC 5?

Если куб нуждается в GCC 5, для IDE потребуется пакет Manager Manager, чтобы установить GCC 5, и я думаю, что он может иметь побочные эффекты для других плат.

Я помню, как установил репо из RedBearlab, который установил другой GCC, и я думаю, что IDE начал использовать эту версию GCC для всех плат ARM.
Я не знаю, почему, возможно, это была ошибка в пакете менеджера досок

Сжимать
Ср. 20 июля 2016 г., 23:11
GCC 5 не является строгим требованием, я просто проверяю код с 4.8 и работает ОК, по крайней мере для используемых функций.
Я помню, что код MBED, который также использует HALMX, требуется V5, но пока не знаю, у меня нет проблем с 4.8.
Я переключу компилятор по умолчанию на 4.8 в проектах (Libhal и Tests), как это наш инструмент по умолчанию.
Кодовые блоки могут обрабатывать множество различных версий компиляторов и могут назначать разные версии GCC на разные цели, очень универсальна. В моей настройке C :: B я определил более 16 компиляторов (различные версии, различные цели, например, SDCC, GCC-AVR, GCC-Mingw32, GCC-Mingw64, GCC-Arm-Linux, GCC-стенса, GCC-MIP , GCC-Mipsel и т. Д...).

Rogerclark
Ср. 20 июля 2016 г., 11:42 вечера
ХОРОШО

Спасибо

Сжимать
Пт 22 июля 2016 г. 15:45
Теперь можно поиграть с Halmx из Arduino Ide.

В то время как строительство Libhal требует кодовых блоков, я включил в репо двоичную форму библиотек. Библиотеки поддерживают только платы с внешними часами 8 МГц или Xtal (это ограничение HALMX, так как HSE_VALUE должно быть определено во время компиляции), а все модули HALMX включены.
Я также играл с системой строительства Arduino, и после повторного порядка каталога теперь можно построить простые приложения HALMX по «Arduino Way» (нет ядра Arduino, только IDE).
Мне удается скрыть большинство странностей HALMX, например, типичный пример Blink (с прерыванием задержки, работающего по умолчанию), похож на это (NO включает/не требуется другие файлы):
#ifdef STM32F103xB /* BLUE PILL */ #define LEDPORT GPIOC #define LEDPIN GPIO_PIN_13 #else /* NUCLEO */ #define LEDPORT GPIOA #define LEDPIN GPIO_PIN_5 #endif /// GPIO macros for maximum speed /// #define gpio_toggle(GPIOx, GPIO_Pin) ((GPIOx)->ODR ^= (GPIO_Pin)) #define gpio_clear(GPIOx, GPIO_Pin) ((GPIOx)->BSRR = (uint32_t)(((uint32_t)GPIO_Pin) << 16)) #define gpio_set(GPIOx, GPIO_Pin) ((GPIOx)->BSRR = (uint32_t)(GPIO_Pin)) #define gpio_write(GPIOx, GPIO_Pin, val) ((val) ? gpio_set(GPIOx, GPIO_Pin) : gpio_clear(GPIOx, GPIO_Pin) void gpio_setup_output(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { GPIO_InitTypeDef GPIO_InitStruct; HAL_GPIO_WritePin(GPIOx, GPIO_Pin, GPIO_PIN_RESET); GPIO_InitStruct.Pin = GPIO_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOx, &GPIO_InitStruct); } /******************************************************************/ int main(void) { /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); gpio_setup_output(LEDPORT, LEDPIN); while (1) { gpio_toggle(LEDPORT, LEDPIN); HAL_Delay(50); } } /******************************************************************/

Сжимать
Пн, 8 августа 2016 г., 12:58
Теперь шаблоны обогащены некоторыми расширенными функциями:
  • - Стартап на простом C (нет сборки .S файл) благодаря проекту GnuArmeClipse и Liviu Ionescu's Cortexm-Startup (https: // github.com/micro-os-plus/cortexm-startup). Таким образом, стартап чище и предлагает гибкость и уменьшенные размеры, так как стандартные функции библиотеки C не вызываются.

    - Поддержка полугостирования (очень полезно для отладки). Предлагает, похожие на Stdio функции на отладчике перед инициализацией периферийных устройств.

    - Некоторые стандартные функции библиотеки (STDIO) переосмысливаются для получения поддержки и/или уменьшения размера.

    - Динамические векторы в ОЗУ. Не нужно объявлять векторы прерывания глобальные функции, известные во время компиляции, можно перенаправить любой вектор на любую функцию или метод класса в любое время. Векторы хранятся в начале оперативной памяти в 0x20000000 и занимают требуемое пространство (векторы x 4 байта).

    - Unified Linker Script. Только размеры памяти объявлены в выделенных файлах.

    - Источники HALMX нетронутые, составленные в виде библиотеки (есть бинарные версии в репозитории для некоторых досок)

    - Ардуино IDE интеграция

    - Arduino-подобное ядро ​​в качестве примера. Это не полное ядро, но я работаю над этим, чтобы сделать его лучше. На данный момент поддерживаются сроки и цифровые функции. Я постараюсь включить/преобразовать все рабочие функции arduino_halmx в ближайшее время (я надеюсь, что Vasasilis окажет помощь).

    - Библиотечные двоичные файлы и рабочие примеры для Bluepill, Nucleof401re и Nucleol476rg. (Не нужно ничего перестроить с помощью кодовых блоков, используйте непосредственно Arduino IDE)

    - Интеграция RTX RTOS необязательно. Очень тонкие RTO на основе CMSIS для MCU Cortexm (работа в процессе), начиная с Main (основной - просто нить).

Олли
Пн, 8 августа 2016 г., 4:43
Сламмер написал:Теперь шаблоны обогащены некоторыми расширенными функциями:

Сжимать
Пн, 8 августа 2016 г., 7:15 утра
OpenCM3 и UNIMX являются тонкой оберткой для регистров, а не HAL, на самом деле нет абстракции, пользователь все еще должен знать, как делать вещи почти на уровне регистра в каждом изменении семьи, кроме того, именование и интерфейс функций не объединяются, делая разработку применения в кросс-семье-настоящий кошмар. Я надеюсь, что UNIMX улучшит работу OPENCM3, но еще очень рано.

HALMX, уродливая и иногда раздутая, но является единственным решением, если вы хотите что -то стабильное (официально поддерживаемое), объединенное (насколько это возможно) и доступно для любого STM32. Другими вариантами являются MBBE (API низкого уровня на вершине HALMX), Chibios HAL и стандартная периферийная библиотека ST (устаревшая, без поддержки новых MCU).

Пито
Вторник 09 августа 2016 г. 14:51
Я взял ваш последний CBP-HALMX, помещенный в аппаратную папку (IDE 1.6.10, win7).
Выбрана доска F103CB_BLUEPILL, ваша демонстрация Blink выше.
При связи я получаю: Linking everything together... .. C:\Users\pito\MyCode\Arduino\hardware\cbp-halmx\stm32\cores\stm32hal/main.cpp:31: multiple definition of `main' ..

Сжимать
Вторник 09 августа 2016 г., 19:38
Вытяните последние источники, я проверил каждый пример, кроме Digital2 (требует определения кнопки) на Bluepill
В Adruino IDE Используйте только примеры из папки библиотек (примеры>CBP_HALMX_EXAMPLES>) не источники из теста....

Пито
Вторник 09 августа 2016 г., 8:06 вечера
ОК понимал..
К вашему сведению - Получение много предупреждений, например, с Blink2
Linking everything together... "C:\Users\pito\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-gcc" "-LC:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp" -Os -Wl,--gc-sections -save-temps "-Tstm32f103xb.ld" "-Wl,-Map,C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp/Blink2.ino.map" --specs=nano.specs -mcpu=cortex-m3 -msoft-float -mfix-cortex-m3-ldrd -mthumb -Os -nostdlib -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,-static "-LC:\Users\pito\MyCode\Arduino\hardware\cbp-halmx\stm32\system/lib" "-LC:\Users\pito\MyCode\Arduino\hardware\cbp-halmx\stm32\system/ld" -o "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp/Blink2.ino.elf" "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp\sketch\Blink2.ino.cpp.o" "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp\core\rcc.c.o" "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp\core\usart.c.o" "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp\core\variant.cpp.o" -Wl,-whole-archive "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp/core\core.a" -lhal-f103xb-8m -Wl,-no-whole-archive -lstdc++ -lsupc++ -lm -lgcc -lc -lnosys c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .vfp11_veneer by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .v4_bx by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .iplt by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .rel.dyn by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .vfp11_veneer by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .v4_bx by 2 bytes "C:\Users\pito\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-objcopy" -O binary "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp/Blink2.ino.elf" "C:\Users\pito\AppData\Local\Temp\buildb289e2be8bfe67184059a3c0081fb0d2.tmp/Blink2.ino.bin" c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .iplt by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .rel.dyn by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .vfp11_veneer by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .v4_bx by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .iplt by 2 bytes c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: warning: changing start of section .rel.dyn by 2 bytes Sketch uses 3,158 bytes (2%) of program storage space. Maximum is 131,072 bytes. Global variables use 24 bytes of dynamic memory.

Сжимать
Вторник 09 августа 2016 г., 8:12 вечера
Эти предупреждения безвредны, обычно система здания Arduino игнорирует их, установив соответствующий флаг -W.

ошибка micros ()??