|
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 67
|
|
Решил написать RTОS для МК в академических целях.08.09.2016, 00:03. Показов 27163. Ответов 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
Регистрация: 26.03.2015
Сообщений: 316
|
||
| 12.09.2016, 01:14 | ||
Если в том-же направлении , то вот http://forum.ixbt.com/topys.cgi?id=48:11835 Человек в домашних условиях создаёт новый проц, есно на фпга. Отличие от стандарта - ос на уровне ядра, общение тасков на уровне спец команд на асме - напрямую, ну и переключатель полностью аппаратный.
0
|
||
|
1 / 1 / 0
Регистрация: 25.01.2012
Сообщений: 492
|
|
| 12.09.2016, 12:06 | |
|
В академических целях я бы посоветовал обратить внимание на TinyOS.
А сам бы (если бы, конечно :) ) попытался реализовать транслятор, который бы перекладывал функционал шедулера и сервисов RTOS на голый NVIC и DMA (в STM32)
0
|
|
|
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
|
||
| 12.09.2016, 12:15 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|||||
| 14.09.2016, 01:16 | |||||
и да, если отвечать нечего - лучше не отвечать, только не надо заливать про наезды, их там не было.
а к чему вопрос? вы думаете, что написать свою микро-ось - это какой-то рокет-сайнс? это далеко не так.
0
|
|||||
|
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 211
|
|||
| 12.12.2016, 22:16 | |||
У МК своя специфика. Возможно, для большинства программ для МК нужна другая ОС - гораздо более простая и с быстрой и понятной реакцией.
0
|
|||
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 11.01.2017, 06:40 | |
|
А я давно предлагаю обсудить, что все-таки нужно микроконтроллерной ОС.
FriiRtos мягко говоря не дотягивает по уровню. nuttx, берет курс на упрощенное копирование линукса, что хорошо, но мне как-то печально с этого. embox, ИМХО, как-то слишком любит статические структуры. Плюс, там как-то понатаскано все из разных мест. Микроконтроллерная ОС должна хорошо уметь железо, и, скорее всего, поставляться в виде библиотеки. Должна иметь хороший отладочный функционал. Уметь, кто бы что ни говорил, работать с динамической памятью. Хорошо бы обсудить вопрос планирования процессов и того, чем вообще нужно считать процесс. Я, например, считаю, что по хорошему силовая вытесняющая многозадачность не есть самое необходимое и уместнее целиться на кооперативную многозадачность. Очень важен вопрос стека протоколов. Стек TCP/IP неподъёмен и сложен в поддержке, но определенно требуется какая-то унификация каналов связи. Необходимость файловой системы или нэймспейсов ака QNX Это все крайне интересные вопросы, товарищи.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
|
|
| 14.01.2017, 04:11 | |
|
Кооперативная многозадачность это когда процесс сам передает управление? Мне кажется, что это очень неудобно. В крайнем случае можно подумать об одинаковых приоритетах при вытесняющей многозадачности.
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 14.01.2017, 11:32 | ||
Так что embos как раз этому требованию удовлетворяет.
0
|
||
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 14.01.2017, 23:33 | |
|
А что, динамическое считается небезопасным?
Звучит немного нелепо.
0
|
|
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 14.01.2017, 23:36 | |
|
bw429
На самом деле очень сильно зависит от задачи. Для управления движениям робота кооперативная многозадачность вполне естественна. Я пытаюсь сочинить диспетчер, который умеет кооперацию и форс одновременно. Впринципе работать может.
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 14.01.2017, 23:57 | ||
Потом будете рассказывать следователям, что динамическое выделение памяти это не опасно ;-) Но такие вещи вылавливаются на стадии проектирования и составление списка FMEA (Fault Mitigation чего то там, я так глубоко не лазил, так как в манагеры не вхож), и если там в этом списке проблем нет решения проблемы (ресет - НЕ решение у данного класса железок) - железку продавать вам не дадут.
0
|
||
|
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 123
|
||
| 15.01.2017, 05:10 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 15.01.2017, 11:52 | |
|
MostirOtyxiy
Это называется "плохое использование хорошего инструмента." Но речь не о том. Добавляем в список. -- Структуры ОС должны позволять как динамическое, так и статическое выделение. На самом деле, это не сложно, благо концепция связных списков в стиле linux сильно помогает в статическом формировании слабосвязанных структур. dmk793 Любопытно. ИМХО, в контексте микроконтроллеров диспетчеризацию следует делать максимально явной и многовариантной. У меня, например, есть опция процесса, которая говорит диспетчеру, можно ли его вытеснять. Есть процессы, которые не могут быть вытеснены просто потому, что не имеют собственного стека (Автоматные, прям как dymyurk1978 любит). Вообще допустимо очень много разных типов процессов. Это, впрочем, мешает строить продвинутые алгоритмы планирования и требует корректного построения каждого процесса. Я не уверен, что это хорошо.
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 15.01.2017, 12:34 | ||
И каким бы не было, хорошим или плохим, использование инструмента, им (FDA и Со.) как бы похер. Ну а, как разработчик, я и Вы все же знаете, что при динамическом выделении памяти нет, не было и не может быть гарантий того, что не наступит такого момента, когда память просто закончится и устройство уйдет в ресет, потому как всегда есть еще внешнее влияние на железку в виде пользователя и прочего большого количества факторов. Кого посадим? Риторический вопрос, конечно, и на этом можно завершить дискуссию в этом направлении.
0
|
||
|
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 211
|
||
| 15.02.2017, 00:49 | ||
Почему бы в такой задаче не поставить отдельный МК, который, работая с соответствующими датчиками и исполнительными устройствами, будет обеспечивать дыхание. Такой периферийный МК будет получать команды от центрального МК, который обеспечивает взаимодействие с пользователем. Высказывал здесь мысль, что при использовании МК одновременное выполнение нескольких задач редко нужно. На мой взгляд, оптимальная ситуация, когда МК последовательно выполняет задачи одну за другой. МК быстро работает, если писать на нормальном языке, поэтому в простых задачах это легко реализуется. А в сложных задачах нужно разбить задачу на функциональные блоки, в которые поставить свои периферийные МК. Ну а центральный МК управляет периферийными МК и обеспечивает сервис с пользователем.
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 15.02.2017, 02:02 | ||
Канальность, называется по буржуйскому (там чтото про sil надо читать, так глубоко я не лазил), по нашему - редундантность, но не полная. Кстати, в той железке, в разработке которой я участвовал, был еще и третий компонент - который мониторил как мелкий контроллер (отвечающий за мотор помпы), так и большой (отвечающий за UI и терапии дыхания). При этом как мелкий контроллер, так и большой контроллер - они мониторили друг друга обоюдно :) И если кто-то начинал гнать, другой впадал в аварийный режим (помпа - на небольших оборотах, но уже без каких либо терапий продолжала дуть), или большой контроллер начинал всячески орать, а если оба они выпадали - то третий компонент (CPLD, кстати) орал еще громче. Так что в итоге - один хрен - ресет. Кстати - немного оффтопа - в госпиталях, когда к ним поступает новая железка, первым делом отключают все эти пищалки/свистелки - оно их нервирует. Дополнение - бесконечное количество контроллеров не поставишь, денег не хватит, как у производителя, так и у покупателя, такое покупать - конкуренция не спит. По этой (и скорее всего это основная) причине на каждую микроконтроллерную единицу вешают несколько задач, а не только одно что-то.
0
|
||
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 20.02.2017, 15:51 | |
|
Не, ребят, это все, конечно, хорошо, но это не по теме. Тема заключается в построении удобной OS а не в уходе от необходимости таковой.
Резервирование очень важно в обсуждаемом классе систем, но не стоит решать за счет него надежность системы. То, что в системе есть резервирование не отменяет того, что каждое звено должно работать как часы. А то, что можно переложить какую-то функциональность на переферийную единицу не отменяет того, что каждая отдельно взятая единица должна иметь возможность решать широкий круг задач, даже если этот функционал не используется. Есть куча приложений, где один контроллер должен решать все задачи, от расчета траектории и управления движками, до выдачи телеметрии и отрисовки красивой рожицы. Вопрос надежности безусловно очень важен, но если заранее пренебрегать функциональностью системы в угоду надежности, мы так и будем ставить по десять кристаллов там, где достаточно было бы и одного. Или двух с симметричным резервированием. Надежности следует достигать путем грамотного проектирования структур данных и алгоритмов, отладки и тщательного "вылизывания", хотя это и гораздо более долгий путь.
0
|
|
|
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 211
|
||||||||
| 16.03.2017, 23:31 | ||||||||
Один большой или несколько малых МК — разница в цене очень незначительна. Несколько МК ставят в достаточно сложных устройствах, цена которых десятки и сотни тысяч рублей, поэтому такая разница в цене не имеет значения. А упрощение разработки и связанное с этим повышение надежности и снижение времени разработки существенно. Конечно, каждый МК в своём функциональном блоке может выполнять далеко не одну задачу. В своём блоке периферийный МК может обрабатывать несколько датчиков, исполнительных устройств, следящих систем и т. д.
На мой взгляд, контролирует ситуацию центральный МК, а периферийные МК только обслуживают его: выполняют команды центрального МК и передают ему информацию о состояние дел в его блоке, показания датчиков и т. д.
Периферийный МК решает определенную чётко поставленную задачу или несколько задач, скажем, подачу кислорода. Программа для такого МК будет простой, без всяких наворотов с ОС, соответственно, её легко написать и она будет надёжной.
Я предполагал, разработчик выбирает число МК согласно поставленной задаче.
Myrmyk писал(а):
Нужна ли ОС для МК, по крайней мере, в большинстве случаев? Если нет, зачем Mimzodo будет тратить время и силы. На мой взгляд, есть гораздо более актуальные задачи. Скажем, удобный язык для МК, хотя я тут не специалист. Myrmyk писал(а):
Тут большой вопрос, как тестировать, чтобы «работало, как часы». Да и жизнь порой подбрасывает труднорешаемые задачи.
0
|
||||||||
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 17.03.2017, 00:23 | ||
На мой взгляд, контролирует ситуацию центральный МК, а периферийные МК только обслуживают его: выполняют команды центрального МК и передают ему информацию о состояние дел в его блоке, показания датчиков и т. д. Почитайте стандарты IEC 60601-xxx. В частности IEC 60601-1ed3.0 пункт 14.8. И за одно IEC 62304, IEC 61508 Ну и еще статейку на тему: http://www.todaysmedicaldivelopments.co ... ot-safety/ Там на первой картинке средний и правый столбцы, ну и вообще вся статья целиком. Особенно про Protection type CPP -One control system wyth two or more independent protective measures. Ну и еще можно погуглить на ключевые слова - Ctoss C Software Ctossification. Тогда такие вопросы, я думаю, не станут возникать.
0
|
||
|
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 38
|
||
| 17.03.2017, 14:21 | ||
Я же это уже сделал еще более 15-ти лет назад. И мою RTOS Вам всё равно не переплюнуть
0
|
||
| 17.03.2017, 14:21 | |
|
Помогаю со студенческими работами здесь
80
Вот решил написать Мышь беспроводная 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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|