LINUX.ORG.RU

пытаюсь программировать под st32f4

 , ,


1

2

TL;DR: Планирую девайс на st32, что-нить в духе 64-128кб ROM, 32kb sram (аля STM32F401 или другое недорогое решение от этого производителя).

1) стоит ли заморачиваться этими всеми *RTOS для небольшого проекта для микроконтроллеров st32? Есть шанс что придётся попотеть с портированием.

2) Какую именно RTOS взять?

Делаю блок питания с микроконтроллером (для управлением дисплеем, кнопками и энкодерами). Неспешно пилил всё под atmega328 на голом си и даже что-то получалось. Но однажды утром проснулся и понял что жить не могу без arm. Тут-то проект полетел к чертям :)

После ночей раздумий остановился на серии mcu st32f4. Приобрёл для начала stm32F429I-DISCO . Однако застрял на написании простей программы по миганию светодиодом: в инете куча устаревшей инфы и либ под разные виндовые IDE типа truestudio итп. А вот чтобы просто под gcc и Makefile и чтобы готовое, рабочее и совместимое с последним sdk... Родной sdk от производителя это какое-то малоструктурированное адовое мессиво автосгенерированного кода. Я заставил компилироваться некоторые примеры из инета, но они не заработали (подозреваю грабли в коде инициализации). Поэтому я пошёл другим путём.

Я решил скачать какой-нить готовый пример с freertos. И, о чудо, вот это заработало: https://github.com/winfred-lu/stm32f429-freertos800 . Оно даже работает с последним FreeRTOS. Стоит ли продолжать изыскания с FreeRTOS?

cast tailgunner, mv, madcore, sdio, hizel, mashina

да, FreeRTOS, да

anonymous ()

Не раз использовал FreeRTOS и только положительные впечатления, однако если такие вопросы вообще возникают - не рекомендую.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от Eddy_Em

А что не так? За эти же деньги я могу взять восьмибитный avr, но зачем? Потом, дисплей у меня 320x240x16bit SPI. Atmega тупо не потянет его достаточно быстро обновлять.

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

Возьми STM32F103 с мегабайтом флеша и приличным объемом оперативы. Сможешь двойную буферизацию дисплея сделать.

Но SPI — это медленно.

P.S. На мой взгляд, если тебе становится необходим RTOS, лучше выкинуть МК и купить кубитрак.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

SPI — это медленно.

Да, но его можно разогнать, оно есть везде, не требует много проводов и его тривиально использовать.

если тебе становится необходим RTOS

Возможно, я сильно заблуждаюсь в этом. О FreeRTOS узнал только утром, исходники ещё не открывал. Вот сижу — изучаю как это всё работает.

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

но его можно разогнать

Низя. Если у тебя чип быстрей 80МГц не робит, то 1ГГц ты из него не выжмешь.

А RTOS придумали, когда нормальные МК были слишком дорогими. Сейчас же они уже стоят вполне немного, так что, лучше уж взять нормальный МК с MMU и воткнуть туда линукс.

Правда, есть большая проблема — огороженность.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от true_admin

Знать бы еще что значит это слово... :)

Делаю блок питания с микроконтроллером

И хочешь туда RTOS? Это как дверь на шпингалете бочкой пороха вышибать...

I-Love-Microsoft ★★★★★ ()

Можешь вакуленковскую uOS ещё покопать. Я ей так и не пользовался, FreeRTOS хватает, но кое-что там выглядит симпатично.

А вообще этих RTOS для МК — как дерьма за баней. Распространённая тема для студенческих проектов, как я понимаю. (Ну, в приличных местах, конечно.)

alegz ★★ ()
Ответ на: комментарий от I-Love-Microsoft

Кажись, я начинаю прозревать. Оно «драйверов» не содержит, да? Т.е. там нету функции типа toggle_pin(13) которая бы работала на всех поддерживаемых архитектурах?

true_admin ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

как говорится: «это смотря какой шпингалет и какая бочка».

anonymous ()
Ответ на: комментарий от I-Love-Microsoft

Дадада. Для опроса двух кнопок ему совершенно необходим линукс. Главное — ни в коем случае не забыть системд.

alegz ★★ ()

Товарищ, а вы не пробовали почитать reference manual и работать напрямую с регистрами, а не заниматься хуйнёй?

Всё, что нужно от производителя для разработки под чип - это .h с дефайнами адресов регистров. И map для флешера.

А вы, true_admin, явно что-то ДНТ.

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

Я пробовал. И я даже знаю что такое CMSIS. Но гемора дофигища (вот вчера «enable the peripheral clock for GPIO» не на тот порт сделал и это отняло несколько часов времени). Если есть нормальное готовое решение для IO то я с удовольствием возьму на вооружение. Родной HAL пока выглядит пугающе. Если есть вменяемые и работающие либы для gpio и spi то я с удовольствием их использую.

