在我的应用程序上,我有一个运行 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)
每次串行接收一个或多个字节时调用串行回调
我正在使用 cutecom 向串口发送消息
2012.07.16 新增测试信息
第一个测试:我用while(1)替换了read函数的行;问题随之而来(因此,问题与读取功能无关)。
第二次测试:使用完整代码(上例),我使用两个外部 USB/串行转换器环回连接,工作正常。