Jump to content

    
Sign in to follow this  
C2000

Кооперативная RTOS для STM32

Recommended Posts

Нужна RTOS с минимальными затратами. Особенно по ОЗУ. Чтобы не создавала своих стеков а работала  с общим стеком МК.

В связи с этим тот же FreeRTOS в корпоративном режиме не подходит, т.к. он так и так работает со своими стеками, просто шедулер вызывается не по таймеру а принудительно.

Share this post


Link to post
Share on other sites

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

И в результате получается просто - суперцикл. В котором вызываются процедуры-задачи. Имхо.

Неужто суперцикл трудно изобразить самостоятельно, без ОС?

Share this post


Link to post
Share on other sites
1 hour ago, jcxz said:

. . . . И в результате получается просто - суперцикл. В котором вызываются процедуры-задачи. Имхо.

Неужто суперцикл трудно изобразить самостоятельно, без ОС?

Если, "вдруг", трудно -   protothreads (тут на форуме как-то обсуждали). Макрос-обертка, тотже суперцикл.

 

 

Share this post


Link to post
Share on other sites

Могу лишь привести выдержку из некогда бурной дискуссии.

 

А, пардон. У меня для каждой задачи выделяется свой стек.

Я почему-то подразумевал под "стеками" стеки каких-либо протоколов.

 

А как Вы себе представляете RTOS с общим стеком?

Минимальной структурной единицей RTOS является задача. Которая, в идеале, ничего знать не знает о других.

А то, что, видимо, Вы хотите, есть ни что иное, как суперцикл + глобальные флаги состояний.

Share this post


Link to post
Share on other sites

Долгое время мучался тем же вопросом по поводу RTOS для STM32. Основное для меня было использование вместе с CubeMX. Поскольку я в большей степени хардверщик, то этот инструмент позволяет не только быстро начать проект, но и адаптировать настройки по мере разводки платы.

И тут на хабре буквально пару недель назад появилась статья по ThreadX+CubeMX :)

https://habr.com/ru/company/quarta/blog/514084/

Написана очень неплохо. Я запустил первый пример на своей платке Discovery L4 с соответствующими изменениями.. По ходу дела автор подправил статью по моим замечаниям.

Теперь собираюсь переносить систему на свою кастомную плату. Надеюсь, что автор в скором времени напишет продолжение для GUIX.

И да, насколько я понял эта система может работать в двух режимах, как корпоративная, так и вытесняющая.

 

--------------

Начало этого моего постинга звучит, как спамная реклама, но это не она :)

Share this post


Link to post
Share on other sites

Кооперативная или вытесняющая многозадачность - это относится только к способу передачи управления планировщику ОС. Если ищете ОС с минимальными затратами ОЗУ, то правильнее искать не кооперативную ОС, а так называемые ОС с общим стеком задач (stack-less). Да, они бывают только кооперативными, но не все кооперативыне ОС являются stack-less (Вы уже с этим столкнулись).

 

Я знаю 2 подхода в построении stackless операционных систем. Их можно разделить по тому, как будут описываться задачи с точки зрения программиста:

 1) Каждая задача - это функция, не содержащая бесконечного цикла, т.е. все задачи вида "выполнение-до-завершения" (run-to-completion). Такие системы сделаны по принципу, описанному в статье Планировщик для микроконтроллера. Этот же планировщик можно использовать и на STM32, после минимальных правок (заменить макросы запрета/разрешения прерываний). Полноценных ОС для STM32, построенных на таком принципе, я не видел (хотя для AVR попытки их сделать были: uSmartX и SmartX). Были даже идеи добавления приоритетной вытесняющей многозадачности (теорию можете почитать в статье про Super Simple Tasker), которые автором позже развились до фреймворка Quantum Leaps (а вот он он для STM32 есть).

 2) Каждая задача может не именть выхода, т.е. может содержать бесконечный цикл. Из того, что можно без проблем запустить на STM32, стоит рассмтаривать ОС, построеные на механизмах локальных переходов (на основе swich/case, setjmp/longjmp или "Labels as Values"). Их теория описана в любой статье про Protothreads. Реализации: Protothreads, cocoOS, DemOS. Первая совсем простая, остальные две ОС даже имеют некоторые средства ваимодействия между задачами (очереди, события, семафоры и т.п.). Кстати, Protothreads позже развился до Contiki OS, посмотрите, возможно там есть возможность работать в stack-less режиме.

Share this post


Link to post
Share on other sites
50 минут назад, arhiv6 сказал:

позже развился до Contiki OS, посмотрите, возможно там есть возможность работать в stack-less режиме.

в контике один общий стек МК используется. проект уже 2года как мигрировал в contiki-ng - отказались от сапорта 8биток.

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

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

Share this post


Link to post
Share on other sites
20 hours ago, Chudik said:

RTOS для STM32

Какой STM32? Их много, на базе различных микроархитектур (или архитектур, тут я пока путаюсь): cortex-m0(+)/cortex-m3/cortex-m4(f)/cortex-m7. Если у вас cortex-m0 (stm32f051/091, например), то такая ось, как ThreadX будет для него немного тяжеловата и избыточная по функционалу. Я бы даже туда FreeRTOS не стал теперь помещать. Хотя в режиме статического распределения памяти, вполне можно. Но всё таки для таких "крох" больше подходит что-то наподобие scmRTOS.

