реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Как сделать идеологически выдержанно, "в стиле РТОС"
nanorobot
сообщение Dec 9 2016, 18:14
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(AlexandrY @ Dec 10 2016, 00:07) *
Так это же нарушение 'парадигмы' если я ее правильно понимаю.
Основной принцип RTOS - независимость задач, для того чтобы была возможность оценить их планируемость.
Вы же целую кучу задач связываете между собой неким общим маршалингом.
Это не RTOS, планируемости нет.


парадигма маршалинга это серьезно... blink.gif
Ну то есть мне удалось обозначить проблему? Я же с тем и пришел, что решения, которые мне видятся, мне не слишком нравятся.

Смутно припоминаю в TNKernel был сервис EventFlags вот это очень близко к тому, что требуется. Но не бросать же ChibiOs(в данном случае nil) с которой сроднился

Еще: решение, бесспорно, далеко от изящества но насчет планируемости и независимости задач: Каждый битик состояния существует в виде бинарного семафора, и "маршалингу" подвергается исключительно для цели передачи его мастеру. Так что "парадигма" не так уж сильно нарушена...

Сообщение отредактировал nanorobot - Dec 9 2016, 18:49
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 9 2016, 20:19
Сообщение #17


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Если отвлечься от вопроса, зачем мастеру знать состояние семафоров ведомого, то тут всё достаточно прозрачно.
Это для ведомого они - семафоры, потому что он их использует как семафоры. То есть, для взаимодействия между процессами (ведь он их для этого использует, да?).
А для мастера - это просто некие флаги. Которые вполне можно упаковать в uint16_t (и даже в uint32_t), и передать любым имеющимся способом.

Что же касаемо приоритета процесса, который делает эту упаковку, то тут всё зависит от того, насколько срочно надо отправлять статус мастеру. Если при каждом изменении, то приоритет должен быть повыше (хотя всё равно можно пропустить), но скорее всего надо просто передавать с определённой периодичностью. В этом случае приоритет неважен.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 9 2016, 20:33
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(nanorobot @ Dec 9 2016, 19:58) *
Что не так? Есть набор бинарных семафоров, значения которых требуется "упаковать" в переменную типа uint16_t. Эту самую упаковку я собираюсь выполнять в процессе(треде, задаче) обладающем наивысшим приоритетом. Ни логических, ни грамматических ошибок не допущено.

Не наводите тень на плетень. То, что Вы собирались делать написано в Вами в первом посте:
Цитата
Напрашивается вариант: любое бращение к битам состояния защищать от коллизий доступа с помощью мютекса

Это и есть через анус. Безвариантно.
О том, что Вы сейчас повторили, я ранее уже написал:
Цитата
Использование возможностей высокоприоритетного процесса, это нормально.








--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 9 2016, 21:15
Сообщение #19


Ally
******

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



Цитата(nanorobot @ Dec 9 2016, 20:14) *
Так что "парадигма" не так уж сильно нарушена...


Ну если мы договорились что делаем не real-time, то у меня вот так реализован канал приема-передачи по SPI:
Код
  for (;;)
  {
    // Принимаем и отправляем данные чипу MKW40 в режиме слэйва
    // Мастер MKW40 посылает пакеты размером MKW_BUF_SZ каждые 2 мс
    // Структура пакета:
    // Номер байта   Назначение
    // в пакете
    // 0     [llid]  - идентификатор логического канала
    // 1     [LEN]   - количество передаваемых данных
    // 2     [data0] - первый байт данных
    // ...
    // LEN+2 [dataN] - последний байт данных



    if (MKW40_SPI_slave_read_write_buf(mkw_tx_buf, mkw_rx_buf, MKW_BUF_SZ) == MQX_OK)
    {
      uint8_t  llid = mkw_rx_buf[0] - 1; // Получаем номер логического канала которому предназначен пакет
      

      // Посылаем приемнику канала если он подписался на прием
      if (llid < MKW_SUBSCR_NAX_CNT)
      {
        if (MKW40_subsribers[llid].receiv_func!= 0)
        {
          MKW40_subsribers[llid].receiv_func(&mkw_rx_buf[2], mkw_rx_buf[1], MKW40_subsribers[llid].pcbl); // Вызов неблокирующей функции приемника логического канала
        }
      }

      // Загрузка новых данных для отправки
      memset(mkw_tx_buf, 0, MKW_BUF_SZ); // Предварительно очищаем буфер отправки от старых данных.
      _mutex_unlock(&mutex);
      // Здесь задачи клиенты  ожидающие мьютекса получают доступ к заполнению буфера на отправку mkw_tx_buf.
      // Получает мьютекс только одна задача в зависимости от настроек политики очереди. Остальные остаются ждать следующей возможности.  
      _mutex_lock(&mutex);
    }

  }


