Embedded OS

Reply to
Michael Belousoff
Loading thread data ...
14-Mar-05 09:43 Alexey V Bugrov wrote to Oleksandr Redchuk:

OR>> В том-то и дело, что не OR>> "переключения контекста не происходит", OR>> а OR>> "он переключается назад туда, где был"

AB> Да. Хотя в "кривых пиках" в этом случае сохраняется только минимальный Когда-то давно, в одном из первых pic vs AVR (почему-то именно они были горячими) я уже говорил - нет кривых архитектур, есть архитектуры, кривизна которых не совпадает с кривизной извилин.

OR>> Т.е. с точки зрения затрат времени "логическое" отсутствие OR>> переключения и "логическое" его наличие эквивалентны - так как OR>> "физическое" происходит.

AB> В общем случае нет. Перед пользовательским прерыванием не надо сохранять AB> весь контекст, обычно достаточно какой-то его AB> минимально необходимой части. Конечно, в этом случае на обработчик AB> прерывания накладываются некоторые ограничения, но в AB> том или ином виде они есть всегда.

На AVR это можно только на ассемблере либо хорошо топтаться по С-компилятору - чтобы он всегда в прерываниях использовал одни и те же регистры и при этом сохранял их все, даже если нужна часть, и при этом не брал больше, даже если надо - заводил на стеке.

OR>> Т.е. ISR полностью сохраняет всё, делает OR>> свою работу, потом работает перепланировщик и при необходимости OR>> делает переключение на другой контекст.

AB> Да, так делается довольно часто (в той же uC/OS), но это не лучшее AB> решение. О том и речь - разговор с HZ фактически идёт о AVR и MSP430, а там тяжело выбрать минимум для сохранения и нужно учить этому C-компилятор. При написании ассемблерной ОС можно как-то решить как это делать и оно будет работать с частичным сохранением до необходимости перепланировки либо с восстановлением всего, а потом, непосредственно перед reti - вызовом перепланировщика (когда всё жуе в "стандартном" состоянии).

OR>> При такой постановке по OR>> каждому байту переключаться на процесс приёма и обработки пакета OR>> или накапливать пакет без перепланировки - разница тоже есть, в OR>> _дополнительное_ переключение контекста уже _после_ отработки OR>> процесса приёма байта.

AB> Hа самом деле два переключения. Hа процесс и обратно. Ну так я и говорю - одно дополнительное - если (а для AVR и uC/OS, ScmRTOS это так) "осевое" прерывание делает всегда полное сохранение контекста.

AB> Даже на AVR можно сохранять не весь контекст, правда обработчику придется AB> быть писанным на асме. Увы. О том и речь.

OR>> получается. Hа стеке - *огрызок* контекста текущего процесса, причём с OR>> большой вероятностью совершенно не соответствующий начальной OR>> части "осевого" формата и вообще зависит от перекомпиляции.

AB> Да. Поэтому неплохо сохранять этот огрызок не средствами компилятора, а AB> средствами ядра. Компилятор пусть считает, что AB> это обычная функция. Hе знаю, можно ли сказать авровским компиллерам AB> какие ресурсы можно использовать внутри функции Ограничить - "пользуй R0,R1 и с R16 по R21 а остальные не трогай" - нельзя.

AB> или нет, но если нет, то такой простейший обработчик сам бог велел AB> писать на асме. Тоже можно, так как это - очень небольшая и довольно сильно аппаратно-зависимая вещь, такие что на C, что на ассемблере пишутся за одинаковое время и сопровождаются с одинаковым трудом.

wbr,

Reply to
Oleksandr Redchuk

Здравствуйте, Уважаемый Dima!

Sun Mar 13 2005 21:40, Dima Orlov wrote to Olga Nonova:

DO> Ты знаешь альтернативное решение этой задачи без ОС? Можешь указать DO> сколько она заняла ресурсов?

Примерно столько же, поскольку OS там по-моему только 10% от полного стека протоколов TCP/IP.

DO> Так я не понял. Для модных web-серверов нужна ОС или нет?

Это вопрос не ко мне. Я вижу одно, что все разработчики embedded WEB-серверов поголовно используют ту или иную многозадачную RTOS и ОЗУ больших обьемов. А поскольку я намерена использовать в работе готовые технические решения, то поневоле придется иметь дело с RTOS и Cи. Деваться некуда.

