Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 20. Nov 2018 8:40

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 17. Okt 2006 22:05 
Hi!

Ich programmiere an einer RS232 Schnittstelle für Linux, über die Daten an einen Roboter gesendet und von ihm empfangen werden sollen. Unter Windows läuft das ganze auch schon wunderbar und wenn man sich das ganze auf dem Oszi anschaut, sieht man da auch, dass zu erst vom uC die Daten gesendet werden (dies geschieht per interrupt alle 20 ms, während der PC per busy-wait darauf wartet) Sobald der PC seine Daten empfangen hat, sendet er dem uC umgehend ein Datenpaket, und kann dann was tun, bis das nächste Datenpaket vom uC kommt. Unter Linux kommt es nun zu dem problem, dass der PC zwar die Daten empfängt, dann jedoch eine von Durchlauf zu Durchlauf größer werdende Zeitspanne vergeht, bis er wiederum Daten zurücksendet. Dadurch läuft das Senden der Daten vom PC in den nächsten 20ms Zyklus rein und die Kommunikation bricht ein. Hat jemand eine Idee, warum das Senden der Daten vom PC unter Linus so lange auf sich warten lässt und wie man das unterbinden kann?

Hoffe, dass jemand was mit der Fehlerbeschreibung anfangen kann... sonst einfach fragen und ich versuchs genauer zu erklären.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18. Okt 2006 9:18 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Du hast vermutlich eine Busy-Loop programmiert? Wenn ja, wertet Linux den "bösen" Prozess, der ja immer seine Zeitscheibe aufbraucht, in der Priorität herunter, damit auch andere Prozesse mal drankommen.

Um so zeitkritische Dinge zu machen, brauchst du vermutlich schon Echtzeitpriorität (man sched_setscheduler), und solltest evtl. den Timertakt von 250Hz auf 1000Hz hochsetzen (Kernelkonfiguration->Processor Type and Features->Timer Configuration).

Auf jeden Fall dran denken, ab und zu nanosleep() oder sched_yield() aus einem Echtzeitprozess heraus aufzurufen, sonst kommen die normalen Prozesse nicht mehr zum Zuge und die Maschine lässt sich nicht mehr bedienen. Eine auf Echtzeitpriorität gesetzte Shell in einer Textkonsole hilft beim Debuggen.

Vielleicht kannst du aber auch einfach auf die Busy-Loop verzichten? Das wäre die beste Lösung.

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de