Share this post


Link to post
Share on other sites
02.05.2020 в 13:40, C2000 сказал:

Нужна RTOS с минимальными затратами. Особенно по ОЗУ. Чтобы не создавала своих стеков а работала  с общим стеком МК.

Только сейчас заметил, что тема почти полугодичной давности. C2000, на какой ОС в итоге остановились?

Share this post


Link to post
Share on other sites
1 minute ago, C2000 said:

В итоге было принято решение проект сделать без OS

Что же у вас за МК-то такой? На 15-летней давности аврках с 1 кб озу запускали три процесса с вытесняющей ОС и работало всё нормально.

Share this post


Link to post
Share on other sites
On 8/15/2020 at 9:29 PM, haker_fox said:

Если у вас cortex-m0 (stm32f051/091, например)

Я F0 никогда не пользовался и, надеюсь, не буду. :-)

Использую F4 или L4, L4+ - оба семейства на Cortex-M4. Иногда L0, L1. Но с ними сейчас только мелкие проектики имеет смысл делать. Без OS.

А так, касаемо STM32 есть порты для Cortex - m0, m3, m33, m4, m7

https://github.com/azure-rtos/threadx/tree/master/ports

 

scmRTOS пробовал, когда работал с MSP430. Не слишком понравилось. Слишком много надо наворачивать для работы с регистрами. По крайней мере, мне тогда так показалось и проект сделал без OS.

Share this post


Link to post
Share on other sites
16.08.2020 в 14:42, C2000 сказал:

В итоге было принято решение проект сделать без OS

Можно сделать просто переключатель контекста, а всю остальную РТОСную дребедень убрать, добавить по необходимости свои мьютексы в критических местах и глобальные переменные между задачами. Какой-то специальный стек задач тут вообще не нужен...

1 час назад, Chudik сказал:

scmRTOS пробовал

Писать на плюсах для мелких МК - это еще тот изврат :biggrin:

Share this post


Link to post
Share on other sites
30 minutes ago, mantech said:

Можно сделать просто переключатель контекста, а всю остальную РТОСную дребедень убрать

Да, можно. У TI был такой проект. MSS - https://code.google.com/archive/p/mcu-simple-scheduler/

Мой приятель, когда мы с ним работали у одного работодателя, написал пару проектов на нём. Был очень доволен - неплохие возможности, небольшой футпринт. Я под влиянием этого даже портировал его на STM32L1, прошёл все базовые примеры  и хотел написать следующий проект на нём. Если кого заинтересует, могу выложить куда-нибудь. Но потом нам сообщили, что наши услуги больше не нужны. Так всё и затихло.

Долго искал то, что надёжно работает с минимальными издержками. Вот, с месяц назад подсказали про этот ThreadX. Почитал, попробовал, понравилось. По простоте освоения - на уровне ChibiOS. Прочитал документацию про саму систему по вечерам - всё понятно, без заумностей, логичный API, максимально унифицированный по вызовам системных функций. Были моменты, которые были непонятны, но, скорее на уровне общих принципов RTOS. Просто из-за недостатка опыта, поскольку давно с RTOS не работал. Поспрашивал народ - объяснили.

 

46 minutes ago, mantech said:

Писать на плюсах для мелких МК - это еще тот изврат

Согласен :yes: Поэтому не пошёл в сторону mbed, хотя меня сильно к этому подталкивали.

Share this post


Link to post
Share on other sites
8 hours ago, Chudik said:

Слишком много надо наворачивать для работы с регистрами.

С чем??? А какое отношение ОС имеет к регистрам?

7 hours ago, mantech said:

Писать на плюсах для мелких МК - это еще тот изврат

Лишь только для тех, кто не умеет ими пользоваться:angel: Какой изврат может быть в применении шаблонов, например? Или наследовании? А scmRTOS их в основном и использует. Кстати, использование scmRTOS вовсе не принуждает писать на Си++.

6 hours ago, Chudik said:

Согласен :yes: 

Ну вы, блин, даёте) Выходит, что вы просто не знаете Си++:blum: Ибо только непосвящённый сразу подумает о том, что использование Си++ это использование STL. Естественно, что тащить в мелкий МК какой-нибудь std::string или std::map вряд ли уместно. Но они и не имеют никакого отношения к Си++. Си++ - это, прежде всего, объектно-ориентированное программирование. А оно само по себе не тянет никакого оверхэда.

6 hours ago, Chudik said:

Согласен :yes: 

Ну вы, блин, даёте) Выходит, что вы просто не знаете Си++:blum: Ибо только непосвящённый сразу подумает о том, что использование Си++ это использование STL. Естественно, что тащить в мелкий МК какой-нибудь std::string или std::map вряд ли уместно. Но они и не имеют никакого отношения к Си++. Си++ - это, прежде всего, объектно-ориентированное программирование. А оно само по себе не тянет никакого оверхэда.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this