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
--------------------
Зачем лаять на караван , когда на него можно плюнуть?
|