|
Real-time и не-real-time - в одном флаконе или раздельно? |
|
|
|
Oct 26 2017, 09:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Привет. Собственно вопрос из области начинающих по архитектуре процессорной системы. Делаем новый проект и возник вопрос. С одной стороны есть программа, работающая в жестком реальном времени с коммуникацией, через CAN, SPI и RS485. Это основная функция системы. С другой стороны есть куча других интерфейсов - SD card, Ethernet, USB и прочих, которые служат для вспомогательных функций - записи логов, параметрирования, обновления ПО, удаленного доступа через WEB и bluetooth, терминалки и т.д.
Если все это реализовывать на одном процессоре, то получается, что надо использовать RTOS, что требует определенных программистских навыков и не нравится то, что это уменьшает защиту системы от внешних хакерских атак. Если из-за Ethernetа зависнет основная программа - это будет очень-очень плохо. Т.е. в результате увеличиваем затраты на разработку, делаем сложную программу, но уменьшаем стоимость железа. Поэтому у меня настрой такой, что основной процессор должен выполнять только основную real-time программу и все. При этом ему не нужна операционная система вообще, так как нужные интерфейсы реализуются как функции ввода/вывода - это уже реализовано и проверено. А для всего остального поставить отдельный процессор или даже платку, на которой будет крутиться обыкновенный Linux со всеми нужными драйверами. И с основным процессором эта плата будет общаться только через CAN. В этом случае практически все функции будут уже реализованы в самом ядре и программисту надо будет сделать очень мало и хоть на питоне или джаве. То есть затраты на разработку будут гораздо меньше, имеем барьер от хакерских атак - если этот процессор зависнет, система будет прекрасно работать дальше, но увеличиваем стоимость железа.
Как думаете это нормальный подход сегодня?
|
|
|
|
|
 |
Ответов
|
Nov 3 2017, 15:21
|
Местный
  
Группа: Участник
Сообщений: 317
Регистрация: 16-09-17
Пользователь №: 99 334

|
Цитата(mantech @ Nov 3 2017, 10:11)  Кто мешает делать критичные ко времени задачи на прерываниях? Никогда проблем с этим не было... Если поток прерываний слишком большой, он "забьёт" более низкоприоритетные, но все равно реал-таймовые задачи. Я пошёл по пути гарантированного тайм-слота для задач с приоритетами класса 2 Цитата(AlexandrY @ Nov 3 2017, 11:19)  С ваши подходом можно и Windows 10 считать RTOS. С цитированием по внимательней будьте. Я так понял, это Вы к вот этому: Цитата Понятие "реальное время" перпендикулярно тому, через сколько времени ртось среагирует на событие.
Если ртось УСПЕВАЕТ ВОВРЕМЯ среагировать и обработать евент за ДЕТЕРМИНИРОВАННОЕ время и это время устраивает заказчика, значит это ртось. Даже если время реакции сотни милисекунд
К примеру если цикл ПЛК 0.5 секунды то нафига успевать среагировать и обрабатывать евент за микросекунды? А не к тому, что процитировали Изучив десятки RTOS, теорию их построения и перепробовав различные варианты построения RTOS я в конце концов вообще я отказался от использования прерываний. Посколько с ними трудно динамически менять приоритет прерываний как тебе заблагорассудится и жесткий реалтайм для всех потоков трудно реализовать. Точнее у меня работал только одно прерывание. Таймерное. Все остальные прерывания работали по механизму поллинга их флагов. Да получился большой оверхед. В том смысле, что процессор почти 70% времени проводил в таймерном прерывании. Ну и что? Проблему решил просто: взял проц с более высокой (на 500% выше чем нужно для моих задач) тактовой. И что? сейчас процессоры стоят дешевле грязи. А вот софт к ним стоит огого. Поэтому лучше купить проц подороже, но сэкономить на софте Зато реализация RTOS получилась очень простой, красивой и надёжной. И жесткий реалтайм получился ГАРАНТИРОВАННЫМ при вытесняющей многозадачности Более того. У меня не только была реализована вытесняющая многозадачность. Но и отсутствие зависания даже самых низкоприоритетных потоков. Посколько классу низкоприоритетных потоков все равно гарантировался тайм-слот Проблема дедлоков тоже была решена за счет выбора архитектуры построения RTOS Таким образом у моей RTOS был только один "минус": 70% времени процессора занимал микродиспетчер, находившийся в таймерном прерывании. Т.е. на диспетчеризацию уходило 70% процессорного времени, а на выполнение "полезной работы" - всего 30%. Но с этим можно смириться. Выбрав более мощный проц
Сообщение отредактировал Студент заборстроительного - Nov 3 2017, 15:24
|
|
|
|
|
Nov 4 2017, 08:17
|
Местный
  
