|
Система обмена сообщения между отдельными модулями программы |
|
|
|
May 26 2013, 11:32
|
Гуру
     
Группа: Свой
Сообщений: 2 884
Регистрация: 7-11-09
Из: Ростовская обл.
Пользователь №: 53 484

|
Здравствуйте! Программирую на С под 8-бит микроконтроллер. Для улучшения динамики работы ПО хочу сделать нечто подобное как сообщения Виндовс. Каждому отдельному модулю ПО выделяется процессорное время, только не квант времени как в Виндовс, а передается процессор на обработку всего что обрабатывает модуль, естественно, модуль должен как можно скорее вернуть процессор для работы следующих модулей. Должен проверить свои данные и сообщения, если новых данных/сообщений нет, вернуть процессор для работы других модулей ПО, следующий по порядку, по кругу.
Отдельные модули ПО могут добавлять сообщения в общий список, другие модули могут получать сообщения и обрабатывать. Планирую сделать две функции доступные из всех модулей ПО SendMessage и GetMessage, в функции будет передаваться/приниматься хейдер сообщенияи данные. Функция SendMessage добавляет сообщение с указанием хейдера в динамичный список сообщений. Функция GetMessage извлекает сообщение с указанным хейдером или если сообщение отсутствует возвращает NO_MESSAGE.
Вопрос в следующем: Допустим один модуль шлет сообщения, но еще не существует модуля который может эти сообщения обрабатывать, список сообщений будет расти. Какое должно быть время жизни сообщений, чтоб не забить всю память? Сообщение должно пройти через все модули ПО по кругу и должно уничтожится вернувшись в модуль отправитель?
Правильно ли я мыслю?
|
|
|
|
|
 |
Ответов
|
May 26 2013, 15:35
|
Гуру
     
Группа: Свой
Сообщений: 2 884
Регистрация: 7-11-09
Из: Ростовская обл.
Пользователь №: 53 484

|
Цитата(ARV @ May 26 2013, 17:50)  ну так в винде не совсем так: там в каждом приложении своя очередь, PostMessage сразу обращается к очереди нужного приложения. в вашем случае вместо приложений некие модули, т.е. функция отправки сообщения должна перебрать имеющиеся в системе "модули" и отдать сообщение нужному, а если такового не нашлось - убить сообщение, т.е. не помещать его никуда. общий список сообщений - это что-то не то... Да. В Виндовс надо заранее регистрировать в системе обработчики сообщения для каждого модуля в загружаемом в память и инициализирующемся приложении. Как понимаю, такой принцип основан на динамическом выделении памяти и регистрации той или иной памяти в системе, но в среде МК статическое выделение памяти, наверное по этому общий список сообщений, память выделена статически, изменяются только данные.
|
|
|
|
|
May 26 2013, 17:35
|

Частый гость
 
Группа: Свой
Сообщений: 129
Регистрация: 28-09-10
Из: Москва
Пользователь №: 59 793

|
Цитата(Слесарь @ May 26 2013, 19:35)  ...но в среде МК статическое выделение памяти, наверное по этому общий список сообщений, память выделена статически, изменяются только данные. Я бы предложил кольцевой буфер сообщений. Новое сообщение записывается в голову буффера, если там есть необслуженное сообщение оно просто переписывается. Указатель перемещаем на следующий элемент. Обслуженное заменяется на NO_MESSAGE, чтобы по нескольку раз не обрабатывалось в функции GetMassage. Можно в качестве оптимизации времени поиска сообщения добавить уазатель на хвост как в FIFO, но добавятся дополнительные проверки. Цитата(Слесарь @ May 26 2013, 19:35)  Допустим один модуль шлет сообщения, но еще не существует модуля который может эти сообщения обрабатывать, список сообщений будет расти. По идее такое может быть только в случае ошибки или при отладке, т.к. линковка в МК статическая пожизни. Может Вы перестраховываетесь? А если Вы динамически подгружаете модули, то без регистрации в ОС никак не обойтись.
|
|
|
|
Сообщений в этой теме
Слесарь Система обмена сообщения между отдельными модулями программы 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, 19:35) Да. ... May 26 2013, 17:02    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 andrewlekar Во-первых, Вам нужно избавиться от суперлупа и вот... May 31 2013, 06:02 demiurg_spb 2TC: скачайте книгу Кубенского А.А. "Структур... May 31 2013, 06:45
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|