当前位置:  技术问答>linux和unix

是高手就进来帮帮忙!ARM9(2440)多线程串口编程,运行错误:__gnu_cxx::__concurrence_broadcast_error

    来源: 互联网  发布时间:2017-02-11

    本文导语:  在ARM9运行多线程串口程序是抛出这样的异常:terminate called after throwing an instance of '__gnu_cxx::__concurrence_broadcast_error'   what():  __gnu_cxx::__concurrence_broadcast_error 只要以调用OpenPort就报错。 该源代码在Fedora9上编译...

在ARM9运行多线程串口程序是抛出这样的异常:terminate called after throwing an instance of '__gnu_cxx::__concurrence_broadcast_error'
  what():  __gnu_cxx::__concurrence_broadcast_error

只要以调用OpenPort就报错。

该源代码在Fedora9上编译、运行都没问题,程序中用了网上找到的一个多线程串口类。
编译器用的是gcc 4.4.3

Google、百度边了也没找到解决方法,各位有什么解决方法或思路不?
希望大家能帮帮忙,多谢!!!!!!!!


//主程序
#include "CSerial.h"
#include 

using namespace std;

int main(int argc, char* argv[])
{
    CSerial::CSerial serial;
    serial.OpenPort("/dev/ttySAC0", 115200, 8, 1, 'N');//报错!!

    while(1);

    return 0;
}



/*自定义串口类
* CSerial.h
*
*  Created on: 2010-7-20
*      Author: yzm
*/

#ifndef CSERIAL_H_
#define CSERIAL_H_
#include      
#include      
#include      
#include     
#include     
#include           /*文件控制定义*/
#include         /*PPSIX 终端控制定义*/
#include           /*错误号定义*/
#include      
#include     
#include      "CCriticalSection.h"

using namespace std;

#define      BUFFER_LENGTH 1024

namespace CSerial {
class CSerial
{
private:
    string m_PortName;
    int  m_baudrate;
    int m_databits;
    int m_stopbits;
    char m_parity;
     //通讯线程标识符ID
     pthread_t      m_thread;
     CCriticalSection  mutex;
     // 串口数据接收线程
     static void* ReceiveThreadFunc( void* lparam );
public:
     CSerial();
     virtual ~CSerial();
     // 已打开的串口文件描述符
     int                m_fd;
     int                m_DatLen;
     unsigned char      DatBuf[BUFFER_LENGTH];
     int                m_ExitThreadFlag;
     // 按照指定的串口参数打开串口,并创建串口接收线程
     int OpenPort( string PortName, int baudrate, int databits, int stopbits, char parity );
     // 关闭串口并释放相关资源
     int ClosePort( );
     // 向串口写数据
     int WritePort( unsigned char* Buf, int len );
     // 接收串口数据处理函数
     virtual int PackagePro( unsigned char* Buf, int len );
private:
    void set_speed(int fd, int speed);
    int  set_Parity(int fd,int databits,int stopbits,int parity);
};

}

#endif /* CSERIAL_H_ */



/*
* CSerial.cpp
*
*  Created on: 2010-7-20
*      Author: yzm
*/

#include "CSerial.h"
#include 
#include 
#include 
#include      /*Unix 标准函数定义*/

namespace CSerial {
int speed_arr[] = {B115200,B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400,
        B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {115200,38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200,
        9600, 4800, 2400, 1200, 300, };
string BYTE2HEX(unsigned char* buffer,int nSize)
{
    char buf[1024];
    memset(buf,0,1024);
    int len = 0;
    for(int i = 0;i m_ExitThreadFlag) {
            break;
        }
        FD_ZERO(&fdRead);
        FD_SET(pSer->m_fd,&fdRead);
        aTime.tv_sec = 2;
        aTime.tv_usec = 100;
        ret = select(pSer->m_fd + 1, &fdRead, NULL, NULL, &aTime);
        if (ret ClosePort();
            break;
        }
        if (ret > 0) {
            //判断是否读事件
            if (FD_ISSET(pSer->m_fd,&fdRead)) {
                //data available, so get it!
                pSer->m_DatLen = read(pSer->m_fd, pSer->DatBuf, BUFFER_LENGTH);
                // 对接收的数据进行处理,这里为简单的数据回发
                if (pSer->m_DatLen > 0) {
                    pSer->PackagePro(pSer->DatBuf, pSer->m_DatLen);
                }
                // 处理完毕
            }
        }
    }
    printf("ReceiveThreadFunc finishedn");
    pthread_exit(NULL);
    return 0;
}
/**
*@brief  设置串口通信速率
*@param  fd     类型 int  打开串口的文件句柄
*@param  speed  类型 int  串口速度
*@return  void
*/
void CSerial::set_speed(int fd, int speed) {
    unsigned int i;
    int status;
    struct termios Opt;
    tcgetattr(fd, &Opt);
    for (i = 0; i  0){
        hasWrite = write(m_fd, Buf + wPos, ToWrite);
        if(hasWrite 

    
 
 

您可能感兴趣的文章:

  • 最棘手一种串口问题。请教高手。在线等
  • VMWare下的给虚拟机添加串口的问题?菜鸟请高手解释
  • 请教高手点简单的串口问题
  • 请问,那位高手研究过linux下的串口驱动程序?
  • unix 下c写的串口程序调试问题!高手请进 !!!
  • Linux串口编程问题(请高手指点)
  • 请教高手在QT下怎样收串口数据
  • 请教高手:Linux 串口读写 的问题?????
  • Linux串口通信问题,高手请指点!!!
  • 如何用java在linux中读写串口啊?请高手指点
  • linux下C语言向串口发送0的问题?请高手指教
  • 奇怪的串口通信问题,请高手指教
  • 请教高手LINUX下读串口数据的问题!!
  • 高手花一分钟时间进来帮个忙,关于串口问题。
  • Linux下写串口操作,对每次发送的数据要分多次写,不能一次写完,敬请高手赐教
  • 虚拟串口怎么读数据? 请有 串口 或者 usb 驱动经验的高手指点
  • 请教linux下串口编程的几个问题,高手相助!
  • 串口通讯---高手请进 大散分
  • 有关linux下串口通讯断帧的问题,望高手解答
  • 急求高手帮忙解决,在linux下qt串口编程的信号发射问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个线程问题,很困惑,高手帮个忙
  • 网络通讯和多线程问题 请高手相助!献上100分
  • 我只有这么多分了,请多线程高手帮一下!!!!!!!
  • Linux 多线程出现段错误 高手请进啊!
  • 请教高手,线程问题,怎样暂停或杀掉多线程?
  • 高手请进:linux 多线程占用内存问题
  • Linux线程阻塞问题 高手请进
  • 关于线程的问题,还请各位高手们能帮着看看
  • 入门,请教线程编程的问题,请各路高手帮帮忙
  • 复杂的线程同步问题,请教高手
  • 高手请看过来,我有些问题,我是新手.关于线程的!
  • 有没有使用过Linux下线程池技术的高手,请为我指点迷津!!!
  • 请linux下多线程编程的高手进来下
  • 急需关于linux多线程的代码工程实例-高手请进啊
  • 请问关于socket客户端因事件启动新线程的问题.高手请进
  • 请高手指点,多线程程序,如何调试找出 SIGSGEV 发生的位置?
  • 问个管理线程的问题-高手赐教
  • 请问高手LInux 下的进程、线程的切换具体是如何实现的?
  • Liunx多进程,多线程编程高手进来
  • 高手救命,linux下C++,多线程问题
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 高分请高手,高手定能解决
  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3