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

 
 
> Как сделать идеологически выдержанно, "в стиле РТОС"
nanorobot
сообщение Dec 9 2016, 11:08
Сообщение #1


Местный
***

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



Дивайс состоит из двух узлов на STM32 связанных по SPI. Программа как для мастера так и для слейва пишется с использованием RTOS: мастер CortexM4/ChibiOS, слейв - CortexM0/nil(облегченный вариант ChibiOS). Слейв, в частности формирует слово состояния - набор битов, которое передается мастеру, а так же используется самой программой слейва. Причем биты могут использоваться в разных тредах(процессах). С точки зрения парадигмы RTOS они являются об'ектами синхронизации процессов. В этом случае они должны иметь тип BinarySemaphore с другой стороны для передачи слова состояния мастеру они(биты) должны быть упакованы в переменную типа uint16_t. Сейчас у меня используется union одно поле которого битовая структура, другое поле uint16_t. Покамест УМВР, но беспокоят возможные проблемы из за отхода от парадигмы RTOS. Напрашивается вариант: любое бращение к битам состояния защищать от коллизий доступа с помощью мютекса, но nil их не имеет, а использовать для слейва полную ChibiOs - тяжеловато будет, там и требования к скорости обработки повыше и процессор послабее. Что посоветуют знатоки?

Сообщение отредактировал nanorobot - Dec 9 2016, 12:07
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexandrY
сообщение Dec 9 2016, 15:55
Сообщение #2


Ally
******

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



Цитата(nanorobot @ Dec 9 2016, 13:08) *
Напрашивается вариант: любое бращение к битам состояния защищать от коллизий доступа с помощью мютекса, но nil их не имеет, а использовать для слейва полную ChibiOs - тяжеловато будет, там и требования к скорости обработки повыше и процессор послабее. Что посоветуют знатоки?


Вообще не понял проблемы. Что такое здесь 'парадигма'?
У меня на M0 вполне себе MQX крутится. Может вам на MQX перейти? biggrin.gif
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Dec 9 2016, 16:07
Сообщение #3


Местный
***

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



Цитата(AlexandrY @ Dec 9 2016, 21:55) *
Вообще не понял проблемы. Что такое здесь 'парадигма'?
У меня на M0 вполне себе MQX крутится. Может вам на MQX перейти? biggrin.gif


м.б. сформулировал неудачно, но тема себя исчерпала.


Цитата(zltigo @ Dec 9 2016, 22:00) *
Вообще-то не только о нем. Для предельно кастрированных платформ, где даже допотопного SWP нет, остается запрет прерывания.

Мне, значит, не дано не понять sm.gif почему вызов вызов десятков-сотен команд содержащих запреты прерывания вместо просто запрета прерывания назван Вами "без предрасудков". О критических секциях - если если в некой операционке нет оформления критических секций, то это надо дописать, либо выкинуть такую "RTOS" нафиг.

Процесс это НЕ семафор. Использование возможностей высокоприоритетного процесса, это нормально.



указано что слейв-M0, далее все про слейв
возможно стоит отказаться от всех сервисов РТОС, для синронизации использовать обычные переменные, запрещая , где требуется, прерывания wink.gif

не удалось найти места, где бы я утверждал что процесс это семафор.

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


Гуру
******

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



Цитата(nanorobot @ Dec 9 2016, 18:07) *
не удалось найти места, где бы я утверждал что процесс это семафор.

Но тем не менее свалили их в одну кучу:
Цитата
Касательно бреда про семафоры: С небольшой поправкой, что упаковку значений бинарных семафоров в uint_16_t выполнять в процессе с максимальным приоритетом

Цитата(nanorobot @ Dec 9 2016, 18:07) *
возможно стоит отказаться от всех сервисов РТОС, для синронизации использовать обычные переменные, запрещая , где требуется, прерывания wink.gif

Перестаньте противопоставлять средства предоставляемой какой то кастрированой RTOS всему спектру приемов программирования.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Dec 9 2016, 17:58
Сообщение #5


Местный
***

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



Цитата(zltigo @ Dec 9 2016, 23:24) *
Но тем не менее свалили их в одну кучу:


Что не так? Есть набор бинарных семафоров, значения которых требуется "упаковать" в переменную типа uint16_t. Эту самую упаковку я собираюсь выполнять в процессе(треде, задаче) обладающем наивысшим приоритетом. Ни логических, ни грамматических ошибок не допущено. Ну, возможно, запятую пропустил. Ну так я на Пулитцеровскую премию не претендую. biggrin.gif Будьте доброжелательнее, не упоминайте анусы всуе laughing.gif Всего доброго.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 9 2016, 18:07
Сообщение #6


Ally
******

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



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


