ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
16 июня
266984
Связанные сообщения
АрхитектураBigloopRtosМногозадачность
А можно немного мыслей? Несмотря на кучу существующих ОС, набирающих разную популярность, всё же появляются новые. FreeRTOS, pro...2021-10-08
[Японские RTOS T-Kernel 2.0, μT-Kernel 3.0 и много других]. Регистрируют автоматом сразу, все дают качать. Очень качестве...2021-10-08
Очевидно, что без механизма ожидания -- получается полная ерунда, которая ничем не лучше биглупа. Когда событий станет мн...2020-12-06
Я не обобщаю, я подвожу к сложности реализации такой элементарной сущности как условная переменная. Без которой нормально задачу...2020-06-19
Прототреды это биг-луп вывернутый наизнанку. Или наоборот. То же самое, что конечные автоматы им. Шалыто, switch-технология. Удо...2020-06-11
Железо нужно симулировать не на уровне битов и фронтов сигналов, а на уровне высокоуровневых операций (например, чтение-запись б...2019-11-07
Да, примерно об этом я и думаю. Что систему КА можно запускать параллельно, на пуле потоков, по выбирая готовые к запуску по мер...2019-10-22
Как запустить параллельную систему КА написано у Шалыто лет 20 тому назад. Впрочем и самому додуматься можно. Тема уже изъезженн...2019-10-22
Ровно наоборот. Конечные автоматы подразумевают ЯВНОЕ выделение всех возможных состояний программы (как множества состояний сист...2019-10-21
Выскажу ещё раз: FreeRTOS сырая недоделка, смысла особого, без реализации ряда перечисленного (см. ниже) не имеет и, хуже того, ...2019-10-18
"В контексте МК" никаких задач не должно быть! :) Контроллер рассчитан на обслуживание периферии, а потому никаких других событи...2019-09-20
Кооперативную не хотите попробовать? Написана на С, без ассемблера2019-09-02
Смотря какая ОС. В основном ОС делятся по типу: бывают корпоративные ОС и любительские.2019-03-20
Ты что-то не то говоришь. В тикле там свой встроенный цикл обработки событий, либо можно свой написать вместо него, смотря как у...2018-12-01
Когда ПО прибора запускается на обычном ПК. Для этого обычно ПО разделяется на два слоя, как минимум: платформо-независимый (бол...2018-05-23
[Список RTOSов] всяких разных -> Проект osrtos.com2017-11-15
Обновлено: трехколесный вялошипет с квадратными колесами (многозадачка на Си). Рожалось в муках, труд всей жизни :)2015-11-16
Подход, если не нужно реальное вытеснение (т.е. критично время реакции), порочный: сложные системы в "больших компьютерах", наоб...2015-09-12
Кто-нибудь использует RTOS (не ядра) в своих проектах? Интересует их работа в защищённом режиме, взаимодействие пользовательског...2014-11-15
Задача в принципе решима... Но для начала следует понимать некоторые вещи, после чего придёт также понимаение, что не стоит пыта...2014-01-02
Да, трэш угар и содомия. Иногда абстракции через край, поэтому я имею такое мнение, что иногда и не грех в исходники прямо вписа...2013-12-29
Не совсем. Над HAL может быть ещё один слой, уже нужный для совмещения разных программных интерфейсов. Т.е. есть модуль A, котор...2013-10-25
Вот и отличненько. Удалось значит понять суть: императивный стиль программирования повсеместно вдалбливаемый в (не)окрепший мозг...2013-07-31
Давно холиваров не было. Как насчёт RTOS vs Main Loop? Поделитесь практическим опытом. Сам RTOS не применял, да и не очень хочет...2013-07-24
правильное использование RTOS - научите уму разуму2011-12-21
Вот колеблюсь, какую RTOS использовать для ARM7. Вот приглянулись TN Kernel, ScmRTOS. Советуют AMX и FreeRTOS. Кто что подскажет...2011-11-28
Топик посвящён программированию микроконтроллеров в условиях необходимости экономии электроэнергии и архитектуре ПО в целом.2011-10-24
Полезны аж 3 прослойки (ассемблеристам дальше лучше не читать):2011-10-13
Нефиг си пинать за то, что он не хаскель ;)2011-08-14
Ось для cortex-M3, в которой декларируется: "Interrupt latency is 0". В документации сказано, что критические секции организован...2009-12-08
Статья про атомарный доступ к битовым полям.2009-03-03
fk0, легенда (13.08.2011 15:54, просмотров: 22725)
Тут очень любят рассуждать о RTOS и всём таком. Но как-то массово замалчивается, что стандартная C-библиотека для неопределённого ряда своих функций не допускает рекурсивных (вложенных) вызовов.  Классический пример -- strtok(). Но на самом деле проблему могут вызвать и математические функции и что угодно -- заранее не сказать. Проблему вызовет любая статическая переменная в libc. Проблема широко известна в unix-программировании (какие функции можно вызывать в обработчике сигнала, что в принципе, эквиэвалентно прерыванию в микроконтроллере, или переключению контекста в RTOS). Причём, если в обратботчике сигнала или прерывания можно как-то отказаться от библиотечных функций, то при использовании нескольких потоков в RTOS, получается, библиотечные функции можно использовать только в одном потоке. При вытесняющей многозадачности. Абсурд! Разумеется есть RTOS, где библиотека C собственная, отличная от поставляемой с компилятором, и где эти проблемы решены, но это отдельная история. Есть также отдельные библиотеки C, расчитанные на работу в многопоточной среде и где эта проблема решена (но не в связке с конкретной ОС). Но глядя на множество OS с вытесняющей многозадачностью для мелких МК, где libc только из комплекта компилятора (FreeRTOS, tnkernel, scmrtos...... список может быть очень большой) возникает вопрос -- а какой в этом смысл, если на базе такой rtos, без "многопоточной" libc и без обёртки её опасных функций механизмами синхронизации ОС, практически, невозможно использовать библиотеку C вовсе (кроме одного потока) -- какой тогда смысл вообще в такой "многозадачности"? Если принципиально необходимо вытеснение, если есть несколько задач активно использующих C-библиотеку -- такие RTOS принципиально не применимы и кооперативная псевдомногозадачность (да хоть простейший big loop) -- смотрится более реально. Либо использование "тяжёлых" ОС, где все эти недостатки решены, но и контроллеры там другие. Взять практический пример. PIC24 и компилятор C30. Или PIC32 и C32. Где гарантия, что например, функция atan() не будет вычислена неправильно при параллельной работе? Практически действительно "нереентрантных" функций в языке мало и они все известны (asctime, ctime, gmtime, localtime, strerror rand, srand, strtok... и ещё переменная errno). Но практически неизвестно (об этом нигде не пишется), что реализация остальных функций "реентрантна". Например printf запросто может быть нереентрантным из-за буферизации (статические переменные). Кроме того, errno в любом случае нужна, в основном для math.h. Функция malloc тоже. Ещё функции работающие с UTF-8. Может ещё что-то забытое. Функции printf, atan, strtok и malloc можно не использовать (и нужно) в прерываниях. Но как быть в многозадачной вытесняющей ОС? Вывод из этого можно сделать неутешительный. Большинство простых вытесняющих RTOS на самом деле бесполезно. Ибо вынуждают программировать без использования библиотечных функций. Что годится, чаще, только для маленьких ограниченных программ. Которые также часто можно реализовать без ОС вовсе. Другое дело кооперативные ОС. Там библиотеку C можно использовать полноценно. Но расчитывать не вытеснение не приходится, что затрудняет программирования некоторых задач. Среди кооперативных ОС особняком стоят те, что реализуют некоторый механизм сопрограмм или т.н. protothreads. Возможно они упрощали бы программирование, но на удивление все обладают одним фатальным недостатком -- процесс не может ни ожидать более чем одного события одновременно, ни не обладает возможностью асинхронной коммуникации (вроде сигналов в unix). В "больших" ОС обычно есть и какой-то вариант waitformultipleevents или select() и сигналы. Невозможность ожидания более чем одного события ведёт опять же к ручной проверке событий (например, по-таймеру -- чем это отличается от проверки флагов в big loop?), либо к нагромождению (псевдо)параллельных задач решающих, в общем-то одну задачу -- и их между собой ещё нужно как-то синхронизировать. В итоге применение такой ОС может больше порождать проблем, чем решать. Тем более, если изначально программа проектируется на основе конечных автоматов, например. Каждый автомат обычно в каждом состоянии реагирует более чем на одно событие. И разбивать реализацию автомата на несколько задача в protothreads исключает все плюсы и применения protothreads и автоматного подхода к проектированию. Big loop не так уж и плох? Если нужно вытеснение, то серьёзной альтернативой может служить что-то вроде ecos (где в newlib вопрос с реентрантностью решен). С маленькие контроллерами с объёмами ПЗУ до 128-256кБайт и ОЗУ до 8-64КБайт тут делать скорей нечего.
[ZX]