Цитата(bmf @ Jun 14 2005, 23:50)
И проблем переписать ее на простом C для улучшения портируемости нет никаких, только вся целостность как ОС сразу пропадет.

Попробуйте! Особенно интересно будет посмотреть, как Вы на С будете реализовывать инкапсуляцию, наследование и, особенно, шаблоны. И главное, смысла никакого в этом нет. Реализация на С++ имеет недостаток в силу меньшего распростанения этого языка, но и дает одно из главных преимуществ - простоту и безопасность использования. Использование действительно очень простое, проще некуда - я знаю несколько человек, которые в ++ почти ничего не понимают, однако безо всяких проблем используют scmRTOS, освоив буквально за пару дней.
Цитата(bmf @ Jun 14 2005, 23:50)
Кстати bitmapserch в нормальных процессорах эта одна ассемблерная команда за один такт, здесь в том же ucos прощелкали, эту возможность, чтобы вынесте ее в порт.
Думаю, что ничего они не "прощелкали", а пошли на это сознательно. Лябрусс сразу сориентировался на 16 (и более) разядные процы с возможностью подключения внешней памяти (у него встречается недвусмысленное замечание о том, что на однокристаллках использование вытеснящей ОС очень затруднительно). Отсюда и количество задач до 64-х, отсюда и соответствующий механизм поиска активной задачи с наибольшим приоритетом, отсюда и таблица на 256 байт, объявленная как const - не жалко ему 256 байт, которые в Гарвардских процах размещаются в ОЗУ (хотя этого объема хватает для стеков двух-трех процессов). Потому что не ориентирована эта ОС на МК с малым количеством ОЗУ, и не ставилась никогда задача оптимизировать ОС под мелкие МК.
Цитата(bmf @ Jun 14 2005, 23:50)
Насчет макроса, здесь я ошибся, использую свой порт, а там от оригинального ucos мало чего осталось, но такая возможность принципиально есть.
Ну, если Вы так круты, что фактически переписали uCOS, то добавить в scmRTOS простой бинарный семафор Вам ничего не должно стОить! Ведь там работы-то на полчаса - взять за основу TEventFlag, изменить пару строчек внутри его функций-членов да прописать новый тип внутри пространства имен OS. Во всяком случае, уже на эту дискуссию Вы потратили времени несравенно больше.

Цитата(bmf @ Jun 14 2005, 23:50)
Про прерывание я имел ввиду случай, когда не надо будет переключать контекст при ввходе/выходе, в smcRTOS это обязательно, независимо от будет ли выполняться само переключение, таких ситуаций в жизни предостаточно.
Э-э, пардон, а в uCOS что, не так, что-ли? Как Вы себе представляете переход из прерывания в другой процесс/задачу, если на входе не сохранили конекст текущей задачи?
Есть стройное и элегантное решение, состоящее в том, чтобы иметь в МК отдельное софтовое прерывание, которое и будет переключать конктексты, а все остальные прерывания сделать обычными, где при необходимости взводятся сервисы и выставляется запрос на софтовое прерывание - при выходе из обычного прерывания вызывается софтовое, которое и производит переключение контекстов. Но ни в AVR, ни в MSP430 такого прерывания нет, можно использовать какое-нибудь свободное, но тут уже все это получается проектнозависимое - в одном проекте так, в другом эдак... Скажу по секрету, что такая возможность в настоящее время серьезно рассматривается и в одной из будущих версий scmRTOS этот механизм появится.
Цитата(bmf @ Jun 14 2005, 23:50)
И кстати почему то все солидные фирмы скромно называют свою embedded RTOS - или кернелом или биосом и
Ага, особенно uCOS. Или embOS. Или Salvo. Или jacOS.
Цитата(bmf @ Jun 14 2005, 23:50)
только новоиспеченные кричат о свох продуктах как о OS, до которой в полном смысле этого слова им ... .

Для начала дайте четкое определение термину "Система". Потом термину "Операционная система". Потом сделаем выводы.
Подумайте над такой вещью. Мерседес - это автомбиль? А Вольво? А Фольксваген-жук? А Тойота Королла? А Хаммер? А Зил-130? А Камаз? А БелАЗ? А Ока?
А Ту-154 - самолет? А Боинг-747? А Су-27? А Антей? А Сесна? Или Сесна - это фанера с моторчиком?
Мысль, думаю, ясна - объект относится к той или иной категории по функциональному назначению, минимально необходимому составу и способности выполнять основную функцию.
Теперь о системах. Система - это совокупность разнокачественных объектов, подчиненных решению определенной задачи (или круга задач). Таким образом, в нашем контексте, система по минимуму - это ядро и набор сервисов. Без сервисов ядро - это ядро и не более. Т.е. тот самый Kernel. Само по себе оно достаточно бесполезно. И наличие дополнительных, качественно отличающихся от него объектов, органично с ним взаимодействующих, дополняет ядро до целостной сущности - до
системы.
А уж размер системы, ее насыщенность и обвешенность дополнительными фичами - это следущий вопрос. Все эти дополнительные фичи, идущие в составе ОС, должны иметь мотивацию, т.е. то, зачем они. Например, если некая ОС имеет в своем составе поддержку TCP/IP, то это указывает на то, что данная ОС ориентирована на телекоммуникационные приложения. Но сам по себе этот протокол к ОС отношение имеет весьма опосредованное и может вообще идти просто как библиотека (и это, имхо, правильный путь).
Таким образом, любая OS, RTOS, Kernel и т.д. на деле являются именно
системами и ничем иным. А конкретное название - это не более, чем маркетинговый ход, имеющий целью выделить свое поделие из общего количества аналогичных и/или подчеркнуть ключевую особенность - как в случае с uCOS, где сказано, что она The Real-Time Kernel, что понимай как: "У нас тут не хрен в сметане, а ядро реального времени!".

Цитата(bmf @ Jun 14 2005, 23:50)
smcKernel отражало внутренности гораздо вернее.
Совершенно не так! Kernel там есть и представлен в виде class Kernel. А все вместе именно система, хоть и маленькая, можно сказать крошечная.
Цитата(bmf @ Jun 14 2005, 23:50)
Даже в ucos потом дописали "Real-Time kernel".
Это не потом, а сразу. Только это не дописка, а нечто вроде расшифровки - дескать, ОС с ядром реального времени.
P.S. Ответ пришлось разбить на три сообщения, потому что в одном большом не работает квотинг, а без него читабельность, имхо, неудовлетворительная.