Т.е. я здесь не пытаюсь сразу в одном пакете передавать данные многих задач. Это будет трудно поддерживать слабому мастеру.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Dec 9 2016, 21:35
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(AHTOXA @ Dec 10 2016, 02:19) *
Если отвлечься от вопроса, зачем мастеру знать состояние семафоров ведомого, то тут всё достаточно прозрачно.
Это для ведомого они - семафоры, потому что он их использует как семафоры. То есть, для взаимодействия между процессами (ведь он их для этого использует, да?).
А для мастера - это просто некие флаги. Которые вполне можно упаковать в uint16_t (и даже в uint32_t), и передать любым имеющимся способом.

Что же касаемо приоритета процесса, который делает эту упаковку, то тут всё зависит от того, насколько срочно надо отправлять статус мастеру. Если при каждом изменении, то приоритет должен быть повыше (хотя всё равно можно пропустить), но скорее всего надо просто передавать с определённой периодичностью. В этом случае приоритет неважен.


Все именно так.
Состояния всех семафоров мастеру знать не нужно. Требуется знать сотояние ограниченного числа именно флагов, которые для слейва играют роль семафоров, использующихся для взаимодействия между процессами. Спасибо. Чтобы осознать проблему, иногда достаточно кому то рассказать о ней.

Цитата(zltigo @ Dec 10 2016, 02:33) *
Не наводите тень на плетень. То, что Вы собирались делать написано в Вами в первом посте:

Это и есть через анус. Безвариантно.
О том, что Вы сейчас повторили, я ранее уже написал:



Согласен, что первая фраза как бы не вполне. Тем не менее несколькими постами выше вы процитировали другую мою фразу, в которой якобы смешано все в кучу, собственно за нее я вступился.
Если заходить на форум, имея в качестве цели придраться к неудачной, наскоро составленной формулировке, это почти всегда можно сделать, потешив тем самым свое самолюбие.
Ваша компетентность не вызывает сомнений ни у меня(пусть для Вас это совершенно неважно), ни(я так думаю) у большинства других посетителей форума, да и Вы сами знаете себе цену. Тем более непонятно зачем Вам подобные упражнения.
На этом дискуссию заканчиваю.
С Уважением, Александр.

Сообщение отредактировал nanorobot - Dec 9 2016, 21:49
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 10 2016, 08:16
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(nanorobot @ Dec 9 2016, 23:35) *
Тем более непонятно зачем Вам подобные упражнения.

Плохо, что Вы "увидели" какие то "упражнения", а цели - объяснить, что как минимум наличие системных средств формирования критических секций есть принадлежность любой системы, так и не захотели увидеть sad.gif. Хотя и использование системных критических секций тоже уже избыточность для организации атомарного доступа к биту. При отсутствии у Cortex-M0 других механизмов обеспечения атомарности использование запретов прерывания является абсолютно естественным.

