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

 
 
> Система обмена сообщения между отдельными модулями программы
Слесарь
сообщение May 26 2013, 11:32
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 884
Регистрация: 7-11-09
Из: Ростовская обл.
Пользователь №: 53 484



Здравствуйте!
Программирую на С под 8-бит микроконтроллер. Для улучшения динамики работы ПО хочу сделать нечто подобное как сообщения Виндовс. Каждому отдельному модулю ПО выделяется процессорное время, только не квант времени как в Виндовс, а передается процессор на обработку всего что обрабатывает модуль, естественно, модуль должен как можно скорее вернуть процессор для работы следующих модулей. Должен проверить свои данные и сообщения, если новых данных/сообщений нет, вернуть процессор для работы других модулей ПО, следующий по порядку, по кругу.

Отдельные модули ПО могут добавлять сообщения в общий список, другие модули могут получать сообщения и обрабатывать.
Планирую сделать две функции доступные из всех модулей ПО SendMessage и GetMessage, в функции будет передаваться/приниматься хейдер сообщенияи данные. Функция SendMessage добавляет сообщение с указанием хейдера в динамичный список сообщений. Функция GetMessage извлекает сообщение с указанным хейдером или если сообщение отсутствует возвращает NO_MESSAGE.

Вопрос в следующем:
Допустим один модуль шлет сообщения, но еще не существует модуля который может эти сообщения обрабатывать, список сообщений будет расти. Какое должно быть время жизни сообщений, чтоб не забить всю память? Сообщение должно пройти через все модули ПО по кругу и должно уничтожится вернувшись в модуль отправитель?

Правильно ли я мыслю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrewlekar
сообщение May 31 2013, 06:02
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Во-первых, Вам нужно избавиться от суперлупа и воткнуть ртос. Это увеличит производительность Вашего процессора без изменения логики работы.
Во-вторых, код с отправкой сообщений интересный. Мне нравится.
В-третьих, я для себя тоже сделал многопоточную очередь сообщений - для того, чтобы перетаскивать обработку данных из контекста одного потока в контекст другого. Сразу скажу, на си это выглядит довольно криво, съедает избыточную память и в большинстве случаев очередь как таковая не требуется - создаётся очередь из одного элемента. Для того, чтобы не было переполнения при отсутствии приёмника сообщений, я сделал ограничение размера в конструкторе очереди. Для того, чтобы не было фрагментации памяти, память под очередь выделяется статически на этапе компиляции.

Да, кстати, аналогичный Вашему код есть и у меня в проекте. По сути это защищенная от многопоточного доступа переменная. У нас вместо SendMessage и GetMessage используется WriteRegister и ReadRegister.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 31 2013, 06:45
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



2TC: скачайте книгу Кубенского А.А. "Структуры и алгоритмы обработки данных: объктно-ориентированный подход и реализация на С+" в ней весьма неплохо разжёван диспетчер сообщений...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Слесарь   Система обмена сообщения между отдельными модулями программы   May 26 2013, 11:32
- - zöner   чем не устроили статические переменные ?   May 26 2013, 13:29
- - Слесарь   много потребуется статических переменных. не нагля...   May 26 2013, 13:44
- - zöner   данная схема как-то не вяжется с 8-битными контрол...   May 26 2013, 13:46
- - Слесарь   надо писать динамичное ПО, с минимумом проверок ус...   May 26 2013, 14:15
- - ARV   ну так в винде не совсем так: там в каждом приложе...   May 26 2013, 14:50
|- - Слесарь   Цитата(ARV @ May 26 2013, 17:50) ну так в...   May 26 2013, 15:35
|- - ARV   Цитата(Слесарь @ May 26 2013, 19:35) Да. ...   May 26 2013, 17:02
|- - Petr_I   Цитата(Слесарь @ May 26 2013, 19:35) ...н...   May 26 2013, 17:35
|- - Слесарь   Цитата(Petr_I @ May 26 2013, 20:35) По ид...   May 26 2013, 18:07
|- - Petr_I   Цитата(Слесарь @ May 26 2013, 22:07) Опис...   May 26 2013, 20:27
- - zöner   посмотрите в сторону Protothreads - там есть небло...   May 26 2013, 16:10
|- - Слесарь   Цитата(zцner @ May 26 2013, 19:10) посмот...   May 26 2013, 17:06
- - Слесарь   Все дело в том, что могу мыслить только естественн...   May 26 2013, 21:47
|- - Petr_I   Цитата(Слесарь @ May 27 2013, 01:47) Испо...   May 26 2013, 22:46
- - zöner   ЦитатаМне непонятно когда эта задача выполнена с и...   May 26 2013, 22:08
|- - Слесарь   Цитата(zöner @ May 27 2013, 01:08) о...   May 27 2013, 06:45
|- - ARV   Цитата(Слесарь @ May 27 2013, 10:45) Не б...   May 27 2013, 08:07
|- - AlexandrY   Цитата(Слесарь @ May 27 2013, 09:45) Един...   May 27 2013, 08:12
|- - Слесарь   Цитата(AlexandrY @ May 27 2013, 11:12) Хо...   May 27 2013, 14:26
|- - AlexandrY   Цитата(Слесарь @ May 27 2013, 17:26) Да. ...   May 27 2013, 14:42
|- - Слесарь   Цитата(AlexandrY @ May 27 2013, 17:42) за...   May 27 2013, 17:58
- - -SANYCH-   ЦитатаНет. Еще не готов. У самого как-то пока не п...   May 28 2013, 09:19


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:56
Рейтинг@Mail.ru


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