Hei Leute, ich will meinem Mikrocontroller beibringen artig auf eine asynchrone serielle Nachricht zu warten, und zwar unbegrenzt lang. Leider hab ich es bis jetzt nie geschaft, dass das Programm stabil laeuft. es erscheinen immer Fehler wie Timeout wail waiting for response from target; unexpected interrupt; watchdog / run time error; obwohl ich den Software-WatchDogTimer regelmaessig hitte und der Hardware-WDT ausgeschaltet hab. Hat jemand von euch eine Idee was ich verbessern koennte? 1. Was muss ich suchen/einstellen, damit mein Compiler nicht immer meckert timeout wail waiting for response from target??? 2. Warum spricht der WDT trotzdem an, oder hat jemand eine ANDERE Loesung jeglicher Art fuer dieses Problem, wie man also einen uC auf eien Nachricht warten lassen kann. Waere sehr dankbar fuer Hilfe, den ich hock schon ne ganze Weile dran und nix geht vorwaerts. verzweifle so langsam... Gruss Paule //************************************************ int SerEReceive(char *s) { static char ch; static int j; j=0; while((ch=serEgetc()) !='\0') //wartet auf Nullstring //zum Beenden des Empfangs { VdHitWd(wd); //WDT wird gehittet(noetig sind alle 15s) if(ch!= -1) //Emfangsfunktion { s1[j++]=ch; } } s1[j++]='\0'; return 1; } //************************************************
Da ist ja wieder die Kristallkugel gefragt: Ich vermute mal, serEgetc() endet erst, nachdem ein Zeichen im Puffer gelandet ist. D.h. Dein Watchdog wird nie getriggert, wenn nichts ankommt. Schalte ihn doch einfach ab, da Du ihn eh nicht gebrauchst. Alternativ sollte es auch ne Funktion geben, die immer zurückkehrt und im Returnwert signalisiert, ob ein Zeichen im Puffer ist oder nicht. Peter
OK vielen Dank Peter, hattest Recht mit der Funktion SerEgetc(). hab das problem geloest, indem ich die Bibliothek von SerEgetc veraendert hab. Ich haette aber noch ne andre Frage, die bei mir aufgekommen ist. Man kann ja die Buffer-Groesse des Eingangs angeben(ich habe zum Bsp. 255 Byte) angegeben. Die Bufferrung muss nach meinem Verstaendnis ja rein hardwaretechnisch geschehen, da ich ja zum Bsp. bei angehaltenem Programm kurz mal Daten in den Eingang schicken kann und dann viel spaeter diese Abrufen kann. Weiss jemand ob das wirklich rein hardwaretechisch geschieht(dann muessten ja 255 HardwareSpeicher in meinem uC eingebaut sein. ist das Realistisch??? Hoert sich viel an oder??? Oder weiss jemand wie das (wirklich) funktioniert, habe in den Unterlagen nichts dergleichen gefunden. Waere net wenn einer das posten koennte.
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.