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

 
 
> 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 7 2005, 12:39
Сообщение #2


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

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



Net JeDay , sovsem vse naoborot - esli ukazatel (pointer ) izvesten to cerez nego mozno izmenit soderzimoe pomyati na kotoruyu on ukazivaet.

Tvoya programma ze piutaetsya delat izmeneniya v ukazatele a nev v pamyati na kotoruyu ona ssilayetsya :
...
err = OSQPost(evQ, (void*)A);
A = "Bad";
...


Teper o source codes :
OSQPost() naydes v os_q.c. Znacenie ukazatyelya kopiruetsya v ukazatel vnutri OS. Eto soversaetsya v stroke :
*pq->OSQIn++ = msg; /* Insert message into queue */

Structure OS_Q naydes v ucos_ii.h
typedef struct os_q { /* QUEUE CONTROL BLOCK */
struct os_q *OSQPtr; /* Link to next queue control block in list of free blocks */
void **OSQStart; /* Pointer to start of queue data */
void **OSQEnd; /* Pointer to end of queue data */
void **OSQIn; /* Pointer to where next message will be inserted in the Q */
void **OSQOut; /* Pointer to where next message will be extracted from the Q */
INT16U OSQSize; /* Size of queue (maximum number of entries) */
INT16U OSQEntries; /* Current number of entries in the queue */
} OS_Q;


Rekomenduyu pocitat literaturu po ukazatelyam v C - togda vse stanet yasno .


Na vot tebe primer kak ti mozes eto sdelat :

INT8U arr[8], *ptr1;
INT8U *str1 = "Privet";
INT8U *str2 = "Otvali";

ptr1 = arr; // dayes ukazatelu sssilku na pamyat

strcpy(ptr1, str1); // skopiruy pervoe slovo v pamyat
OSQPost(yourque, ptr1); // posilay soobsenie w drugoy task

....

strcpy(ptr1,str2); // skopiruy vtoroe slovo v pamyat


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

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 5th August 2025 - 16:09
Рейтинг@Mail.ru


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