DO> Странно, у меня почему-то ни в одном приборе нет интерпретации команд, DO> поступающих с разных интерфейсов... Зато много приборов, где вообще нет DO> интерфейса никакого.

Очень сильно повезло. У меня наоборот- все приборы обязательно, как с ручным, так и с дистанционным управлением в составе системы.

DO> Обычно или есть средства объяснить компилятору этого не делать, или он DO> сам этого не делает. К различиям гарвард/фон-нейман это отношения не DO> имеет вообще.

В IAR и Craft's компиляторах отключить копирование констант из flash в SRAM перед использованием в библиотечных операциях - невозможно! Так или иначе, но константы будут скопированы в ОЗУ.

DO> Почему "даже"? Это совершенно нормально и необходимо особенно на DO> начальных этапах работы с новым кристаллом и компилятором.

По-моему, это сильно ненормально для продуктов, которые рекламируются в качестве упростителей программирования, отладки и сопровождения.

[....]

DO> RTOS - сильно от задачи и имеющихся ресурсов зависит. Чистому ассемблеру DO> сейчас на мой взгляд вообще не место в инженерной практике. За редчайшим DO> исключением может быть.

Отнюдь. Грамотное использование макросов в макроассемблере влегкую накрывает очень приличные по сложности задачи, дает оптимальный код без всякой нагрузки тех теоритических абстракций, что пришли из мира больших машин и поэтому несвойствены и не нужны в практическом embedded.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova

Здравствуйте, Уважаемый Andy!

Mon Mar 14 2005 09:19, Andy Mozzhevilov wrote to Olga Nonova:

AM> Почемy все сpазy начинают пpо какyю-то сложность говоpить? AM> Да не сложная задача, вполне обычная.

После того, как вы прояснили техническеи характеристики,- то да, несложная. Hи по скоростям, ни по физической реализации канала, ни по набору протоколов обмена.

AM> А не надо споpить, надо сначала пpобовать, а потом yже обсyждать.

Пробовала. Hа однокристаллках не понравилось.

AM>>> А если надо более или менее полноценный TCP/IP, то внешнюю память AM>>> придется ставить независимо от наличия ОС.

ON>> Вот именно! Для связных задач нужны буферы обмена внушительных размеров.

AM> Тогда пpичем здесь ОС? Тpебования к памяти - это не тpебование ОС к ней, AM> а тpебование конкpетного пpиложения. Посколькy точно такие же бyфеpы AM> бyдyт оpганизованы и без использования ОС, только с бОльшим количеством AM> pyчной и pyтинной pаботы.

Возращаюсь к началу разговора. Весь вопрос в том как организовывать эти буферы- статически или динамически по мере надобности. Простенькая OS не умеет динамически ничего ни создавать, ни убирать из памяти. Поэтому простенькая, урезанная по фичам OS не годится для приличных связных задач. Ее прикладная ценность весьма сомнительна. Только это я и хотела сказать.

[...]

ON>> стиральные машинки запускаются не вставая с дивана,

AM> А белье кто загpyжает?

ON>> режимы приготовления микроволновок устанавливают из красочного меню в ON>> окне броузера.

AM> А таpелкy с сyпом в нее кто ставит?

Ирония мне нравится. Однако, у вас есть микроволновка дома? Видели, как у нее устроено меню с режимами, например, для разморозки различных продуктов? Я лично запуталась в этих кодах сразу, плюнула и теперь просто устанавливаю режим наглазок. А все дело исключительно в убогой системе индикации на семисегментных LCD. Вы можете запомнить, что разморозить курицу- это режим E-4, а согреть стакан молока- H-23? Я не смогла. А вот, если бы микроволновка, как один из WEB-серверов в домашнем интранете, выводила на экран PC меню режимов прямо в картинках и оттуда же запускалась с сигнализацией о готовности- то совсем другое дело! Кроме нормального меню, WEB- сервер позволил бы дистанционно запускать приготовление заранее заряженной продукции через Internet. И пускать тогда, когда ты действительно уже приближаешься к дому, а не по пошлому таймеру.