true_admin ★★★★★ ()

А что за БП? Неужто повышалка-понижалка импульсная конфигурируемая с обратной связью по току?

intelfx ★★★★★ ()

Для этого чипа есть StdPeriphLibrary от производителя с хорошей документацией по функциям и кучей примеров с шаблонами (правда для сред по типу IAR). Для GCC и Makefile там нет, но гуглится легко (например это, http://we.easyelectronics.ru/STM32/razrabotka-pod-stm32-v-linux-gcc-cmake-ecl... , там правда под чип stm32f10x, но по сравнению с твоим изменений не так много).

Moncruist ()

Оно даже работает с последним FreeRTOS. Стоит ли продолжать изыскания с FreeRTOS?

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

Нормальный RTOS это eCos (как бы не хвалились на сайте FreeRTOS что они стандарт де-факто, в реальности более распростаннён и востребован eCos). Есть ещё Erika и несколько других сертифицированных автомобиляторов :-)

Есть весьма симпатичная и любопытная contiki. для небольшого проекта я бы брал её.

MKuznetsov ★★★★★ ()

Планирую девайс на st32

похвально, изучение и применение arm хороший скил, вот только есть проблема с уровнем вхождения (если переходить с avr) пока не перелопатишь и не разберёшься в большое количество инфы будешь чувствовать себя беспомощным и не способным помигать светодиодом (собственно как сейчас у тебя и обстоит дело), с другой стjроны один раз разобравшись с arm stm32 ,будешь просто ориентироваться и в камнях от других производителей, а изучение более сложных армов будет достаточно простым.

Делаю блок питания с микроконтроллером (для управлением дисплеем, кнопками и энкодерами)

собственно вопрос а действительно тебе нужен арм? т.к. цель может быть реализована на авр (на которых тоже работают большенство ртос)

нужен ли тебе ртос для этого проекта? он не сложный одного бесконечно вайл и прерываний должно полностью хватить

если ты не ставиш себе образовательную цель изучения stm32 и arm то нафих оно тебе надо

После ночей раздумий остановился на серии mcu st32f4

почему именно на ней? для твоих задач с полна хватит f3 или f1 они более простые и начинать с них легче

в инете куча устаревшей инфы и либ под разные виндовые IDE типа truestudio итп

по поводу инфы - могу накидать полезных юрлов и книг

А вот чтобы просто под gcc и Makefile и чтобы готовое, рабочее

есть способ но поверь мне очень долго с бубном танцевать прядётся

для начала я рекомендую тебе не лезть сразу в сложности а хотя бы помигать светодиодом, наскоком такую большую тему не взять, используй под виндой coide - это самая лучшая штука для начинающих, она удобна и в нейже можно почитать документацию на стандартную библиотеку + много всего идеальна для быстрого старта, на линух переносится лучше когда уже себя будешь уверенно чувствовать.

Стоит ли продолжать изыскания с FreeRTOS

у FreeRTOS очень хорошая документация и в ней можно быстро разобраться, но всё что ты получишь это задачи с вытеснением по приоритету, мьютексы, семафоры и очереди, ни какой разделяемой памяти и сокетов (легко кодиться самостоятельно), и всё дльше сам, ни какого hal и прочих прелестей цивилизации, но как стартовый ртос самое оно, когда освоишся с ним можеш переходить уже на более удобные веши вроде ChibiOS (сейчас сам медленно осваиваю)

Родной HAL пока выглядит пугающе

это вы про StdPeriphLibrary ? она вполне лаконична её только надо изучить (в коиде можно после подключения стандартной либы посмотреть в справке документацию на каждую функцию из StdPeriphLibrary)

вот вчера «enable the peripheral clock for GPIO» не на тот порт сделал и это отняло несколько часов времени

я правильно понимаю, что светодиодом уже удалось поморгать?

имхо впирнципе наверно лучшее для тебя это ChibiOS, причин две 1 -там как ты уже знаешь есть свой хороший хал, 2 - наверно самое главное для тебя, там есть очень хорошая граф библиотека из коробки что для тебя наверно самое важное.

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

novoxudonoser ()
Ответ на: комментарий от MKuznetsov

Я то же пытаюсь разбираться со встроенными системами и RTOS,которых как было сказано,как за баней.Что можно сказать о RTOS Nuttx.Для каких задач она подходит, а для каких нет ?

Oaks ()
Ответ на: комментарий от true_admin

Потом, дисплей у меня 320x240x16bit SPI. Atmega тупо не потянет его достаточно быстро обновлять.

недосмотрел все мои выше стоящие вопросы про выбор между авр и арм отпадают.

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

вот озадачили ...

Когда разберетесь - интересно будет узнать ваше мнение.

Oaks ()
Ответ на: комментарий от Moncruist

StdPeriphLibrary