Теперь еще о "семафорах" - если эта куча битов которую Вы хотите передавать действительно состояние семафоров, то я могу точно сказать, что наличие сколь-нибудь заметного количества семафоров есть признак дурной реализации алгоритма sad.gif. Лет 10-15? назад с удивлением понял, что семафоры на самом деле есть своеобразные алгоритмические заплатки и можно обходиться без них практически всегда.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Dec 10 2016, 09:30
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(zltigo @ Dec 10 2016, 14:16) *
Плохо, что Вы "увидели" какие то "упражнения", а цели - объяснить, что как минимум наличие системных средств формирования критических секций есть принадлежность любой системы, так и не захотели увидеть sad.gif. Хотя и использование системных критических секций тоже уже избыточность для организации атомарного доступа к биту. При отсутствии у Cortex-M0 других механизмов обеспечения атомарности использование запретов прерывания является абсолютно естественным.

Теперь еще о "семафорах" - если эта куча битов которую Вы хотите передавать действительно состояние семафоров, то я могу точно сказать, что наличие сколь-нибудь заметного количества семафоров есть признак дурной реализации алгоритма sad.gif. Лет 10-15? назад с удивлением понял, что семафоры на самом деле есть своеобразные алгоритмические заплатки и можно обходиться без них практически всегда.


Вот мы и дошли до текстов, которые можно читать. Поверьте, упоминание анусов и обвинение в невежестве - не лучший способ привлечь внимание собеседника. Обычно это преследует какие то другие цели...

Критические секции и атомарный доступ к битам: Возможно я коряво выразился, но речь шла в том числе и о том, что бы эти самые биты могли одновременно быть использованы и для организации взаимодействия между процессами, и для извещения мастера о состоянии слейва(в данном случае не как слейва SPI, а как об'екта управления).
Семафоров на самом деле не так много, они помещаются в uint8_t, применение же uint16_t вызвано лишь желанием иметь резерв, который может оказаться нелишним.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 10 2016, 20:28
Сообщение #23


Ally
******

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



Цитата(nanorobot @ Dec 10 2016, 11:30) *
Критические секции и атомарный доступ к битам: Возможно я коряво выразился, но речь шла в том числе и о том, что бы эти самые биты могли одновременно быть использованы и для организации


Ну допустим SPI работает на 10 МГц. Передача одного байта занимает 0.8 мкс
Передача 8-и байт - 6.4 мкс.
При тике операционки в 5 мс это всего около 0.1 % от пропускной способности SPI на указанной скорости.
При этом имея развитого слэйва байты можно на лету скопировать в соответствующие переменные используя scatter/gather DMA

Т.е. я например не вижу тут практической пользы от манипуляций с битами.

Такие темы как ваша мало смысла обсуждать абстрактно. Поэтому и получаете от особенно эмоциональных.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 10 2016, 21:03
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(nanorobot @ Dec 10 2016, 11:30) *
Поверьте, упоминание анусов и обвинение в невежестве - не....

Поверьте, что в данном случае все так и есть sad.gif
Цитата
Критические секции и атомарный доступ к битам: Возможно я коряво выразился, но речь шла в том числе и о том, что бы эти самые биты могли одновременно быть использованы и для организации взаимодействия между процессами, и для извещения мастера о состоянии слейва(в данном случае не как слейва SPI, а как об'екта управления).

Это слишком заморочено по битам семафоров судить о состоянии устройства и добавляет зависимость протокола обмена от модификации алгоритмов слейва. Уже по этой причине неправильно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 10 2016, 22:32
Сообщение #25


Ally
******

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



Цитата(zltigo @ Dec 10 2016, 23:03) *
Это слишком заморочено по битам семафоров судить о состоянии устройства и добавляет зависимость протокола обмена от модификации алгоритмов слейва. Уже по этой причине неправильно.


Кстати, вчера вышла интересная статья
где рассказано как на ровном месте ребята чуть не убили марсоход просто инверсией приоритетов.
А о более поздних марсоходах была инфа о багах вызванных отсутствием синхронизации где надо было.

А эта ChibiOS, как известно, такая быстрая потому что игнорирует некоторые политики, например поднятие приоритетов на простых примитивах синхронизации.
Поэтому семафоры там точно плохая идея.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 11 2016, 08:22
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AlexandrY @ Dec 11 2016, 00:32) *
Кстати, вчера вышла интересная статья
где рассказано как на ровном месте ребята чуть не убили марсоход просто инверсией приоритетов.

Ничего нового на белом свете sad.gif. Будут семафоры, будет и борьба с инверсией, и борьба с последствиями этой борьбы sad.gif. Посему и считаю все эти семафоры и иже с ними, заплатками используемыми с осторожностью в крайнем случае.
Но в любом случае в любой программе будет минимум два бага - последний и предпоследний sm.gif. Вопрос только в их фатальности.
Понравилось только sm.gif :
Цитата
Заключение:
Глен Ривз благодарит разработчиков операционки из фирмы Wind River, за то что они разработали систему, позволяющую дебажить даже в таких аварийных ситуациях.

Это и моя реальность. Хотя очень многие потребовали послать человека на марс с компьютером и отладчиком sm.gif.
Цитата
А эта ChibiOS, как известно, такая быстрая потому что игнорирует некоторые политики, например поднятие приоритетов на простых примитивах синхронизации.
Поэтому семафоры там точно плохая идея.

Посмотрел. Мельком, но посмотрел. RTOS, как RTOS. Все даже лучше, чем в, например, uCOS у которой даже задач с одинаковыми приоритетами не существует. Так что уже есть средство в корне обойти ту же проблему инверсии приоритетов sm.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 11 2016, 10:02
Сообщение #27


Ally
******

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



Цитата(zltigo @ Dec 11 2016, 10:22) *
Посмотрел. Мельком, но посмотрел. RTOS, как RTOS. Все даже лучше, чем в, например, uCOS у которой даже задач с одинаковыми приоритетами не существует. Так что уже есть средство в корне обойти ту же проблему инверсии приоритетов sm.gif.


Но не лучше MQX, в которой штатно идут средства межпроцессорного взаимодействия именно по каналу SPI laughing.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 11 2016, 11:50
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AlexandrY @ Dec 11 2016, 12:02) *
Но не лучше MQX, в которой штатно идут средства межпроцессорного взаимодействия именно по каналу SPI laughing.gif