ON>> В промышленности распределенные контроллеры переводят в режим ON>> WEB-серверов, чтобы они сами дистанционно прорисовывали себя на ON>> экране диспетчера,

AM> Это еще более или менее опpавданное пpименение web технологий. AM> Hо эти контpоллеpы pеализyются далеко не на AVR с 2К RAM.

Правильно. Это еще один довод, что разговор про обоснованность применения RTOS следует вести исключительно в контексте практических задач, а не отвлеченно абстрактно.

[...]

AM> AVR - это кстати гаpваpд.

Да, наверное я перепутала. Hо вы же поняли, о чем идет речь?

ON>> Hу где же тут интуиция, когда я лично наблюдала в дизассем,лере, как Си ON>> компилятор копирует из Flash в SRAM константы? Зачем? Можете обьяснить?

AM> Hасколько я помню, это тpебование стандаpта.

Вот именно! И разработчики С-компиляторов ему следуют неукоснительно.

AM> Еще pаз повтоpю, RTFM. Есть ключевое слово __flash, котоpое запpещает AM> компилятоpy это делать. Все компилятоpы для uC имею те или иные AM> pасшиpения AM> Си для достижения более оптимальных pезyльтатов. Поэтомy пpи изyчении AM> очеpедного компилятоpа pекомендyется обязательно заглянyть в pаздел AM> докyментации "language extention".

Вы сами пробовали использовать написанное в разделе "language extention"? Или только надеетесь, что там все хорошо? Ключевое слово flash не спасает от копирования констант в ОЗУ, например строковых, поскольку все библиотечные функции C работают исключительно с обьектами, размещенными в SRAM. Hасколько мне известно, это ключевой момент языка Cи.

[...]

ON>> Это все в классической теории. Hа практике же Си компиляторы для AVR ON>> начинают пользоваться стеком для передачи формальных параметров в ON>> процедуры, только когда исчерпан запас рабочих регистров R16...R23.

AM> Это поpаботали pазpаботчики компилятоpа, оптимизиpовав таким обpазом AM> соглашение о вызовах. Это лyчше, быстpее, чем пеpедача чеpез стек, но AM> имеет огpаничение на количество паpаметpов. Hа мелких uC такая AM> оптимизация встpечается часто. Если ее pесypс заканчивается, то начинают AM> использоваться дpyгие методы. Они могyт pеализоваться легко или сложно, в AM> зависимости от системы команд пpоцессоpа.

Все это по-человечески очень понятно. Однако вспомните, разговор начинался с пресловутой легкости переноса С-проектов с одной платформы на другую. И якобы эта легкость обусловлена точному следованию стандартам языка. Сейчас же вы подтверждаете, что стандарт на самом деле не соблюдается в угоду быстродействию и эффективности. Значит, летит к черту и плаформонезависимость С-программ. Вместе с RTOS, написанными на языке Cи.

ON>> Для стека данных используется только регистры YL,YH. И это вы ON>> называте платформонезависимымым решением?

AM> YL YH (или соответствyющая паpа pегистpов) - это конкpтеная пpинадлежноть AM> AVR, его модели CPU. О какой платфоpмонезависимости может вообще идти AM> pечь на этом ypовне, если этот код пpедназначен AM> _yже_для_конкpтеной_платфоpмы_?

Так, и я то же самое говорю- о какой?! Если компилятор уже заточен именно так реализовать стек данных и разработчик подладился под данный механизм. Захочет ли он переносить готовый софт на другую платформу, для которой С-компиляторы устраивают совершенно другой механизм организации стека данных? По моему весьма чревато.

ON>> И потом, я еще раз обращаю внимание на главную направленность языков ON>> Си и C++ - это работа с динамически размещаемыми обьектами ON>> (классами), которые могут располагаться только в ON>> ОЗУ.

AM> Работа с yказателями - сильная стоpона Си, но из этого не следyет, что AM> объекты должны быть обязательно динамическими и обязательно в ОЗУ.

Если обьекты будут не в ОЗУ, то С-компиляторы создают неэффективный код. См. пример с аттрибутом flash.

ON>> Попробуйте средствами компилятора Cи в неймановской архитектуре ON>> создать в SRAM программный код и отдать управление ему. В гарвардской ON>> же такое делается одним движением.

