Hallo zusammen, ich stehe im Moment vor folgendem Problem: Meine PC Anwendung sendet Vorgabewerte über die serielle Schnittstelle (/dev/ttyS0 57600 Baud) an meinen Atmega 128. Der Atmega sendet kontinuierlich Daten an den PC. Durch Eingabe im Programm am PC können die Vorgabewerte verändert werden, sprich sie werden erneut an den µc geschickt. Dies geht einige Male gut, nach einiger Zeit wird allerdings nichts mehr gesendet. perror gibt mir als Meldung "Die Ressource ist zur Zeit nicht verfügbar" aus. Das Problem ist leider nur insoweit reproduzierbar als dass ich sagen kann es tritt irgendwann auf, wie oft ich Vorgabewerte senden kann ist allerdings unterschiedlich. Die oben genannte Fehlermeldung die ich mir selbst ausgeben lasse ist so ziemlich alles was ich an Fehlermeldungen beim Durchforsten der Logfiles des Systems finden konnte. Hilfe oder auch nur mögliche Lösungsansätze wären sehr hilfreich :) Tobi
"The routine perror() produces a message on the standard error output, describing the last error encountered during a call to a system or library function." D.h. die Frage ist welche Systemfunktion oder Libraryfunktion hast du als letztes vor perror() aufgerufen. Die bzw. deren Fehlercode in errno ist der unmittelbare Bezugspunkt für die Meldung. Kann es z.B. sein, dass du in deiner Anwendung jedes Mal die serielle Schnittstelle öffnest aber nie schliesst und dir die Dateihandles ausgehen?
Hi, perror ruf ich direkt nach write auf. Also sollte der Fehler sich auf diese Funktion beziehen. Noch bisschen in meinem Code rumgewurschtelt. Ich habe ein Array welches mir als Puffer dient. In diesem stehen sobald gesendet werden soll 108 bytes. write gibt, wie ich jetz festgestellt habe zu Beginn noch 108 zurück, was ja richtig wäre, nur leider kommt davon nichts an meinem Chip an. Ich habe noch mal zum Testen einen Breakpoint zu Beginn der seriellen ISR gesetzt der nie aktiv wird. Würde vom Chip was empfangen würde dieser das mit einem Byte bestätigen. Solange das nicht erfolgt wird versucht die Daten weiterzusenden. write quittiert mir das einige Male mit 108, dann auf einmal mit -1 und oben beschriebener Meldung. Die Filedesktiptoren habe ich mir mal ausgeben lassen, auch hab ich eine Variable eingebaut die zählt wie oft die Schnittstelle geöffnet wird ohne sie zu schliessen. Dort kann ich leider kein Problem finden. Tobi
write() schreibt wahrscheinlich in einen Puffer und dieser Puffer ist irgendwann voll, weil davon nichts über die serielle Schnittstelle raus geht. Das hört sich für mich nach einem Initialisierungsproblem der Schnittstelle an. Gibt es auffällige Fehlercodes beim open() oder tcsetattr()? Welche Konfiguration (1) setzt du beim tcsetattr() - RAW Modus? Hast du bereits dein Programm mit dem Artikel http://www.mikrocontroller.net/articles/Ports_benutzen_%28GCC%29 verglichen? Bzw. kannst du einen auf das notwendigste abgespeckten Sourcecode (eigenständiges Komplettprogramm, Fehler reproduzierbar) angeben? (1) http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel6.shtml#6_1
danke für die hinweise :) hab jetz nochmal mein ganzes Flag gesetze rausgenommen und mit cfmakeraw die Flags generiert. Jetz hauts hin. Anscheinend wirklich ein Problem beim manuellen setzen. Werd mir das nochmal anschauen, aber es funktioniert soweit denk ich (macht zumindest den Anschein) Danke Tobi
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.