Hallo,
ich bin gerade dabei ein ediptft32 mit einem XMEGA256A3 über SPI
kommunizieren zu lassen.
Um die Befehle zu Implementieren habe ich mir den Beispielcode von EA
für das SmallProtocoll zu eigen gemacht.
(siehe
http://www.lcd-module.de/fileadmin/downloads/development%20service/eDIP240/SmallProtocoll_R8_RS232.zip)
Da sind dann im Modul Display die ganzen Befehle schon vordefiniert,
feine Sache eigentlich.
Nun mein Problem:
Die Befehle, z.B.
1
#define eDIP_TA() eDIP_command("TA")
übergeben ein Array von ASCII-Zeichen, deren Datentyp wohl char ist.
Letzendlich werden die Parameter an die se Funktion übergeben:
Ich möchte das alles nicht eingfach mit Typecasts glatt bügeln, da
dadürch wahrscheinlich nur neue Probleme entstehen. Also darum die
Frage, wie ich das elegant lösen könnte?
Kann ich irgendwie ASCII-Zeichen global als unsigned char definieren?
Gruß Adrian
returnsend_Command(buf,parameter+3);//3 is aggredated, because 3 bytes added additionally
16
}
es werden also auch nicht immer alle Parameter genutzt. Aber das ist ja
eher eine Stil-Frage oder? Das Problem mit den Warnungen würde es auch
nicht lösen oder ?
ruud86 schrieb:> Ich möchte das alles nicht eingfach mit Typecasts glatt bügeln,
An dieser Stelle ist das ok.
deine eDIP_command Funktion übernimmt offenbar das Kommando als String.
Die darunterliegende Funktion eDIP_command6 arbeitet aber auf Bytes.
D.h. an irgendeiner Stelle geschieht ein Übergang in der
Betrachtungsweise des Speicherinhaltes. An genau dort (ich schätze mal
in der Funktion eDIP_command) muss dann der Pointer umgecastet werden.
> da> dadürch wahrscheinlich nur neue Probleme entstehen.
Nö. Da gibt es keine Probleme. Alles was du tust, ist das
'Spezialwissen' "String" über Bord zu werfen und auf den primtiveren
Datentyp "Byte" überzugehen.
> Also darum die> Frage, wie ich das elegant lösen könnte?> Kann ich irgendwie ASCII-Zeichen global als unsigned char definieren?
Das willst du eigentlich nicht tun. Denn das ist noch schlimmer als ein
einmaliger Cast eines Pointers in einer Funktion, von dem wir wissen,
dass er nur logische Konsequenzen hat, aber an den Bitmustern nichts
ändert.
sowieso IMMER ein Kommando-String ist, warum machst du dann nicht von
vorne herein daraus einen char* ?
Einen const char*, um genau zu sein?
1
booleDIP_command6(constchar*data,....
in der Funktion castest du den Character nach der Dereferenzierung auf
einen uint8_t und hast damit die Stelle, an der der Übergang von Text
auf Bytes erfolgt an einer Position zusammengefasst.
Hat man keine Probleme, macht man sie sich- in C. Was ist das alles nur
für ein überflüssiger Krampf mit der ganzen Herumcasterei und
-referenziererei. Leute, nehmt Assembler: Da wird niedergeschrieben was
nötig und wirklich Sache ist. Aber warum einfach wenns auch kompliziert
geht... Kopfschüttel
Gobi schrieb:> Hat man keine Probleme, macht man sie sich- in C. Was ist das alles nur> für ein überflüssiger Krampf mit der ganzen Herumcasterei und> -referenziererei. Leute, nehmt Assembler: Da wird niedergeschrieben was> nötig und wirklich Sache ist. Aber warum einfach wenns auch kompliziert> geht... Kopfschüttel
Wenn alles was man hat Bytes sind und man die nach belieben
verwurschteln kann, wie man lustig, ist ... ja, dann ist die Welt
einfach. Ist ja auch viel einfacher einfach überall mit dem Hammer
draufzuhauen, weil das das einzige Werkzeug ist, das man kennt.
In C, wie in den meisten Hochsprachen, gibt es nun mal Datentypen. Und
das aus gutem Grund. Eben weil sich die Sichtweise "Alles ist ein Byte
und wie ich das verwurschtle entscheide ich als Programmierer" nun mal
nicht bewährt hat.
Und mit diesen Datentypen kommen Regeln ins System. Spielt man nach
diesen Regeln, dann helfen einem die Datentypen, viele Fehler zu
vermeiden bzw. durch den Compiler einer Überprüfung zuzuführen. Der
Preis dafür ist akzeptabel - man muss sich nur an die Spielregeln
halten.
Hi,
danke erst mal für die Antworten, hat geholfen, habe an zentraler Stelle
jetzt einen Typecast eingebaut.
Wenn das ganze erst mal komplett läuft, werde ich mich um
Optimierungsmöglichkeiten bemühen.
Gobi dein missionarischer Eifer stellt ja fast die Katholiken in den
Schatten :)
Vielen Dank auf jeden Fall.
Gruß
Adrian