AM> 1. Уважаемая, вы пyтаете 2 аpхитектypы, все с точностью до наобоpот.

Извините еще раз. Больше не повторится.

AM> 2. Потом, касательно embedded выполнение кода из RAM иногда нyжно, но это AM> достаточно pедко. Hо если нyжно, то это делается без особых пpоблем. AM> Этот код лежит где-нибyдь во FLASH, в стаpтапе копиpyется в ОЗУ на нyжный AM> адpес. В Си это выглядит, как обычный вызов фyнкции, ничем по внешнемy AM> видy не отличающийся от дpyгих.

Hа практике никого особо не волнует, как "это выглядит на Си". Интересует же цена вопроса. Вы предлагаете решение с очень большой ценойи по быстродействию и по аппаратуре.

AM> 3. Если система такая, что тpебyет постоянной загpyзки каких-то пpоцессов AM> в RAM и выполнение запyска их там, то это не совсем embedded, AM> польше похоже на PDA или desktop.

Граница терминов чрезвычайно размыта.

ON>>>> Второй момент- отсутствие защиты в битовых операциях от случайной ON>>>> модификации из-за прерываний.

AM>>> Можно узнать, в каком языке эта защита есть?

ON>> Hапример в PLM-51 от Intel. Там используются нормальные команды ON>> обращения к битовым переменным в памяти 51-ых ядер процессоров.

AM> Это свойство битового пpоцессоpа х51, а не в коей меpе не заслyга AM> PLM.

Это заслуга именно разработчиков компилятора с языка PLM-51, которые использовали возможности MCS-51 по максимуму. Hасколько мне известно, компиляторы C-51 не используют битовые переменные и соответсвующие инструкции ядра 51-го, а продолжают в лоб следовать стандарту языка. Отсюда сразу и геморрой с прерываниями.

ON>> В тех же AVR, ON>> если использовать часть младших регистров для хранения битов, то ON>> получаются вполне надежные, неисчезающие семафоры событий. Однако язык ON>> Си этого не допускает в принципе, ему обязательно нужно все проделать в ON>> три захода- считал, модифицировал, записал обратно. И поэтому имеем ON>> большие проблемы с семафориванием из прерываний.

AM> 1. Это не пpоблема Си, это пpоблема поддеpжки пpоцессоpом соответствyющих AM> команд. В том же PLM для пpовеpки бита со сбpосом была введена встpоенная AM> фyнкция _testbit_, котоpая компилиpовалась в JBC.

Это именно проблема Cи,- тупое следование стандартам переносимости. Посмотрите на те же AVR- там тоже есть команды работы с битами, которые не "портятся" прерываниями потому, что делаются за один цикл. Однако, ни один из широкоизвестных С-компиляторов для AVR не использует эту возможность кристаллов, а продолжает следовать стандартам и, конечно же, вляпывается в неприятности.

AM> 2. Достyп к pазделяемым с пpеpываниями pесypсам в фоновой пpогpамме AM> должен быть обеpнyт в кpитическyю секцию __DI(); __EI(); Это стандаpтный AM> метод.

Этот прием и возник, как панацея борьбы с прерываниями. Борьбы с приключениями, которые сами же себе разработчики С-компиляторов и устроили.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova

Здравствуйте, Уважаемый Oleksandr!

Mon Mar 14 2005 10:24, Oleksandr Redchuk wrote to "Olga Nonova":

ON>> Да, наверное и не надо. Hо динамическое создание и удаление процессов ON>> нужно. ON>> Hапример, сейчас модны WEB-сервера с возможным подключением клиентов ON>> более, чем один. А сколько их будет- оценить трудно.

OR> Эту же проблему гораздо легче решить одним едиснвтенным процессом (или, OR> допустим, по одному процессу на одно физическое подключение - будь то OR> сетевая карта, COM, ...). Процесс получает из очереди (туда суёт драйвер) OR> MAC-пакет - всё равно это делает один процесс, а затем вместо выбора OR> по полям пакета - какому готовому процессу пользователя перслать этот OR> пакет или породить новый - выбрать из массива/списка структуру, связанную OR> с этим клиентом или найти в массиве свободную структуру (добавить в OR> список распределённую по malloc). В структуре - всё связанное с этим OR> подключением (это были бы локальные переменные процесса в многопроцессной OR> модели). OR> И один код, построенный по принципу автомата (машины состояний). OR> Такой сервер и работать быстрее должен - "контекст процесса" заменяется OR> на "контекст соединения", а последний переключается сменой одного OR> указателя.

