Moin!
Ich habe einen AT90CAN128 und ein EA eDIP240 und möchte das Display
gerne über I2C ansprechen.
Da ich keien Lust habe, jedes mal den ganzen Wust zu schreiben, wollte
ich mir ein Unterprogramm zum senden des Textes schrieben. Leider mache
ich irgendwo bei der Übergabe noch einen Fehler! Leider sehe ich ihn
aber nicht!
Wenn im Unterprogramm versucht wird, die Länge des String zu ermitteln,
kommt immer 0 bei raus.
Edit: Als Compiler verwende ich den AVR GCC in der aktuellen Version.
Könnt ihr mir helfen?
Hier der Code:
Moin!
@ Sven J.: Das ist ja die Folge aus meinem Problem. Für die Länge wird
immer 0 ermittelt. Die Korrekte Länge wäre aber 11!
@ Matthias: Die Veränderung hat leider keinen Erfolg gebracht...
Ich kämpfe mit diesem Problem schon seit Tagen...
Interessanterweise funktioniert dies aber einwandfrei:
Nein, die for-Schleife wird eben nur genau dann EIN mal durchlaufen,
wenn du einen String der Länge 0 übergibst. Ein String mit einer Länge >
0 führt dazu, dass die for-Schleife genau null mal durchlaufen wird, da
die Lauf-Bedingung NICHT erfüllt ist.
JappJapp, Sven '\0' hat recht. In einer FOR-Schleife ist das eine
LAUFbedingung, keine ABBURCHbedingung. Entsprechend muss da statt i ==
strlen(text) natürlich i < strlen(text) hin
1) die Bedingung in der Schleife ist wie gesagt falsch
2) bcc wird nicht initialisiert. Ergo: aktiviere Warnungen: -W -Wall und
beachte sie. Warnungen sind leichter zu korrigieren als Laufzeitfehler.
3) unten greift text[i] (bei korrekter schleife oben) ins Leere bzw ist
immer 0.
Moin!
ersteinmal vielen Dank für Eure Antworten!
Man wird mit der Zeit wirklich blind... Ich habe die For-Schleife nun
durch While-Schleifen ersetzt und siehe da, das läuft nun besser.
@ Mano Wee:
Das bcc ist die Checksumme der I2C Botschaft. Das Display erwartet
diese. Es liegt folgende Formel zugrunde:
bcc = Summe aus allen Bytes inkl. Kommando und len, Modulo 256
Wenn die Routine fertig ist, werde ich sie hier nocheinmal posten.
Gruß,
Sven