Mega32 gcc

OP #363130
Lesenswert?
• ▲
▼
Hi,

ich habe Ulrich Radigs Webserver nachgebaut und sammle grade meine
ersten Erfahrungen mit C.
Dabei hab ich ein Problem, dem ich einfach nicht auf die Schliche
komme:
1
strcat (string,itoa(OCR1A,tmp,10));
funktioniert einwandfrei, aber bei
1
strcat (string,itoa(OCR2,tmp,10));
startet der Webserver quasi neu (er zeigt MMC/SD-Card nicht gefunden).

Ich kann OCR1A, OCR1B, als auch OCR2 ansonsten ganz normal beschreiben,
PWM funktioniert auch wie erwartet. Nur an dieser Code-Zeile hängt er
sich immer auf.

Da ich wie gesagt ganz neu in C bin, hoffe ich, einen dummen
Anfängerfehler gemacht zu haben, der euch alten Hasen sofort auffällt.
;)
Gast #363133
Lesenswert?
• ▲
▼
OCR2 ist ein 8-Bit Register, itoa erwartet und liest hier auch 16 Bit.
Offenbar gibt es ein Unglück, wenn auch noch TCNT2 gelesen wird.
Warum ist mir noch unklar. OCR1A hat 16 Bit.
Gibt der Compiler keine Warnung aus?
OP #363134
Lesenswert?
• ▲
▼
OK jetzt habe ich den string auch mal größer gemacht und siehe da es
funktionierte.
In der Funktion tcp_add_datastring() wird der Stringpointer einfach
solange inkrementiert, bis der char 0 ist. Wenn ich den String immer
auf diese weise leere und mit strcat neue Zeichen hinten anhänge (das
macht doch strcat oder?), dann rennt mir die Variable also früher oder
später sonstwo hin. Ist das ein Fehler in tcp_add_datastring() oder
benutze ich es nur falsch?
Mein Lösungsansatz wäre jetzt, in tcp_add_datastring den ursprünglichen
Pointer zu sichern und am Ende wieder zu setzen. Ist das legitim oder
zerhau ich mir damit wieder was anderes?
OP #363135
Lesenswert?
• ▲
▼
Nein der Compiler gibt keine Warnung aus. Bin ich also auf der falschen
Fährte? Sollte ich stattdessen lieber zuerst die 8bit-Register in
16bit-Variablen schreiben? Ich habe diese Code-Zeile nur von Ulrich
kopiert und das Register ausgetauscht. Bei ihm schien es auch immer
ohne Probleme zu funktionieren..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren