2009-07-29 16 views
5

Wie lese ich Daten von der seriellen Schnittstelle mit C? und dann nochmal die Daten an Modem übertragen? Ich verwende RS 232-Kabel für die serielle Kommunikation ...Daten von der seriellen Schnittstelle lesen

+2

Welches Betriebssystem? –

+2

Welche Hardware/Plattform? – DaveR

+1

Sie müssen auf jeden Fall weitere Informationen zu dieser Frage hinzufügen. – Johan

Antwort

2

Zunächst ist dies sehr abhängig von Betriebssystem, das Sie verwenden.

Für * nix Typ öffnen Sie in der Regel serielle Gerät wie normale Datei (/ dev/ttyS0, zum Beispiel), und beginnen zu lesen oder schreiben von ihm. Wie für Windows kann ich Ihnen beraten, nach einer zuverlässigen Bibliothek zu suchen, weil serielle Windows-Kommunikation ein echter Albtraum sein kann. Mehr noch, es kann einige Unterschiede zwischen alten Windows-Versionen und niemals geben.

Persönlich, weil ich wxWidgets Benutzer bin, verwende ich wxCTB. Sie sollten nach einer Bibliothek suchen, die zu der IDE passt, die Sie verwenden.

einige gebühren Links frei;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming/

+0

Nicht so geeignet für eingebettete (es ist markiert 'eingebettet'). –

+0

Nicht wahr. Embedded * normalerweise * bedeutet Linux oder WinCE. –

6

Viele nützliche Informationen über mit seriellen Schnittstellen Umgang sowohl auf PCs und auf dem Gerät Ende der Leitung können auf Jan Axelson's Website für das Buch Serial Port Complete gefunden werden.

Die tatsächliche Interaktion mit dem Port wird sehr plattformspezifisch sein. In * nix der meisten Flavors öffnen Sie ein Gerät mit dem Namen /dev/ttya und verwenden read(), write() und ioctl(), um den Port zu lesen, zu schreiben und zu konfigurieren.

Unter Windows öffnen Sie eine Datei mit dem Namen COM1 (oder \\.\COM1 auf einige Aromen) mit der CreateFile() Funktion, und es dann konfiguriert bekommen und glücklich mit Funktionen wie SetCommState() und der DCB Struktur. Die Details ähneln in groben Zügen den Dingen, die Sie auf * nix tun müssen, aber völlig anders organisiert. Sie finden die gesamte Diskussion über das Konfigurieren und Verwenden von COM-Ports unter MSDN.

Auf dem Embedded-Gerät greifen Sie entweder direkt auf die Hardwareregister des UART zu oder interagieren mit einem RTOS. In jedem Fall gibt es im Wesentlichen keine Möglichkeit, den Code auf dem Gerät weitgehend portabel zu machen.

0

Im Windows-Land finden Sie besser eine Bibliothek, die all die Magie passieren lässt.

Persönlich benutze ich Borland C++, um kleines Dienstprogramm zusammenzufügen, um mit meiner Hardware zu sprechen (Bootloader, Konfiguration und Testen) und ich bin sehr glücklich mit der TurboPower Async Professional Library, die sowohl in Delphi und BCC funktioniert und Open Source (Mozilla Öffentliche Lizenz 1.1).

2

In der eingebetteten Welt verfügt Ihr Compiler über einen Mechanismus (in der Regel Compiler-spezifisch), der den Zugriff auf die Hardware-Register ermöglicht, die zur Implementierung der seriellen Schnittstelle entweder im Gerät oder in einem externen Speicher oder einem IO-gemappten Gerät verwendet werden. Diese Registerdefinitionen werden oft von dem Werkzeug- oder Prozessorhersteller bereitgestellt, und es ist dann nur ein Fall des Schreibens der Konfigurationssteuerwerte in die Register des seriellen Ports, um ihren Betriebsmodus einzustellen und dann die Daten aus dem Empfangspufferregister zu lesen.

Klingt einfach, aber auf der MSP-430-Mailingliste sind USART-Programmierfragen das häufigste Einzelthema.

1

Um Ians Antwort zu erweitern, wird ein typischer eingebetteter C-Compiler eine Compiler-Direktive oder eine Anweisung haben, deren Parameter Einstellungen wie die Baudrate steuern und die den UART (oder andere I/O-Hardware) einem Stream zuordnen. Sie können einen Stream-Namen angeben (wenn Sie mehr als einen seriellen Port haben) oder die Standardeinstellungen verwenden. Dann können Sie mit den üblichen c-Zeichenroutinen auf die serielle Schnittstelle zugreifen, und es wird eine Unterbrechung geben, wenn sie jedes Zeichen empfängt. Ihre Interrupt-Routine liest also jedes Zeichen und legt es in einen Puffer.

Verwandte Themen