C2000 3 2 мая, 2020 Опубликовано 2 мая, 2020 · Жалоба Нужна RTOS с минимальными затратами. Особенно по ОЗУ. Чтобы не создавала своих стеков а работала с общим стеком МК. В связи с этим тот же FreeRTOS в корпоративном режиме не подходит, т.к. он так и так работает со своими стеками, просто шедулер вызывается не по таймеру а принудительно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 244 2 мая, 2020 Опубликовано 2 мая, 2020 · Жалоба Так ведь для такого режима пользовательское ПО должно быть написано соответствующим образом (не требующим вытеснения, самостоятельно ограничивающим время выполнения отдельных задач). И в результате получается просто - суперцикл. В котором вызываются процедуры-задачи. Имхо. Неужто суперцикл трудно изобразить самостоятельно, без ОС? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 2 мая, 2020 Опубликовано 2 мая, 2020 · Жалоба 1 hour ago, jcxz said: . . . . И в результате получается просто - суперцикл. В котором вызываются процедуры-задачи. Имхо. Неужто суперцикл трудно изобразить самостоятельно, без ОС? Если, "вдруг", трудно - protothreads (тут на форуме как-то обсуждали). Макрос-обертка, тотже суперцикл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 мая, 2020 Опубликовано 2 мая, 2020 · Жалоба Могу лишь привести выдержку из некогда бурной дискуссии. А, пардон. У меня для каждой задачи выделяется свой стек. Я почему-то подразумевал под "стеками" стеки каких-либо протоколов. А как Вы себе представляете RTOS с общим стеком? Минимальной структурной единицей RTOS является задача. Которая, в идеале, ничего знать не знает о других. А то, что, видимо, Вы хотите, есть ни что иное, как суперцикл + глобальные флаги состояний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chudik 0 15 августа, 2020 Опубликовано 15 августа, 2020 · Жалоба Долгое время мучался тем же вопросом по поводу RTOS для STM32. Основное для меня было использование вместе с CubeMX. Поскольку я в большей степени хардверщик, то этот инструмент позволяет не только быстро начать проект, но и адаптировать настройки по мере разводки платы. И тут на хабре буквально пару недель назад появилась статья по ThreadX+CubeMX :) https://habr.com/ru/company/quarta/blog/514084/ Написана очень неплохо. Я запустил первый пример на своей платке Discovery L4 с соответствующими изменениями.. По ходу дела автор подправил статью по моим замечаниям. Теперь собираюсь переносить систему на свою кастомную плату. Надеюсь, что автор в скором времени напишет продолжение для GUIX. И да, насколько я понял эта система может работать в двух режимах, как корпоративная, так и вытесняющая. -------------- Начало этого моего постинга звучит, как спамная реклама, но это не она :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 15 августа, 2020 Опубликовано 15 августа, 2020 · Жалоба Кооперативная или вытесняющая многозадачность - это относится только к способу передачи управления планировщику ОС. Если ищете ОС с минимальными затратами ОЗУ, то правильнее искать не кооперативную ОС, а так называемые ОС с общим стеком задач (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 режиме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 15 августа, 2020 Опубликовано 15 августа, 2020 · Жалоба 50 минут назад, arhiv6 сказал: позже развился до Contiki OS, посмотрите, возможно там есть возможность работать в stack-less режиме. в контике один общий стек МК используется. проект уже 2года как мигрировал в contiki-ng - отказались от сапорта 8биток. по сложности кода, расходам на переключения - протонитки так себе конкурируют с вытесняющим переключением. единственный их бонус и проклятие - общий стек. так что , если у вашего мк озу поболее 30-60к, стоит сильно призадуматся в сторону вытесняющей оси. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 16 августа, 2020 Опубликовано 16 августа, 2020 · Жалоба 20 hours ago, Chudik said: RTOS для STM32 Какой STM32? Их много, на базе различных микроархитектур (или архитектур, тут я пока путаюсь): cortex-m0(+)/cortex-m3/cortex-m4(f)/cortex-m7. Если у вас cortex-m0 (stm32f051/091, например), то такая ось, как ThreadX будет для него немного тяжеловата и избыточная по функционалу. Я бы даже туда FreeRTOS не стал теперь помещать. Хотя в режиме статического распределения памяти, вполне можно. Но всё таки для таких "крох" больше подходит что-то наподобие scmRTOS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 16 августа, 2020 Опубликовано 16 августа, 2020 · Жалоба 02.05.2020 в 13:40, C2000 сказал: Нужна RTOS с минимальными затратами. Особенно по ОЗУ. Чтобы не создавала своих стеков а работала с общим стеком МК. Только сейчас заметил, что тема почти полугодичной давности. C2000, на какой ОС в итоге остановились? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
C2000 3 16 августа, 2020 Опубликовано 16 августа, 2020 · Жалоба В итоге было принято решение проект сделать без OS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 16 августа, 2020 Опубликовано 16 августа, 2020 · Жалоба 1 minute ago, C2000 said: В итоге было принято решение проект сделать без OS Что же у вас за МК-то такой? На 15-летней давности аврках с 1 кб озу запускали три процесса с вытесняющей ОС и работало всё нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chudik 0 29 августа, 2020 Опубликовано 29 августа, 2020 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 56 29 августа, 2020 Опубликовано 29 августа, 2020 · Жалоба 16.08.2020 в 14:42, C2000 сказал: В итоге было принято решение проект сделать без OS Можно сделать просто переключатель контекста, а всю остальную РТОСную дребедень убрать, добавить по необходимости свои мьютексы в критических местах и глобальные переменные между задачами. Какой-то специальный стек задач тут вообще не нужен... 1 час назад, Chudik сказал: scmRTOS пробовал Писать на плюсах для мелких МК - это еще тот изврат Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chudik 0 29 августа, 2020 Опубликовано 29 августа, 2020 · Жалоба 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: Писать на плюсах для мелких МК - это еще тот изврат Согласен Поэтому не пошёл в сторону mbed, хотя меня сильно к этому подталкивали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 30 августа, 2020 Опубликовано 30 августа, 2020 · Жалоба 8 hours ago, Chudik said: Слишком много надо наворачивать для работы с регистрами. С чем??? А какое отношение ОС имеет к регистрам? 7 hours ago, mantech said: Писать на плюсах для мелких МК - это еще тот изврат Лишь только для тех, кто не умеет ими пользоваться Какой изврат может быть в применении шаблонов, например? Или наследовании? А scmRTOS их в основном и использует. Кстати, использование scmRTOS вовсе не принуждает писать на Си++. 6 hours ago, Chudik said: Согласен Ну вы, блин, даёте) Выходит, что вы просто не знаете Си++ Ибо только непосвящённый сразу подумает о том, что использование Си++ это использование STL. Естественно, что тащить в мелкий МК какой-нибудь std::string или std::map вряд ли уместно. Но они и не имеют никакого отношения к Си++. Си++ - это, прежде всего, объектно-ориентированное программирование. А оно само по себе не тянет никакого оверхэда. 6 hours ago, Chudik said: Согласен Ну вы, блин, даёте) Выходит, что вы просто не знаете Си++ Ибо только непосвящённый сразу подумает о том, что использование Си++ это использование STL. Естественно, что тащить в мелкий МК какой-нибудь std::string или std::map вряд ли уместно. Но они и не имеют никакого отношения к Си++. Си++ - это, прежде всего, объектно-ориентированное программирование. А оно само по себе не тянет никакого оверхэда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться