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

 
 
> Queue и Mbox в uCOS-II., Вопросик по указателям
JeDay
сообщение Nov 3 2005, 16:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 276
Регистрация: 22-09-05
Из: Kiev
Пользователь №: 8 818



В ф-ю OSMboxPost() OSQPost() передается указатель на передаваемое сообщение. В исходниках ОС я не нашел копирования этого сообщения в промежуточные переменные. Получается когда я посылаю указатель на массив в очередь сообщений, я не могу потом этот массив изменять? Принцып передачи сообщений построен на указателях.

Подскажите как правильно передачу сообщений организовать.
Зараннее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_artem_
сообщение Nov 12 2005, 01:57
Сообщение #2


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Конечно же можешь. Я же наверху пример написал, как это делать.
Когда указатель(а точнее его значение) послан в очередь, значение указателя будет переписано в переменную внутри очереди. Но в то же время ты можешь менять память через указатель.

Данные нельзя изменить если операционка поддерживает ММУ (мемору манаджемент юнит) - зашишает память процесса от изменения другим процессом. Но юкос мму не поддерживает .

Насчет твоего примера - можешь команды через указатели посылать а можешь и у себя буфер создать а указатель к буферу посылать через очередь - тогда не надо будет посылать сами команды через очередь . Но это нехорошая практика - ты же не знаешь прочитал ли процесс куда ты отправил команду позицию буфера или нет . В этом случае можно использовать сдвоенный семафор - один на передачу команды друго на ее чтение . Но это усложняет программу.

Я у себя по другому делаю - создаю необзодимое количество буферов , и создаю функцию для контроля ими - типа маллок фрее .
когда мне нужно послать команду или что то в этом роде - я схватываю пустой буфер посредством маллок, посылаю его в очередь . На другой стороне когда этот буффер прочитывается приемным процессом , после обработки команды , буффер высвобождается через фрее. Но я Цшные функции маллок не использую - они очень медленные а создаю single linked list так что вец процесс по буферам занимает очень коротокое время .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post



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

 


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


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