Hei Leute, ich versuche gerade mit meinem Mikrocontroller(rabbit 3000) zu Testzwecken nur eine dauernde Folge von "A"'s ueber die serielle Schnittstelle zu senden. Wenn ich das Signal aber messe, wiederholt sich das Signal aber nicht ungefaer alle 10 Bits. Wie kann das sein, normalerweise werden doch die Daten Byte fuer Byte in ASCII-Codierung gesendet??? Bin voellig ratlos. Weiss jemand was darueber??? VG Paule
Ich dachte dumme Fragen gibts nicht ? ;) Kannste mal den Quellcode posten? Das kann sonst alles mögliche sein...
>>Es gibt keine dummen Fragen, nur dumme Frager.<<
Sorry, konnte ich an der Stelle nicht vorbeiziehen lassen.
Cheers
Detlef
#define DINBUFSIZE 127 #define DOUTBUFSIZE 127 #class static //************************************************ void SerDwrite(int *s) { serDopen(9600); serDrdFree; serDrdFlush; serDwrFree; serDwrFlush; serDflowcontrolOff(); serDdatabits(PARAM_8BIT); while(1) {serDwrite(*s,11);} serDclose(); Und hier schreibt er keine As } //************************************************ main () { auto int *pointer; const char s1[11]="AAAAAAAAAAA"; pointer=&s1; SerDwrite(*pointer); }
Ich erwarte, dass der Compiler mindestens drei Warnungen ausgespuckt hat. Diese Warnungen bzgl. inkompatiblen Typen hängen ursächlich mit der Nichtfunktion des Programms zusammen. Es lohnt sich den Warnungen nachzugehen. Beim angegebenen Code fehlen die Includedateien. Insbesondere der Prototyp von serDwrite() ist interessant. Mit while(1) baust du eine Endlosschleife. Die Stelle mit deinem Kommentar "Und hier schreibt er keine As" wird nie erreicht.
Danke fuer die Antwort Stefan, aber der Compiler hat nur eine Warnung ausgespuckt nämlich, dass die Initialisierung "AAAAAAAAAAA" gleich groß ist wie das array s1 und so keine 0 Terminierung stattfindet. MAcht das was? Includen brauche ich hier nix, weil ich mit Dynamic C von Z-world arbeite(ist leicht abgewandelte Version von Standard C). Weiss jemand, was Stefan mit inkompatiblen Typen meint. Was soll hier inkompatibel sein??? VG Paule
Diese drei Zeilen sind in Standard C fischig. Und ich denke deine C Version unterscheidet sich bei den Pointern nicht, musst du aber nachsehen. while(1) {serDwrite(*s,11);} // 1 pointer=&s1; // 2 SerDwrite(*pointer); // 3 1: s ist laut Argumentliste der aufrufenden Funktion ein int *. *s ist somit ein int. Es sträuben sich einfach die Nackenhaare des Programmierers, weil man den Aufruf üblicherweise mit Pointerübergabe programmiert. Daher auch die Frage nach dem Prototypen. 2: pointer ist ein int *. S1 ist ein char []. &s1 ist somit ein char ** und die Zuweisung an pointer ist nicht OK. Ich denke es ist char *pointer = s1; oder char * pointer = &s1[0]; gemeint. 3: Gleicher Fall wie 1 nur dass man weiss, dass der Typ vom Argument nicht passt. Das fehlende Nullbyte bei s1 ist möglicherweise unkritisch (aber sehr unschön), jenachdem wie serDwrite() programmiert ist. Das zweite Argument 11 verhindert möglicherweise einen ansonsten vorprogrammierten Bufferoverflow.
Warum so kompliziert mit dem Zwischenpointer? Ich weiss schon, das war weil dir der Compiler das sonst nicht akzeptiert haette. Du hast das aber falsch gelöst (wie Stefan bereits ausgeführt hat). void SerDwrite(const char *s) { serDopen(9600); serDrdFree; serDrdFlush; serDwrFree; serDwrFlush; serDflowcontrolOff(); serDdatabits(PARAM_8BIT); while(1) {serDwrite(s,11);} serDclose(); Und hier schreibt er keine As } //************************************************ main () { const char s1[] = "AAAAAAAAAAA"; SerDwrite( s1 ); }
Danke Stefan und Karl Heinz Buchegger, es tut jez!!!!!! Hattet recht mit den Pointern, daran lags.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.