Я считаю правильным оценивать возможности операционных систем по их ядру, а не по наличию "штатных" прибуд типа поддержек SPI, прикрученных разных библиотек или возможности запуска Microsoft Word.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 13 2016, 21:52
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(nanorobot @ Dec 9 2016, 18:14) *
Касательно бреда про семафоры: С небольшой поправкой, что упаковку значений бинарных семафоров в uint_16_t выполнять в процессе с максимальным приоритетом
это решение перестает быть "бредом".

Добавлю ещё один способ обеспечения атомарности доступа (касательно задач, но не ISR-ов) - временный запрет шедулера. Если такое поддерживает Ваша ОС.
Хотя в Вашем случае несомненно использовать надо критические секции aka запрет прерываний.
А фобии надо преодолевать....

Цитата(zltigo @ Dec 11 2016, 11:22) *
Все даже лучше, чем в, например, uCOS у которой даже задач с одинаковыми приоритетами не существует.

Вы отстали от жизни. Откройте для себя uCOS-III. 1111493779.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 13 2016, 22:32
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(jcxz @ Dec 13 2016, 23:52) *
Вы отстали от жизни. Откройте для себя uCOS-III. 1111493779.gif

О чудо! Только это не я отстал от жизни, а они. Их поезд ушел, пока они держались за свой примитивнейший шедулер и порты сделанные через анус sad.gif, появились более разумно сделанные операционки и III стал просто не интересен. Незачем пытаться входить в одну реку дважды.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 22:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01568 секунд с 7
ELECTRONIX ©2004-2016