|
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 67
|
|
Решил написать RTОS для МК в академических целях.08.09.2016, 00:03. Показов 27556. Ответов 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 | |
|
Вот решил написать Мышь беспроводная Logitech для пк, в рабочих целях Решил написать сапера - неясности Расчет академических часов Инструменты для анализа кода в целях поиска узких мест Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|