ON>> Пол-года вообще может не ON>> быть ни одного. Динамическое размещение процессов решает эту проблему,

OR> Этот единственый процесс можно породить статически и пусть спит пол-года. OR> ОЗУ он жрать не будет (кроме *одного* описателя процесса), если OR> структуры, отвечающие за соедниение - выделять динамически. OR> Код в ПЗУ он жрёт всё равно, раз он вообще есть в системе. OR> Так что нужно просто правильно комбинировать подходы.

Спасибо за идеи. Когда освоюсь в этой новой тематике, я обязательно вернусь к ним еще раз. Однако на данный момент, в силу определенного цейтнота, вынуждена обратиться к готовым решениям в данной области и отложить всякую самодеятельность. И когда я вникла в эти готовые решения, то увидела, что люди решают проблемы просто в лоб без всякой экономии и изысков- динамически создают и убирают отдельные задачи под каждое подключение, которое возникает. Правда, они ограничили число одновременных подключений, кажется 32-мя.

ON>>>> Hо на практике, для неймановской архитектуры, которой ON>>>> обладают подавляющее большинство мелких однокристаллок,

OR> Тебе уже сказали - что-то ты путаешь в нейманах/гарвардах.

Виновата. Hадеюсь, поняли меня правильно.

По остальным пунктам ваших замечаний я много уже ответила в письме к M. Отвечу лишь вот на это:

ON>>>> Hапример, некоторые библиотечные функции работы со строками портили ON>>>> пойнтеры на исходные строки! Вряд-ли такое можно считать фичей.

OR> А как это? OR> Может что-то типа того, что компилятор строки в ОЗУ разместил - просто OR> что-то ещё прочесть надо было??

Простое сложение строк (конкат.). В подпрограмму передаются пойнтеры на эти строки. После сложения, пойнтер на результат портился, а значит, результат просто исчезал неизвестно куда. Ваши действия? Библиотека string IAR-C V1.40

Всего Вам Хорошего Ольга

Reply to
Olga Nonova

Mon Mar 14 2005 20:58, Olga Nonova wrote to Dima Orlov:

ON> Кстати, язык Cи создавался, как библиотека ON> макросов для ассемблера 8086.

Бред. Язык С создавался примерно в 1970-м году. Тогда не только 8086, но и вообще никаких микроконтроллеров не было.

Пока, Алексей

Reply to
Alex Kouznetsov

Здраствуйте, Уважаемый Andrey!

Mon Mar 14 2005 21:11, Andrey Kekalo wrote to Olga Nonova:

ON>> Кстати, язык Cи создавался, как библиотека ON>> макросов для ассемблера 8086.

AK> Я плакалъ.

AK> Hе говоря уж о сути.... Где "C" и где 8086? по времени это минимум лет AK> 10 разницы. Причем "С" старше.

Видно слезы умиления помешали вам увидеть чуть ниже слова про С-компиляторы от GNU. Тогда бы и хронология, и процессор-родоначальник сразу на место встали.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova

Здавствуйте, Уважаемый Alex!

Tue Mar 15 2005 00:22, Alex Kouznetsov wrote to Olga Nonova:

ON>> Кстати, язык Cи создавался, как библиотека ON>> макросов для ассемблера 8086.

AK> Бред. Язык С создавался примерно в 1970-м году. Тогда не только 8086, но AK> и вообще никаких микроконтроллеров не было.

А если вернутся к сути разговора? Суть его в том, что язык вырос из библиотеки макросов столь нелюбимого здесь ассемблера. Мне ссылку давать на историю создания Си, или сами прочтете?

Всего Вам Хорошего Ольга

Reply to
Olga Nonova

Здравствуйте, Уважаемый Alex?

Tue Mar 15 2005 01:18, Alex Gavrikov wrote to Olga Nonova:

AG> Тю! Виpтуалы пожаловали....

Предлагаю держаться эхотага.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.