Hallo zusammen, habe an der RS232 des PC einen Atmega8. Jetzt soll der Atmega ein Menü an Hyper Terminal schicken und der User soll per Tastatureingabe verschiedene Untermenüs etc. auswählen. Das Menü wird noch aufgebaut, aber wenn ich j oder n drücke, tut sich nichts? Jemand eine Idee?
Woher weiß dein getchar() eigentlich, daß es die serielle Schnittstelle verwenden soll? PS: Warum gibt's so viele Leute, die ihrem C-Code die Namens-Endung '.txt' oder gar '.TXT' geben?
Gast schrieb:
> Nein, bringt leider nichts. Noch jemand eine Idee?
Doku nachschauen, wie getchar in deiner Lib implementiert ist.
Normal ist es so, dass das I/O System Zeichen sammelt bis ein Return
reinkommt.
Die (meiner Meinung nach bessere) Alternative ist es allerdings, auf
getchar und Konsorten zu pfeifen und die UART direkt anzusprechen. Dann
hast du alles in der Hand und hast die Probleme erst gar nicht.
Moin Moin, getchar() sollte gehen - aber wie bereits zuvor erwähnt, bau dir die inputroutine besser selbst.
1 | /* receive the character */
|
2 | k=getchar(); |
3 | puts("\r\nDEBUG OUTPUT 001"); |
4 | sprintf(buffer, "%d\r\n", k); |
5 | puts(buffer); |
6 | if (k=='j') |
Kannst du den Debug Output sehen? Ist deine RX-Leitung Hardwareseitig, gestört? Hast Du bereits jemals was zu deinem Aufbau gesendet und es hat funktioniert? Gruß Katherine
Ist das ATMEL Evaluations Board und benutze CodeVision. Wenn puts benutze, erhalte ich die Fehlermeldung: incompatible with its declaration. Mit putsf wird zwar kompiliert, jedoch keine Ausgabe.
Hab den Fehler gefunden. Bei Hyper Terminal hab ich die Flusssteuerung von Hardware auf keine gestellt. Jetzt gehts. Besten Dank an alle.
Martin K. schrieb im Beitrag #2812209: > Mit der oben aufgezeigten Menüsteuerung hänge ich dann ja immer in dem > UP Do_Menu fest, oder sehe ich das falsch. Und wenn ich in ein Untermenü > wechsle, dann hänge ich in der Do_Menu - Routine des UP's fest, oder? Ich weiß zwar jetzt nicht worauf du dich beziehst, aber ja, das ist eine mögliche Idee. Jedes Menü ist ein UP und das 'Menü wird verlassen' in dem das UP einen Return ausführt. Geht es innerhalb eines Menüs in ein Submenü, dann ist das ein Funktionsaufruf der Funktion, die eben genau dieses Menü behandelt. > Denn mir ist es wichtig, das die Menü - Programme universell sind. Das > heißt für mich auch automatisch mit, das ich das Menü - Programm (was ja > an sich nichts zeitkritisches ist) einfach in main() mit aufrufen kann. > Also ich möchte mit der Menüsteuerung nicht den µc tot legen, sondern ab > und zu noch was andres in main() machen können. Dann musst du das anders aufziehen. Da funktioniert dann diese Technik nicht mehr. Eine mögliche Technik ist es dann, die Menüs nicht dadurch zu schachteln, in dem jedes Menü durch eine Funktion repräsentiert wird, sondern eine Datenstruktur hochzuziehen, in der die Menüs und ihre Verkettung durch zb Indizes oder Pointer realisiert sind. Dies deshalb, damit zu jedem Zeitpunkt eindeutig klar ist, wie eine Operation 'nach Oben', 'nach Links' etc. zu realisieren ist bzw. was dabei zu tun ist. Die Information in der Datenstruktur verrät es dir. Eventuell sind dabei dann allerdings ein paar Hilfsvariablen notwendig (die man aber auch in die Datenstruktur packen kann) und in denen man sich zb merkt, welcher Menüpunkt aus einem Menü 'den Cursor hat', wenn die Kontrolle aus einem Submenü zurückgegeben wird.
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.