Так это же нарушение 'парадигмы' если я ее правильно понимаю.
Основной принцип RTOS - независимость задач, для того чтобы была возможность оценить их планируемость.
Вы же целую кучу задач связываете между собой неким общим маршалингом.
Это не RTOS, планируемости нет.


Go to the top of the page
 
+Quote Post
nanorobot
сообщение Dec 9 2016, 18:14
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #8


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

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



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

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


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


Местный
***

Группа: Участник
Сообщений: 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
sanny444
сообщение Jul 13 2017, 06:55
Сообщение #10





Группа: Новичок
Сообщений: 4
Регистрация: 5-06-17
Пользователь №: 97 506



Цитата(nanorobot @ Dec 9 2016, 21:35) *
Все именно так.
Состояния всех семафоров мастеру знать не нужно. Требуется знать сотояние ограниченного числа именно флагов, которые для слейва играют роль семафоров, использующихся для взаимодействия между процессами. Спасибо. Чтобы осознать проблему, иногда достаточно кому то рассказать о ней.




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

Так всё-таки Вам в конкретно этой задаче над максимально быстро сообщить мастеру об изменени флагов или это периодически опрос?
Имхо, идеологически верно будет "вести"(модифицировать) переменную на самом сервере, а со слэйва присылатьсообщения об изменении состояния критических бит
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- nanorobot   Как сделать идеологически выдержанно, "в стиле РТОС"   Dec 9 2016, 11:08
- - novikovfb   Цитата(nanorobot @ Dec 9 2016, 14:08) Нап...   Dec 9 2016, 11:33
|- - nanorobot   Цитата(novikovfb @ Dec 9 2016, 17:33) а ч...   Dec 9 2016, 11:42
|- - novikovfb   Цитата(nanorobot @ Dec 9 2016, 14:42) Это...   Dec 9 2016, 11:56
|- - nanorobot   Цитата(novikovfb @ Dec 9 2016, 17:56) Это...   Dec 9 2016, 12:18
- - AHTOXA   Цитата(nanorobot @ Dec 9 2016, 16:08) Нап...   Dec 9 2016, 11:40
- - zltigo   Цитата(AHTOXA @ Dec 9 2016, 13:40) Достат...   Dec 9 2016, 13:27
|- - nanorobot   Цитата(zltigo @ Dec 9 2016, 19:27) Именно...   Dec 9 2016, 15:14
|- - zltigo   Цитата(nanorobot @ Dec 9 2016, 17:14) Есл...   Dec 9 2016, 16:00
|- - jcxz   Цитата(nanorobot @ Dec 9 2016, 18:14) Кас...   Dec 13 2016, 21:52
|- - zltigo   Цитата(jcxz @ Dec 13 2016, 23:52) Вы отст...   Dec 13 2016, 22:32
|- - AlexandrY   Цитата(jcxz @ Dec 13 2016, 23:52) Хотя в ...   Dec 14 2016, 08:35
|- - zltigo   Цитата(AlexandrY @ Dec 14 2016, 10:35) Хо...   Dec 14 2016, 09:46
|- - jcxz   Цитата(AlexandrY @ Dec 14 2016, 11:35) Та...   Dec 19 2016, 14:18
|||- - zltigo   Цитата(nanorobot @ Dec 9 2016, 23:35) Тем...   Dec 10 2016, 08:16
||||- - nanorobot   Цитата(zltigo @ Dec 10 2016, 14:16) Плохо...   Dec 10 2016, 09:30
||||- - AlexandrY   Цитата(nanorobot @ Dec 10 2016, 11:30) Кр...   Dec 10 2016, 20:28
||||- - zltigo   Цитата(nanorobot @ Dec 10 2016, 11:30) По...   Dec 10 2016, 21:03
||||- - AlexandrY   Цитата(zltigo @ Dec 10 2016, 23:03) Это с...   Dec 10 2016, 22:32
||||- - zltigo   Цитата(AlexandrY @ Dec 11 2016, 00:32) Кс...   Dec 11 2016, 08:22
||||- - AlexandrY   Цитата(zltigo @ Dec 11 2016, 10:22) Посмо...   Dec 11 2016, 10:02
||||- - zltigo   Цитата(AlexandrY @ Dec 11 2016, 12:02) Но...   Dec 11 2016, 11:50
||- - AlexandrY   Цитата(nanorobot @ Dec 9 2016, 20:14) Так...   Dec 9 2016, 21:15
|- - zltigo   Цитата(nanorobot @ Dec 9 2016, 19:58) Что...   Dec 9 2016, 20:33
- - AlexandrY   Цитата(nanorobot @ Dec 9 2016, 18:07) м.б...   Dec 9 2016, 17:25


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 03:01
Рейтинг@Mail.ru


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