c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
Absender: Torsten Evers
Datum: Sa, 01.04.2006 20:56:45
In-reply-to:
<BCF016D5ED5AC34FBB655D109519ABCF083DFB@xxxxxxxxxxxxxxxxxxxx>
References:
<BCF016D5ED5AC34FBB655D109519ABCF083DFB@xxxxxxxxxxxxxxxxxxxx>
Hallo Carsten,
Am Samstag, 1. April 2006 19:57 schrieb Carsten Giesen:
> Ich bräuchte mal bitte Hilfe. Da ich den Code von AVR übernommen habe, tue
> ich mich schwer den Fehler zu finden.
[...]
>
> Hier rufe ich eine Routine auf:
>
> state = Get_byte(data_pack[i].data_ptr++,j);
[...]
> *rx_ptr = TWDR;
> Das Problem ist, das der Werte den ich lese, nicht in
> "data_pack[i].data_ptr++" ankommt.
nun, wo schaust du denn nach wenn die Funktion zurückkehrt? Wenn Du in
data_pack[i].data_ptr schaust, ist das klar, dass da kein Wert steht (wenn
nicht, entschuldige die simple Vermutung aber sicher ist sicher ;) ).
Du übergibst den Parameter ja mit Postinkrement-Operator, d.h. der Zeiger
zeigt nach dem Aufruf auf den nächsten Character-Wert, d.h. eine
Speicherstelle weiter.
Hier ein kleines Testprogramm, das das verdeutlichen soll:
#include <stdio.h>
void testit(char* foo) {
*foo='a';
}
int main() {
char test[]="123456789";
char *ptr=test;
printf("String vorher: %s\n",test);
testit(ptr++);
printf("Zeiger zeigt auf: %c\n",*ptr);
printf("String nacher: %s\n",test);
}
Schöne Grüße,
Torsten Evers