Forum: Mikrocontroller und Digitale Elektronik dumme Frage


von Paul (Gast)


Lesenswert?

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

von Torsten (Gast)


Lesenswert?

Ich dachte dumme Fragen gibts nicht ? ;)

Kannste mal den Quellcode posten? Das kann sonst alles mögliche sein...

von Detlef _. (detlef_a)


Lesenswert?

>>Es gibt keine dummen Fragen, nur dumme Frager.<<

Sorry, konnte ich an der Stelle nicht vorbeiziehen lassen.

Cheers
Detlef

von Paule (Gast)


Lesenswert?

#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);
         }

von Stefan (Gast)


Lesenswert?

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.

von Paule (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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 );
         }

von Paule (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.