2009-07-29 26 views
5

Cを使用してシリアルポートからデータを読み取るにはどうすればよいですか?モデムにデータをもう一度転送しますか? 私はシリアル通信にRS 232ケーブルを使用しています...シリアルポートからデータを読み取る

+2

どのオペレーティングシステムですか? –

+2

どのハードウェア/プラットフォームですか? – DaveR

+1

この質問にはさらに詳しい情報を追加する必要があります。 – Johan

答えて

2

まず第一に、これはあなたが使用するOSに非常に依存しています。

* nixタイプでは、通常、通常のファイル(たとえば/ dev/ttyS0)のようにシリアルポートデバイスを開き、読み書きを開始します。 Windowsの場合、Windowsのシリアル通信が本当の悪夢になる可能性があるので、信頼できるライブラリを検索するようアドバイスします。さらに、古いバージョンのWindowsとそれ以外のバージョンの間にはいくつかの違いがあるかもしれません。

個人的には、私はwxWidgetsユーザーですので、私はwxCTBを使用しています。 使用しているIDEに合ったライブラリを探す必要があります。

チャージリンクのいくつかの無料;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming/

+0

埋め込みには該当しません(埋め込みタグ付き)。 –

+0

埋め込み*は通常LinuxまたはWinCEを意味します。 –

6

両方のシリアルポートを扱うに関する有用な情報がたくさんPCとワイヤーのデバイス側の端は、Jan Axelsonの本Serial Port Completeのサイトにあります。

ポートとの実際の対話は、プラットフォーム固有のものです。ほとんどのフレーバーの* nixでは、/dev/ttyaという名前のデバイスを開き、ポートの読み取り、書き込み、設定にはread(),、ioctl()を使用します。 Windowsでは

、あなたはCreateFile()機能をCOM1(またはいくつかのフレーバーで\\.\COM1)という名前のファイルを開いて、それが設定され、SetCommState()DCB構造などの機能に満足してます。詳細は、あなたが* nix上で行う必要のあるものとは大雑把に似ていますが、完全に異なって構成されています。 COMポートの設定と使用に関する議論は、MSDNにあります。

埋め込みデバイスでは、UARTのハードウェアレジスタに直接アクセスするか、RTOSと対話します。いずれにしても、デバイス側のコードを広く移植可能にする方法は本質的にありません。

0

Windowsの土地では、すべての魔法を起こすライブラリを見つけた方がよいでしょう。

私はハードウェア(ブートローダ、設定、テスト)と話すための小さなユーティリティをまとめてBorland C++を使用しています.DelphiとBCCの両方で動作し、オープンソースであるTurboPower Async Professional Libraryに非常に満足していますパブリックライセンス1.1)。

2

コンパイラには、デバイス内または外部メモリまたはIOマップデバイス内でシリアルポート機能を実装するために使用されるハードウェアレジスタにアクセスするためのメカニズム(通常はコンパイラ固有)があります。これらのレジスタ定義は、多くの場合、ツールまたはプロセッサの製造元によって提供されます。シリアルポートレジスタにコンフィギュレーション制御値を書き込んで、動作モードを設定し、次に受信バッファレジスタからデータを読み出す場合があります。

MSP-430メーリングリストでは簡単ですが、USARTのプログラミングに関する質問が最も一般的なトピックです。

1

一般的な組み込みCコンパイラでは、コンパイラ指令またはボーレートなどのパラメータを制御し、UART(または他のI/Oハードウェア)をストリームに関連付けるパラメータを持つステートメントがあります。ストリーム名(複数のシリアルポートがある場合)を指定するか、またはデフォルトを使用することができます。次に、通常のC文字ルーチンでシリアルポートにアクセスすると、各文字を受け取ると割り込みが発生します。したがって、割り込みルーチンは各文字を読み込み、それをバッファに入れます。

関連する問題