|
|
  |
Когда не нужна ОС РВ?, навеяно постом "Я написал RTOS" |
|
|
|
Sep 27 2012, 11:41
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(ViKo @ Sep 27 2012, 15:33)  Приходилось обработку сигнала дробить на части, только чтобы быстрее бегать по суперциклу. Стандартный подход. Можно ещё и приоритеты ввести, путем continue внутри цикла. То есть, сверху - самые приоритетные задачи, снизу - самые низкоприоритетные. После выполнения любой из задач выполняется continue, который возвращает к началу цикла и соответственно, проверяет флаги задач в порядке убывания приоритета. Каждая из задач в этом случае - конечный автомат с внутренними состояниями, который как можно быстрее возвращает управление обратно.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Sep 27 2012, 12:01
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(ViKo @ Sep 27 2012, 14:42)  Ну, вот и приплыли! К ОС.  А, ну если от ТАКОГО берега отчалить, то таки да Насчет семафора - это не только стандартный подход, но и способ не вызывать ожидающую задачу. Например, при give() - внутри этого give() можно спрятать код, который "разбудит" все ожидающие семафор треды , а при take() - процесс, который "наступил" на занятый семафор - будет удален из списка очереди выполнения. Таким образом, "наворот" этот исключает оверхед перебора задач и поллинга. Приплыли к оси?
|
|
|
|
|
Sep 27 2012, 12:32
|

инженер
   
Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701

|
Цитата(_Pasha @ Sep 27 2012, 15:01)  А, ну если от ТАКОГО берега отчалить, то таки да Насчет семафора - это не только стандартный подход, но и способ не вызывать ожидающую задачу. Например, при give() - внутри этого give() можно спрятать код, который "разбудит" все ожидающие семафор треды , а при take() - процесс, который "наступил" на занятый семафор - будет удален из списка очереди выполнения. Таким образом, "наворот" этот исключает оверхед перебора задач и поллинга. Приплыли к оси?  _Pasha, хочется узнать - в противостоянии OC РВ vs bare-metal Вы к какой стороне ближе? Согласна, развитие технологий виртуализации - это ещё один аргумент в поднятии старой темы
|
|
|
|
|
Sep 27 2012, 12:58
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Виктория @ Sep 27 2012, 15:32)  _Pasha, хочется узнать - в противостоянии OC РВ vs bare-metal Вы к какой стороне ближе? Согласна, виртуалазация - это ещё один аргумент в поднятии старой темы Естественно, ближе к оси. Но, скажу другими словами, мне не нравится пропаганда под аргументами "ниже плинтуса", равно как и ничем не оправданные восторги от вытесняющей многозадачности, очередей сообщений и неуёмная жажда тотальной стандартизации. Вот для чего мне, спрашивается, тратить ОЗУ на хранение контекстов, если весь этот контекст сводится к одному указателю, если процесс сам знает, когда ему отдать управление (кооперативная многозадачка), если при использовании примитивов синхронизации у меня есть планировщик, который перебирает очередь выполнения, если железные прерывания у меня обслуживаются точно так же, в общем - если я знаю, что мне нужно, и могу достаточно долго сидеть на одном самом дешевом и доступном камне, потому что ресурсов 100% хватит на всё. И если мне надо установить один бит, то я его таки установлю, а не буду обращаться к системному вызову, или создавать сообщение "установите мне такой-то флаг" или пользоваться какой-либо другой дурковатой обёрткой. То же касается любого API - как известно, он никогда не может быть хорошим. А то - подключил дефолтные сторонние либы - еще ничего не сделал - мама дорогая! Уже нету 20% флеша! Ну это вообще... А там просто всего лишь зависимостей много.
Сообщение отредактировал _Pasha - Sep 27 2012, 13:06
|
|
|
|
|
Sep 27 2012, 14:05
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458