Нельзя это говно использовать. Кстати, сами STM отказались от этого говна и начали колупать другое (HAL). Но и в HAL у них по большей части индусский рукожопый быдлокод.

Я и сам начинал было с этим говном (кстати, у меня на гитхабе или сосфорже как раз для gcc с Makefile прожектик под STM32F407 валяется). Но потом перешел на opencm3 и рад.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от true_admin

Аноним все правильно говорит.

Кстати, я даже opencm3 не полностью использую. Чего и тебе советую: критические моменты нужно только на регистрах делать. У меня 1-wire никак не получалось через библиотечные функции запустить. Проблема была в том, что появлялись лишние импульсы, пока выполнялись библиотечные функции настройки DMA и таймера в режиме ШИМ. А с регистрами все замечательно!

И ничего там сложного нет. Главное — внимательно мануал читать.

Библиотечные функции нужны лишь для упрощения работы с сетью и USB.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

согласен, но вопрос в скорости изучения, если досконально изучать все регистры то это займёт приличное количество времени, неспорю что StdPeriphLibrary это плохо но вопрос вот в чём - можете ли вы или кто либо другой за ограниченное время написать нормальную либу которая бдет совместима со всеми существующими мк да ещё и с будущими. для низкоуровневых вещей воде софтверного 1-wire она конечно не подходит, но для моргания светодиодом или настройки тактового генератора самое оно

novoxudonoser ()
Ответ на: комментарий от Eddy_Em

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

Moncruist ()
Ответ на: комментарий от Oaks

Что можно сказать о RTOS Nuttx

из практики - ничего. Но судя по её документации - там навёрнуто конфигурируемое ядро (не удивлюсь если l4 или обрезанный kernel.org) с вытесняющей многозадачностью и уровнем POSIX. Это попытка дотянуть до уровня VxWorks, QNX. То есть что-то настолько такое большое и толстое, что тогда уж лучше linux :-)

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

блок питания

320x240x16bit

Алфавитно-цифрового дисплея 32×4 хватило бы за глаза, он и дешевле, и арм не понадобился бы (он и так не нужен, впрочем).

oneliner ()
Ответ на: комментарий от novoxudonoser

Уровень вхождения должен быть высоким. Иначе всякое говно лезть куда не нужно будет!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Moncruist

Быдлокод не может быть нормальным!

Это говно мало того, что тормозит, там еще глюков — вагон и маленькая тележка!!!

Ты попробуй хотя бы одновременно оба USB используй на STM32F407, работая с оригиналом USB'шной библиотечки из SPL! Нихрена у тебя без патчей (которые ты сам и напишешь) не выйдет!!!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от oneliner

Алфавитно-цифрового дисплея 32×4 хватило бы за глаза, он и дешевле,

Он не дешевле и у меня есть один под i2c :). Увы, я купил девайс не глядя (некий meridas) и у меня сходу не удалось его запустить. Они все вроде как типовые, но отличаются адресами и кодом инициализации. Впрочем, долго с ним не ковырялся.

В итоге решил взять типовой графический дисплей на ILI9325, отдал 10евро примерно.

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

почему именно на ней?

Дёшево и сердито. Разницы с cortex-m3 не вижу, про f1 не знаю, не смотрел. Я покупал мегагерцы и мегабайты :).

это вы про StdPeriphLibrary ?

Типа того, в новых либах уже что-то другое. Хотя, если не ошибаюсь, новый HAL это перелопаченый старый. В родном sdk, например, я наткнулся на такую проблему: там пути к хедерам прописаны с виндовыми слэшами (т.е. ..\Drivers\CMSIS вместо ../Drivers/CMSIS). Я могу всё это исправить (как это сделало много людей до меня), но не хочу. Так что очень хочу другой HAL который бы просто работал, либо придётся на регистрах, но там уж очень много граблей для меня.

Венды у меня нет, и, честно говоря, я чувствую себя комфортно с gcc, binutils и gdb. Но я поставлю если пойму что оно того стоит. Пока вот не хочется связываться, уж очень это всё жирное и неповоротливое. У этих IDE размер только установочного образа легко зашкаливает за 500-600метров.

светодиодом уже удалось поморгать?

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

имхо впирнципе наверно лучшее для тебя это ChibiOS

Спасибо, буду смотреть на него вечером. Я правильно понимаю что с ним у меня будет даже некоторая гипотетическая переносимость? Ну, по крайней мере в пределах одного семейства.

В общем, мне пока инфы хватает с головой, я напишу как зайду в тупик :).

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

А что за БП?

Гораздо проще, линейник на lt3080 с микроконтроллерным управлением. Хотя, изначально брал за основу вот это: http://www.eevblog.com/files/uSupplyBenchRevC.pdf , там как раз всё это есть. Но мне это не нужно, я поэтому вырезал из схемы все фичи которые не нужны. Ну и подогнал под то что я смог купить. Посмотрим заработает ли... Пока я только собрал на макетной плате LDO на 3.3V, воткнул avr, енкодер и DAC по spi. След. этап дисплей, и current sensor, потом воктну ОПы итд.

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

