|
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 67
|
|
Решил написать RTОS для МК в академических целях.08.09.2016, 00:03. Показов 27111. Ответов 80
Метки нет (Все метки)
Думаю тут многие это делали, для разминки мозгов вещь вполне подходящая. Разработку решил вести поэтапно - от самой простейшей кооперативной (простая замена super loop), до более-менее вменяемой. Тему создал чтобы поспрашивать о тех или иных архитектурных решениях. Основная проблема заключается в том, что мне в голову лезет куча идей как реализовать тот или иной функционал. А так как это все затеяно ради научного интереса, то определенных целей у меня нет, и становиться очень сложно выбрать между той или иной реализацией. Вот тут то и нужен коллективный разум. Может вы подскажите какую-нибудь идею, которая не пришла мне в голову, или скажите, что-де вот эта идея самая лучшая а остальные полная ерунда.
Начать я хочу с вопроса управления памятью. Для задач, семафоров и всякой другой ерунды нужны управляющие структуры и их нужно где-то и как-то создавать. После отметания явно бредовых идей, у меня остались следующие варианты: <ol style="list-style-type: decimal"><li>Самый тупой способ - сделать все управляющие структуры публичными и дать пользователю возможность создавать их статически. Не нравится, потому что грубо нарушает инкапсуляцию. Как то это нехорошо.</li><li>Чуть получше - заставить пользователя реализовать специальную функцию, которую ОС будет вызывать, когда ей нужна память, эдакий mallocHook(). Откуда будет браться память - это уж проблемы пользователя. Решение мне в принципе нравится, довольно гибкое, но для простейшей ОС сложноватое. Неохота заставлять пользователя реализовывать свой менеджер памяти, каким бы он простым ни был. Вроде FriiRTOS поддерживает этот способ.</li><li>Классический вариант - ОС сама статически выделяет пул объектов, количество которых задается дефайном. Решение простое, инкапсуляция соблюдается, лишних телодвижений не требует, но какое-то топорное. Не нравятся мне эти дефайны и не нравится заранее загадывать сколько и чего мне нужно. Знаю, что uC/OS II так работала.</li><li>Последнее решение - похоже на первое, но оно не так явно нарушает инкапсуляцию. Суть в том, что для каждой управляющей структуры, пользователю предоставляется её близнец-пустышка с размером и выравниванием соответствующим оригиналу. То есть пользователь создает пустышку не зная о её устройстве, а внутри ОС она уже приводится к реальному типу. Мне нравится это решение, не идеальное но вполне простое и надежное. Так же имеется во FriiRTOS</li></ol> Что бы вы, как пользователи, выбрали? Может есть другие варианты?
0
|
|
| 08.09.2016, 00:03 | |
|
Ответы с готовыми решениями:
80
Решил написать программу для множества мальденброта, написал полностью программую Решил написать анонимайзер Решил написать программку |
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 08.09.2016, 01:55 | |
|
IMHO, пользователи бы выбрали не С++.
Меня уже колбасит от необходимости содержать и адаптировать софт только из-за одной rtos. Разрабы считают, что им удобнее было пару инструкций написать на С++, а проблемы пользователя - это не их проблема.
0
|
|
|
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
|
|
| 08.09.2016, 02:12 | |
|
Сейчас ось пишут все кому не лень, даже у меня есть. http://forum.ixbt.com/topys.cgi?id=48:11735
На плюсах тоже есть готовая ось, ничего изобретать не требуется. Посмотри как сделана https://www.segger.com , если-б код был полностью открытым - то эта ось могла-б стать стандартом в стане мк. Потому как имеет максимальное быстродействие на большом количестве одновременно активных!!! задач. Всякие FriiRTOS и чибиось - теряют в производительности после добавления второй активной задачи - ровно половину мощи мк, а если задач 100 - то система превращается в черепаху. Кстати, на своей оси запускал 300 копий червяка, в результате частота кадров упала с 60 до 30, ну это так, к слову.
0
|
|
|
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 67
|
||
| 08.09.2016, 12:57 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 67
|
|||
| 08.09.2016, 13:11 | |||
0
|
|||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 08.09.2016, 14:20 | |
|
Mimzodo, "Что бы вы, как пользователи, выбрали?"
0
|
|
|
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 67
|
|
| 08.09.2016, 14:40 | |
|
Так я же сразу написал, что я не пользователь. Мне сейчас не нужна RTOS, соответственно каких-то требований я к ней предъявлять не могу. Мне хочется над этим поработать из чистого интереса, чтобы новый опыт получить, не более. Но вообще мне нравится последний вариант, потому что он относительно простой и надежный. Где действительно нужно постоянное создание/удаление задач я представить себе не могу, поэтому вариант с динамическим выделением памяти мне не очень по душе. Но это только мне, с моей :) "чисто академической" точки зрения так кажется. Возможно, если бы мне это понадобилось для каких-то реальных задач, я бы выбрал что-то другое.
Это знаете, как академические языки программирования, Haskell например. Он весь такой красивый, идеальный, основан на чистых математических принципах, но в реальной жизни используется какой-нибудь C++ где сплошные хаки и костыль на костыле. Я вот не хочу совсем уж отрываться от реальности и делать нечто абстрактное. Поэтому спрашиваю тут что да как, с какими трудностями сталкивались, что бы хотели, что не хотели. Так сказать использую чужой опыт и учусь на чужих ошибках. Если учиться на своих, то это понадобиться на всех возможных реальных задачах перебрать все возможные варианты реализаций, на что и жизни не хватит. P.S. Так как вероятность сваливания данной темы в пространные разглагольствования в духе "зачем это тебе надо", "все и так уже есть", "а что бы ты сам выбрал" очень велика, то предлагаю все же не отклоняться от начальной цели. Я задал вполне конкретный технический вопрос, привел разные варианты решения, и хотел бы услышать в ответ конкретное мнение.
0
|
|
|
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
|
||
| 08.09.2016, 15:20 | ||
По поводу "динамического" распределения памяти: резервируется статический массив байт и делается указатель на начало. "Выделение" просто возвращает текущее значение указателя, а сам указатель инкрементируется на величину выделяемого блока. Поскольку освобождения при этом не предусматривается (да оно и не нужно, вобщем), то накладных расходов никаких, а скорость максимальна. При этом нет кучи макросов по всему коду и писать можно под достаточно комфортный режим как если бы динамическое выделение было на самом деле доступно.
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 08.09.2016, 15:23 | |
|
Прочитал "пожелания" и подумалось - может взять что-то готовое и творчески переработать? Скажем, несть неплохая (IMHO НЕ_плохая!) простенькая RTOS, которую удобно применять в обыденных задачах. Я говорю о scmRTOS. Вот если бы ее портировать на нормальный С, то это было бы не только "поучительно", но еще и полезно практически.
В любой программе есть мультитаскинг, вот только его реализуют на костылях. Небольшая простенькая RTOS на 2-3 потока без какого-либо "динамического выделения" - это то самое, что нужно. Да и ... самый юзабельный камень (IMHO) - STM32F030F4, ресурсов у него не так, чтоб мало (это на avr), но и не черезчур. Короче говоря, мне было бы интересно что-то простое, без изысков, как scmRTOS, но и без всяких Cpp. Для "больших" камней (F4 и выше) нужны другие RTOS и ... они уже есть. Проверенные и отлаженные. Оно уже мало кому надо. А вот "мелкое и пушистое" без большой ресурсоемкости, будет очень к месту. Поэтому и предлагаю рассмотреть порт scmRTOS на человеческий язык.
0
|
|
|
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
|
||
| 08.09.2016, 16:57 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
|
||
| 08.09.2016, 17:25 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
||
| 08.09.2016, 17:33 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
|
||
| 08.09.2016, 17:46 | ||
"язык порт рассмотреть"? в восторге мастер Йода будет :)
0
|
||
|
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
|
||
| 08.09.2016, 18:37 | ||
Это лишь мыслительные придирки :) P.S. To Dosikus_2: Forth++ ecть в в виде разных ООП расширений! (к сведению) :) Навскидку: Real Time Forth by Tim Hendttoss pdf файл тоже есть. (наши учителя) P.P.S. Evsi, не уподобляйтесь Dosikus_2, расширяйте кругозор.
0
|
||
|
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
|
||
| 08.09.2016, 19:45 | ||
Ну для начала нужно всё-таки понять - как разные ос переключают контекст. Всякие FriiRTOS и чибиось отдают задаче стандартное время 1мс. Есно самому переключателю глубоко пофиг на то что происходит в задаче всё это время. Там вполне может работать циклический опрос бита готовности какой-либо периферии, или нечто подобное - простое и тупое. Все задачи в таких ос являются бесконечными циклами - большими или маленькими. Если большой цикл может не успеть выполнить свой полностью за 1мс - то ничего страшного, потом успеет. А вот с малыми циклами - проблема. Получается тупой нагрев кристалла бесполезным числодроблением. https://www.segger.com - даёт каждой задаче разное время - аналог приоритета. Время может быть от 1мкс до 1мс, когда время выйдет -задача переключится автоматически. Если в самой задаче стоит команда "шев, усё готово" - то ос сама переключает контекст, и не через диспетчер задач - а моментально. Можно писать тупой опрос периферии, и в случае промаха - отдавать процессорное время. Получается гораздо быстрее чем через диспетчер задач, очередь сообщений, прерывания и так далее..., от слова - мгновенно. Есно самая жирная задача, которая действительно выполняет полезную работу - будет иметь полное время 1мс (равное 100%), но вот 99 других не столь сложных и не столь актуальных на данный момент - будут работать суммарно 1-10мкс. Время на переключение никуда не денется, но сами потери не столь высоки. Есно всё это касается активных задач. Но саму задачу можно отправить спать, поставить на ожидание флага, или даже убить - чтобы потом запустить заново. Ещё один бонус - задача не обязательно должна содержать бесконечный цикл. :) Если сама задача медленная и одноразовая - то без цикла она будет выполняться до последней строчки, а после убьёться об стену, и хвосты за собой почистит. Одноразовая задача может запустить множество задач, подготовить для них общие буферы и структуры связи, передать адреса и явки в запущенные задачи, и есно самоубиться об стену - очень удобно. Насчёт явного впечатывания задач в систему. При сомнительной экономии в 1к кода - получаем огромную головную боль. Головняк заключается в том что стеки задач, адреса переменных, адреса самих задач, а так-же их нативность - всё это придётся считать вручную. Писать тонны дифлайнов - которые будут ссылаться на другие дифлайны. И как результат - через месяц проект выглядит как послание инопланетян. Всё это реализовано в FriiRTOS и чибиось в полном объеме. Отчего запуск двух тасков - уже событие мирового масштаба. Наличие в ос железного уровня поддержки периферии чипа - не обязательно, и даже вредно. Сама ось должна быть устроенна так -чтобы можно было запустить абсолютно любой корректный код для данного чипа. Что в FriiRTOS просто невозможно. Вот нет там поддержки нужной тебе фигулины - война. У вас не получится вставить свой драйвер в эту ось, чисто физически. В качестве внешней промочки в виде отдельной задачи - да. Почти все ключевые задумки segger - реализованы в моей ос http://forum.ixbt.com/topys.cgi?id=48:11735 . Там есть пробелы, но мне уже лень.
0
|
||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
||
| 08.09.2016, 19:52 | ||
Ну тогда форт--... А по теме и С с крестами и форты в эмбедде путь в никуда...
0
|
||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
||
| 08.09.2016, 21:03 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 11.06.2010
Сообщений: 351
|
||
| 08.09.2016, 21:14 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 67
|
||||||
| 08.09.2016, 21:59 | ||||||
0
|
||||||
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
||
| 08.09.2016, 23:12 | ||
0
|
||
| 08.09.2016, 23:12 | |
|
Помогаю со студенческими работами здесь
20
Вот решил написать Мышь беспроводная Logitech для пк, в рабочих целях Решил написать сапера - неясности Расчет академических часов Инструменты для анализа кода в целях поиска узких мест Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|