Перейти к содержанию
    

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кооперативная или вытесняющая многозадачность - это относится только к способу передачи управления планировщику ОС. Если ищете ОС с минимальными затратами ОЗУ, то правильнее искать не кооперативную ОС, а так называемые ОС с общим стеком задач (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 режиме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 минут назад, arhiv6 сказал:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, Chudik said:

RTOS для STM32

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

02.05.2020 в 13:40, C2000 сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, C2000 said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16.08.2020 в 14:42, C2000 сказал:

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

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

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

scmRTOS пробовал

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, хотя меня сильно к этому подталкивали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 вряд ли уместно. Но они и не имеют никакого отношения к Си++. Си++ - это, прежде всего, объектно-ориентированное программирование. А оно само по себе не тянет никакого оверхэда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...