Группа: Участник
Сообщений: 317
Регистрация: 16-09-17
Пользователь №: 99 334

|
Цитата(mantech @ Nov 3 2017, 20:39)  Сразу вижу противоречие. Т.е. если возьмем один и тот же процессор, и если у него не хватает быстродействия для обработки прерываний, и он забьет остальные прерывания, то это означает одно - неправильный выбор быстродействия проца, т.к. в этом случае ваша ОС просто пропустит это событие, находясь в другой задаче или в блоке переключения контекста. Поэтому я и пошёл по пути запрета всех прерываний кроме таймерного. А другие прерывания опрашивал по механизму поллинга. Я же писал: у меня проц больше 70% времени сидит в обработчике таймерного прерывания, а на "полезную работу" доступно менее 30% процессорного времени. Кто-то скажет: это же не рационально, глупо, криво и т.п. А я скажу: процессорное время стоит на ПОРЯДКИ дешевле, чем труд программиста. И это мизерная цена за простоту и прозрачность кода и обеспечение жесткой реалтаймовости при вытесняющей многозадачности и многопоточности Цитата(syoma @ Nov 3 2017, 21:17)  хотя он, возможно, не самый эффективный по загрузке процессора - до 70% Да плевать на загрузку процессора. Он же железный, вот и пусть пашет. Труд программиста стоит на порядки дороже чем процессорные такты. Я когда-то болел болезнью: экономить каждый такт CPU, старался писать код так, чтобы экономить такты. А потом понял, что моё время бесценно, а процессорное стоит копейки.
|
|
|
|
|
Nov 5 2017, 03:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(Студент заборстроительного @ Nov 4 2017, 12:17)  Поэтому я и пошёл по пути запрета всех прерываний кроме таймерного. А другие прерывания опрашивал по механизму поллинга. Я же писал: у меня проц больше 70% времени сидит в обработчике таймерного прерывания, а на "полезную работу" доступно менее 30% процессорного времени.
Кто-то скажет: это же не рационально, глупо, криво и т.п. А я скажу: процессорное время стоит на ПОРЯДКИ дешевле, чем труд программиста. И это мизерная цена за простоту и прозрачность кода и обеспечение жесткой реалтаймовости при вытесняющей многозадачности и многопоточности
Да плевать на загрузку процессора. Он же железный, вот и пусть пашет. Труд программиста стоит на порядки дороже чем процессорные такты. Я когда-то болел болезнью: экономить каждый такт CPU, старался писать код так, чтобы экономить такты. А потом понял, что моё время бесценно, а процессорное стоит копейки. Фигасе!. Что за такое таймерное прерывание? В двух словах как работает preemptive real-time операционная система. Ядро получает возможность переключить задачу при системном вызове и после обработки прерывания. Прерывания читают из железа (и пишут в железо) и разрешает семафор достаточно высокоприоритетной задаче, которая как бы является продолжением прерывание, поскольку при выходе из прерывания обработка будет переключена на нее если исполнялясь низкоприоритетная задача, но прерывания уже не будет. Еще раз. Бежала какая-то низкоприоритетная задача, когда возникло условие для прерывания. Скажем приняли пакет данных в регистры приемника. В прерывании эти регистры копируются в буфер, буфер ставится в очередь буферов и отпускается семафор обработчика принятого буфера. Все. Выходим из прерывания. Эта работа достаточно короткая и в прерывании больше продолжать не надо. Отпущеный семафор меняет условия для ядра и из прерывания вы выходите не в ту задачу, что исполнялясь, а в ту, которая ждала семафора, поскольку ей нечего было обрабатывать. Фактически вы продолжаете обрабатывать прием, но уже не в прерывании. Закон. Прерывания надо предельно минимизировать. Обработчик таймера, который считает время, вообще должен инкрементировать счетчик и выйти. Ну еще пару таких же простых операций если очень нужно. И все. Поллинг самое нехорошее решение для реал тайма. Если писать правильно, то все будет эффективно и с маленькими затратами. Я пару лет назад пытался описать принципы написания програм реального времени, но отчего-то публика начала возмущаться моей нескромностью и топик в котором я начал описывать технику написания програм реального времени перенесли в тему общение. Как мне объяснили, что раз меня не спрашивают, то и нефиг соваться. Так что если вам интересно -- создайте тему. Скажем "Как писать программы реального времени?", а люди будут вам отвечать. Вот тогда у вас будет пища для принятия решений.
|
|
|
|
|
Nov 5 2017, 08:43
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Tarbal @ Nov 5 2017, 05:25)  Еще раз. Бежала какая-то низкоприоритетная задача, когда возникло условие для прерывания. Скажем приняли пакет данных в регистры приемника. В прерывании эти регистры копируются в буфер, буфер ставится в очередь буферов и отпускается семафор обработчика принятого буфера. Все. Выходим из прерывания. Эта работа достаточно короткая и в прерывании больше продолжать не надо. Отпущеный семафор меняет условия для ядра и из прерывания вы выходите не в ту задачу, что исполнялясь, а в ту, которая ждала семафора, поскольку ей нечего было обрабатывать. Фактически вы продолжаете обрабатывать прием, но уже не в прерывании. Так обработчики прерываний надо рассматривать как фрагменты задач если придерживаться концепции Rate-Monotonic Scheduling ? Я вот это не понял. Если смотреть на них, как на фрагменты задач, то тогда ваш подход прямо нарушает принцип монолитности. Если же прерывания не фрагменты задач, а нечто другое, то какой принцип планирования применить к обработчикам прерываний. И не будет ли он конфликтовать с Rate-Monotonic Scheduling? Исходим из того что обработчики прерываний в высоконагруженной встраиваемой системе исчисляются десятками и занимают больше половины процессорного времени.
|
|
|
|
Сообщений в этой теме
syoma Real-time и не-real-time - в одном флаконе или раздельно? Oct 26 2017, 09:41 Kabdim А RTOS у которой в кач-ве guestOS крутится тот же ... Oct 26 2017, 10:36 k155la3 В промышленных контроллерах (PLC) практикуется ... Oct 26 2017, 10:52 AlexandrY Цитата(k155la3 @ Oct 26 2017, 13:52) Собс... Oct 26 2017, 12:24  k155la3 Цитата(AlexandrY @ Oct 26 2017, 15:24) Да... Oct 26 2017, 14:59   AlexandrY Цитата(k155la3 @ Oct 26 2017, 17:59) А ка... Oct 26 2017, 17:08    k155la3 Цитата(AlexandrY @ Oct 26 2017, 20:08) . ... Oct 26 2017, 17:21 syoma У нас как раз почти-промышленный контроллер - логи... Oct 26 2017, 11:57 Студент заборстроительного Цитата(syoma @ Oct 26 2017, 14:57) У нас ... Oct 28 2017, 17:56  AlexandrY Цитата(Студент заборстроительного @ Oct 28 20... Oct 29 2017, 12:22   mantech Цитата(AlexandrY @ Oct 29 2017, 15:19) То... Oct 29 2017, 12:25    AlexandrY Цитата(mantech @ Oct 29 2017, 14:25) Если... Oct 29 2017, 12:27   mantech Цитата(AlexandrY @ Oct 29 2017, 15:22) Хм... Oct 29 2017, 17:20 syoma Ну вот с другой сторону смотрю на системы типа Twi... Oct 26 2017, 12:44 Lagman Цитата(syoma @ Oct 26 2017, 15:44) что та... Oct 26 2017, 13:39 AlexandrY Цитата(syoma @ Oct 26 2017, 15:44) Но там... Oct 26 2017, 14:15  syoma Цитата(AlexandrY @ Oct 26 2017, 16:15) Ес... Oct 26 2017, 14:38 syoma ЦитатаОбслуживание цепей безопасности делают также... Oct 27 2017, 07:50 AlexandrY Цитата(syoma @ Oct 27 2017, 10:50) Но тем... Oct 27 2017, 08:26 k155la3 Цитата(syoma @ Oct 27 2017, 10:50) . . .
... Oct 27 2017, 10:17 syoma ЦитатаПолучается большой черный ящик, с массой вхо... Oct 27 2017, 15:20 k155la3 Цитата(syoma @ Oct 27 2017, 18:20) . . . ... Oct 27 2017, 15:47 AlexandrY Цитата(syoma @ Oct 27 2017, 18:20) Если д... Oct 27 2017, 17:05  mantech Цитата(AlexandrY @ Oct 27 2017, 20:05) Да... Oct 28 2017, 12:13 k155la3 У меня сейчас тоже проблема выбора OS или вообще б... Oct 28 2017, 13:16 AlexandrY Цитата(k155la3 @ Oct 28 2017, 16:16) Дост... Oct 28 2017, 14:03  mantech Цитата(AlexandrY @ Oct 28 2017, 17:03) В ... Oct 28 2017, 15:41 syoma Цитата(k155la3 @ Oct 28 2017, 15:16) Собс... Oct 28 2017, 14:04  AlexandrY Цитата(syoma @ Oct 28 2017, 17:04) так ка... Oct 28 2017, 14:13   syoma Цитата(AlexandrY @ Oct 28 2017, 16:13) Эт... Oct 28 2017, 15:42  mantech Цитата(syoma @ Oct 28 2017, 17:04) Допуст... Oct 28 2017, 15:47  k155la3 Цитата(syoma @ Oct 28 2017, 17:04) . . .
... Oct 28 2017, 16:03   mantech Цитата(k155la3 @ Oct 28 2017, 19:03) Для ... Oct 28 2017, 17:23    k155la3 Цитата(mantech @ Oct 28 2017, 20:23) Шеде... Oct 28 2017, 18:21     mantech Цитата(k155la3 @ Oct 28 2017, 21:21) Вы м... Oct 28 2017, 18:28 syoma ЦитатаВ любом нормально спроектированном софте не ... Oct 29 2017, 09:35 k155la3 >> В любом нормально спроектированном софте ... Oct 30 2017, 21:21  syoma Цитата(k155la3 @ Oct 30 2017, 23:21) Можн... Oct 31 2017, 10:52  mantech Цитата(k155la3 @ Oct 31 2017, 00:21) Можн... Oct 31 2017, 14:10 syoma ЦитатаХм, т.е. с одной стороны говорим - ой, какое... Oct 29 2017, 19:33 AlexandrY Цитата(syoma @ Oct 29 2017, 21:33) Что зн... Oct 30 2017, 06:46  mantech Цитата(AlexandrY @ Oct 30 2017, 09:46) Ру... Oct 30 2017, 07:25   gosha-z Цитата(mantech @ Oct 30 2017, 10:25) Вы м... Oct 30 2017, 07:34    mantech Цитата(gosha-z @ Oct 30 2017, 10:34)... Oct 30 2017, 07:51     gosha-z Цитата(mantech @ Oct 30 2017, 10:51) Прав... Oct 30 2017, 07:53 syoma ЦитатаРушится обмен на всех шинах. Все слэйвы уход... Oct 30 2017, 08:27 AlexandrY Цитата(syoma @ Oct 30 2017, 10:27) Можете... Oct 30 2017, 08:53 Kabdim Странно что никто еще не упомянул про формальную в... Oct 31 2017, 08:21 AlexandrY Цитата(Kabdim @ Oct 31 2017, 10:21) Стран... Oct 31 2017, 09:51 Студент заборстроительного Цитата(Kabdim @ Oct 31 2017, 11:21) Стран... Oct 31 2017, 17:18  AlexandrY Цитата(Студент заборстроительного @ Oct 31 20... Oct 31 2017, 19:31 Kabdim Цитата(AlexandrY @ Oct 31 2017, 12:51) Са... Oct 31 2017, 10:41 AlexandrY Цитата(Kabdim @ Oct 31 2017, 12:41) Вы не... Oct 31 2017, 11:45 Kabdim Если осилите HoL, то скорее всего вам не потребуют... Oct 31 2017, 12:05 AlexandrY Цитата(Kabdim @ Oct 31 2017, 14:05) Если ... Oct 31 2017, 12:27 Kabdim Я даже готов с вами отчасти согласится о ненужност... Oct 31 2017, 13:06 Kabdim Ну хватит уже фантазировать о том что не осилили. ... Nov 1 2017, 08:34 AlexandrY Цитата(Kabdim @ Nov 1 2017, 10:34) Ну хва... Nov 1 2017, 08:53 Kabdim Если бы вы прочитали первую ссылку, вас бы не приш... Nov 1 2017, 09:04 AlexandrY Цитата(Kabdim @ Nov 1 2017, 11:04) Если б... Nov 1 2017, 09:42 Kabdim Так насчет вашего первого контраргумента что C код... Nov 1 2017, 09:51 AlexandrY Цитата(Kabdim @ Nov 1 2017, 11:51) Так на... Nov 1 2017, 10:40  Kabdim Цитата(AlexandrY @ Nov 1 2017, 13:40) По ... Nov 1 2017, 10:55 syoma Народ все это интересно, но может стоит обсуждать ... Nov 1 2017, 10:59 AlexandrY Цитата(syoma @ Nov 1 2017, 12:59) Народ в... Nov 1 2017, 11:07  syoma Цитата(mantech @ Nov 3 2017, 09:11) Кто м... Nov 3 2017, 10:55   AlexandrY Цитата(Студент заборстроительного @ Nov 3 201... Nov 3 2017, 17:03    Студент заборстроительного Цитата(AlexandrY @ Nov 3 2017, 20:03) Это... Nov 3 2017, 17:20      Студент заборстроительного Цитата(Tarbal @ Nov 5 2017, 06:25) В двух... Nov 5 2017, 07:44     mantech Цитата(Студент заборстроительного @ Nov 4 201... Nov 5 2017, 09:17      Студент заборстроительного Цитата(mantech @ Nov 5 2017, 12:17) для с... Nov 5 2017, 09:24       mantech Цитата(Студент заборстроительного @ Nov 5 201... Nov 5 2017, 11:29 AlexandrY Цитата(Студент заборстроительного @ Nov 3 201... Nov 3 2017, 08:19  mantech Цитата(AlexandrY @ Nov 3 2017, 11:19) У м... Nov 3 2017, 08:57   AlexandrY Цитата(mantech @ Nov 3 2017, 10:57) Да ва... Nov 3 2017, 09:32 Pavia Для AlexandrY
ЦитатаЭто не зависания оси, это пере... Nov 3 2017, 14:39 syoma Если говорить о многозадачности, то у меня будет R... Nov 3 2017, 18:17 syoma ЦитатаЕсли же прерывания не фрагменты задач, а неч... Nov 5 2017, 09:05 AlexandrY Цитата(syoma @ Nov 5 2017, 11:05) Тут ест... Nov 5 2017, 13:39 Rst7 Moderator: Уважаемые, настоятельно призываю верну... Nov 6 2017, 09:23 syoma ЦитатаТут вы сделали себе логичекую ловушку.
Если ... Nov 6 2017, 09:48 AlexandrY Цитата(syoma @ Nov 6 2017, 11:48) Не очен... Nov 6 2017, 10:47 one_eight_seven Цитатадопустили возможность прихода нового пакета ... Nov 6 2017, 11:35 syoma ЦитатаВы допустили возможность прихода нового паке... Nov 6 2017, 11:38 AlexandrY Цитата(syoma @ Nov 6 2017, 13:38) Не, не.... Nov 6 2017, 13:51  syoma Цитата(AlexandrY @ Nov 6 2017, 16:51) Тог... Nov 6 2017, 14:22   Tarbal Цитата(syoma @ Nov 6 2017, 18:22) Я собир... Nov 7 2017, 04:18    AlexandrY Цитата(Tarbal @ Nov 7 2017, 06:18) Занима... Nov 7 2017, 06:12     Студент заборстроительного Цитата(AlexandrY @ Nov 7 2017, 09:12) Она... Nov 7 2017, 18:23      AlexandrY Цитата(Студент заборстроительного @ Nov 7 201... Nov 7 2017, 20:29     Tarbal Цитата(AlexandrY @ Nov 7 2017, 10:12) Ссы... Nov 8 2017, 00:37 syoma Цитатапогибнут люди или угробится оборудование сто... Nov 8 2017, 09:58 Tarbal Цитата(syoma @ Nov 8 2017, 12:58) Все-так... Nov 9 2017, 00:34
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|