私のアプリでは、ソケット クライアントとシリアル コールバック関数を読み取る while(1) を実行する pthread があります。私のアプリは、シリアル (/dev/ttyS0 など) からメッセージを受信し、ソケットからメッセージを受信します。問題: シリアルからいくつかのメッセージを受信した後、アプリがクラッシュします。この時点では、ソケットは何も受信していません。しかし、スレッドの作成にコメントすると、アプリは正常に動作します。
コード ドラフト:
// Socket Thread
static void *Socket(void *arg)
{
// socket inicialization
while (1)
{
ret = read(client, buffer, sizeof(buffer)-1);
// do something
}
}
// serial callback
static void SerialCallback(int id, unsigned char *buffer, int length)
{
// do something
}
// main
int main (void)
{
// start and configure serial callback
cssl_start();
Serial = cssl_open(SERIAL_PORT, SerialCallback, 0, 115200, 8, 0, 1);
// create the pthread
// If I comment the line below the app work fine
pthread_create(&Thread_Socket, NULL, Socket, NULL);
while (1)
{
}
}
ノート:
ライブラリ cssl (http://sourceforge.net/projects/cssl/) を使用してシリアルを処理します。このライブラリはリアルタイム信号を使用します。
テスト目的で、socat を使用して疑似端末 (/dev/pts/XX など) を生成します。
シリアル コールバックは、シリアルが 1 つ以上のバイトを受信するたびに呼び出されます。
cutecom を使用してシリアルにメッセージを送信しています
2012.07.16 新試験情報追加
最初のテスト: read 関数の行を while(1); に置き換えます。そして問題が続きます(したがって、問題は読み取り機能とは関係ありません)。
2 番目のテスト: 完全なコード (上記の例) を使用して、2 つの外部 USB/シリアル コンバーター ループバックを接続して使用すると、正しく動作します。