есть вменяемый HAL

у eCos..хотя вменяемость вещь субъективная :-) Заодно она самая старая с наиболее наработанной кодовой базой.

Erika озаботилась стабильностью,совместимостью и сертификатами и допущена к авто-автоматизации :-)

contiki просто очень-очень маленький rtos, с любопытными для железячников protothread

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

могла бы подойти для IoT, но я словил нестабильную работу TCP и забил.

А так - отлично подходит для написания hello world / blink на сотню килобайт итогового размера прошивки.

anonymous ()
Ответ на: комментарий от true_admin

у CubeMX. Там же можно включить работу с FreeRTOS если нужна многозадачность. Если нужен только hal, то у этой новой библиотеки от ST вполне адекватный интерфейс / стабильность работы.

anonymous ()
Ответ на: комментарий от MKuznetsov

Нормальный RTOS это eCos (как бы не хвалились на сайте FreeRTOS ...

А развивается ли этот проект ? Последние новости датируются 2013 .

Oaks ()
Ответ на: комментарий от true_admin

вот вчера «enable the peripheral clock for GPIO» не на тот порт сделал и это отняло несколько часов времени

Ну это же делается одной записью в один регистр... Зачем грузить себя лишней инфой? RM в пдф-ке, отлично разбитой по главам и параграфам в TOC. Всё легко находится сходу.

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

Во-во!

Через регистры, скажем, DMA настраивается двумя-тремя операциями, а библиотеки как минимум на порядок больше операций для этого выполняют, не говоря уже о затратах на вызов функции!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Oaks

А развивается ли этот проект ? Последние новости датируются 2013 .

может вы где не там смотрите ? http://www.ecoscentric.com

крайняя новость от 2014-11-04

«Integrated USB Device stack added to eCosPro eCosCentric introduces a USB device stack for eCosPro, tightly integrated with the eCos IO and IPv6 networking layers. Provides network and serial connectivity, complementing host stack capability.»

к слову, там требуется :http://www.ecoscentric.com/careers.shtml

Position:	Senior Embedded Software Engineer
Location:	Cambridge, UK
Package: 	£35-£45k (depending on experience) includes salary and pension, plus 20 days holiday
Education:	Degree or higher degree in computing, maths, electrical engineering or similar
Experience:	4 yrs minimum in embedded software development

какой ещё из упомянутых RTOS может себе это позволить ??

PS. за наводку требую проставу ;-)

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

Дёшево и сердито. Разницы с cortex-m3 не вижу, про f1 не знаю, не смотрел. Я покупал мегагерцы и мегабайты :).

ну ту вопросов нет ушо купили

Венды у меня нет, и, честно говоря, я чувствую себя комфортно с gcc, binutils и gdb. Но я поставлю если пойму что оно того стоит. Пока вот не хочется связываться, уж очень это всё жирное и неповоротливое. У этих IDE размер только установочного образа легко зашкаливает за 500-600метров.

есть способ, для начала советабю запусти эту прибнуш купод вайном - http://www.coocox.org/ просто потыкайся, оцени, вешь достойная из того что мне в ней понравилось:

1) как я говорил встроенные доки по всем функциям StdPeriphLibrary 2) удобная работа с кодом - для примера нажал на функцию открыл код с ней и т.д. 3)gcc 4)отладка и программирование по сети (то что тебе и нужно) 5)нормальый человечиски отладчик (без него никуда сколько он мне вре мени сыкономил) 6)бесплатный но не опен(

вот посмотри короткую статейку http://we.easyelectronics.ru/STM32/prostoy-start-stm32coocox-idest-link.html а дале гуглии по нозванию - быстрый старт STM32 CooCox

для програмирования и отладки используется stlink который внезапно есть под линукс

вот сылка про рабочию среду под линухом http://robocraft.ru/blog/ARM/653.html , можеш сделать себе также, но я бы советовал спользовать кококс под вайном, запустить на линухе GDB-сервер, и далее надо покопаться с настройками я не смог завести кококс под вайном чтобы он локалхост слушал, поэтому поправив иптейбелс пустил пакеты через виртуальный ип

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

с тактированием разорались правильно понимаю?

Я правильно понимаю что с ним у меня будет даже некоторая гипотетическая переносимость? Ну, по крайней мере в пределах одного семейства.

при использовании хал переносимость будет с любого камня на любой, в этом то и весь смысл хал так сказать низкоуровневые драйверы, переносимость с 32 на 8 битки будет сохранятся если будете учитовать что длина указателей меняется и заведёте в дефайнах аля POINTER_LEN

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