備忘録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

WiringPi Serial Library

次はシリアル通信です。
本家は↓
https://projects.drogon.net/raspberry-pi/wiringpi/serial-library/

ちなみに実例は明日やります。

Serial Library


wiringPiは、シリアルポートを操作するライブラリを含んでいます。
オンボードのシリアルポートとして利用でき、他のUSBデバイスと特別な区別ありません。
初期のOpen関数で、デバイス名を名づけます。

使うために、プログラムに以下のファイルがインクルードされていることを確認してください

#include <wiringSerial.h>

その後、以下の関数で利用できます。


・int serialOpen (char *device, int baud) ;

 Open関数は、シリアルデバイスの初期化と、バンドレート(転送レート)を設定します。
 シリアルポートは、デコードなしで文字を取り込むrawモードに設定され、
 読み込みから10秒でタイムアウトするように設定されます。
 戻り値が-1のときはエラーが起きています。errornoと対応しています

・void serialClose (int fd) ;
引数にて与えられたデバイスを閉じます

・void serialPutchar (int fd, unsigned char c) ;
引数で与えられたデバイスに、1byteだけ送信します。

・void serialPuts (int fd, char *s) ;
シリアルデバイスにNULLで終わる文字列を送信します

・void serialPrintf (int fd, char *message, …) ;

printfをシリアルデバイスにエミュレートします

・int serialDataAvail (int fd) ;
読み込み可能な文字の数を返します。
-1のときは、エラーが出てます。

・int serialGetchar (int fd) ;

シリアルデバイスから次の文字を返します。
データがないときは-1を返し、最大10秒間コールをブロックされます

・void serialFlush (int fd) ;
受信したすべてのデータを破棄し、downが送信されるのを待ちます。
# "waiting to be send down the given device."ってどういう意味?

Note:記述子fdはLinux標準の記述子を戻します。
 標準のread()、write()関数や、システムコールにも使えます。
 E.g.大きなバイナリブロックを書き込もうとするとき、
   serialPutchar()やserialPuts()を使うのは適切でないかもしれません。
   その場合、write()関数を利用できます。

Advanced Serial Port Control
wiringSerialライブラリはシンプルな制御を意図されています。
もし高度な制御が必要であれば、それにあったアプリケーションを利用できる。
例えば、パリティ制御、モデム制御は、PiのオンボードUARTにはない機能です。
昔ながらの方法を実行する必要があります

例えば、シリアル7bit+even、パリティを追加するモードでは、
以下のようにします

#include <termios.h>

struct termios options;

tcgetattr (fd, &options) ; // Read current options
options.c_cflag &= ~CSIZE ; // Mask out size
options.c_cflag |= CS7 ; // Or in 7-bits
options.c_cflag |= PARENB ; // Enable Parity - even by default
tcsetattr (fd, &options) ; // Set new options


上記の変数'fd'は、serialOpenが返される記述子です。
設定できるオプションは、tcpgetattrをmanコマンドで見てください

man tcgetattr
スポンサーサイト
  1. 2013/05/03(金) 18:21:58|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

C言語でシェルを呼ぶ

何か連続するシステムを作るとき
手軽にシェルから処理できるところは、シェルでやっちゃいたいと思い
メモ書き


Cのプログラムからシェルを呼び出して使う

■書式
#include <stdlib.h>

int system(const char *command);

■備考
 "/bin/sh -c"としてコールされ、シェルを利用できます。
 シェルが動作して、動作完了まで次の行には行きません。
 正常に完了したら0が、異常終了の場合は-1が戻って来ます。

■例
#include <stdlib.h>

int ret = system("echo \"hello shell\" > temporary");

- - - - - - - - もう一例 - - - - -

#include <stdio.h>

main(void){
printf("hello world\n");
}

とあれば、

#include <stdio.h>
#include <stdlib.h>

int main(void){
printf("hello world\n");
int ret = system("echo \"hello world\n\");
}

と修正すると Hello worldが2回表示されるます。

  1. 2013/05/03(金) 00:54:46|
  2. Linux
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。