|
Цитата(Hmm @ Sep 26 2012, 00:48)  Ну а ОС РВ мне ещё не была нужна, т.к. это доп-й источник проблем. Пусть их продолжают исп-ть в китайских телефонах, а я воздержусь. Удачи! Ну так тогда может уместнее пойти со своими "аргументами" и "понималками"  ... куда-то в другую тему? Потому как здесь тему назвали то: "ОС РВ"...
|
|
|
|
|
Sep 27 2012, 14:50
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата А просто иметь глобальные переменные, с флагами и т.д.? Или это уже противоречит принципам разделения на задачи, которые нельзя будет отлаживать поодиночке? Вообще в любом коде глобальные переменные - это шаг назад. Но когда пишешь ПО для мк с ограниченными возможностями ресурсами, то это вполне оправданный шаг. Вместо ОС-ных няшек использовать глобальные переменные вполне в норме. Если запись/чтение флага (или переменной) есть атомарная операция, то будет всё работать не хуже чем с семафором. А если доступ до флага это есть чтение-модификаци-запись, то тут нужно позаботится о том, чтоб обращение к флагу не было прервано (крит. секции, мютексы, или в конце концов запрет прерываний). А запирать обращение к глобальной переменной каким нить мютексом - уш лучше сразу использовать ОС-ные месаджи и флаги. И флаг глобальный все равно нужно постоянно проверять, а ОС-ный флаг проверяется за кулисами, и программеру не надо об это заботиться. например с ос-ным флагам задачу по гуи можно оформить в 1 строчку. Код void task() { for(;;) currentWindow->pressedKey(OSGetMessage(QUEUE_KEY, 0)); } как бы это выглядело с глобальной переменной Код void task() { for(;;) { if(keyCode != 0) { currentWindow->pressedKey(keyCode); keyCode = 0; } else OSTaskDelayMs(50); } } по мне, так гораздо кошерний первый вариант. по памяти программ и латентности тут оба варианта примерно одинаковы. А вот по памяти данных 2-й выгрывает. По реакции на нажатие клавиши, т.е. на обработку нажатия (можно сказать на скорость выполнения программы) 1 вариант выигрывает. Если у меня найдется свободное озу, я всегда использую 1 вариант.
|
|
|
|
|
Sep 27 2012, 15:56
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Sorry, не удержался от частичного офтопика  но тема подходящая. Проект призёр 2nd Prize! Philips ARM Design Contest 2005noPC (сайт разработчика) Проект на базе LPC2138/2148 автономного "компьютера". P.S. В данном варианте, Форт операционная среда замещает функции операционной системы. Цитата(juvf @ Sep 27 2012, 18:50)  Вообще в любом коде глобальные переменные - это шаг назад. Но когда пишешь ПО для мк с ограниченными возможностями ресурсами, то это вполне оправданный шаг. Очень ценное замечание! (В программах на Форт, в силу "широкого" использования стеков для неименованной передачи параметров их почти нет Author: Philip J. Koopman, Jr. WISC Technologies, Inc., Pittsburgh, PA © Copyright 1989 Stack Computers: the new wave, zip-архив, online web versionPhilip Koopman's Home Page
Сообщение отредактировал Kopa - Sep 27 2012, 16:48
|
|
|
|
|
Sep 27 2012, 16:51
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458

|
Цитата(Kopa @ Sep 27 2012, 18:56)  Очень ценное замечание! (В программах на Форт, в силу "широкого" использования стеков для неименованной передачи параметров их почти нет Author: Philip J. Koopman, Jr. WISC Technologies, Inc., Pittsburgh, PA © Copyright 1989 Stack Computers: the new wave, zip-архив, online web version Forth был достаточно интересный проект... Но: - к чему-либо, что имеет отношение к функциональности ОС РВ (см. имя темы) - он просто неуместен; - он именно был, у него было мощное community ... но всё это в прошлом - книжка то показанная тоже 1989г. - 23 года, ... как-то напомнило даже из Иосифа Бродского: Цитата Двадцать лет это срок, Что длиннее и глубже могилы.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|