移远EC20串口使用阻塞问题

      今天我们郭工使用我写的EC20程序发现了一个严重的问题,就是运行一段时间后会出现丢数据的情况。使用供应商的程序却能很好的运行我很奇怪,仔细看了供应商的历程发现他们用的是select机制。

      我突然有个灵感是不是我的读取串口导致了串口阻塞?一查果然是。

      Linux下直接用read读串口可能会造成堵塞,或数据读出错误。然而用select先查询com口是否可读则可以避免这个问题。但是也会引起另一个问题,那就是会使使用select的线程在没有收到数据时像休眠阻塞一样。因为select是在 一定的时间内循环的去判断串口是否可读。

     之前的旧程序

int main()
{
    unsigned int i;
	int return_value = 0;
	unsigned long startCount = 0;//开机计时   重启后30分钟不变化
	unsigned char Signal_Strength_temp;
	unsigned char WIFIName_temp[33];
	int   TFcardState;//卡状态 
	
	int I_temp;
	GS_PC_str.RevBufLen = 0;
    //串口初始化  115200 bps,8 N 1
	GS_PC_str.fd = Serial_Open("/dev/ttyHS0", B115200, EIGHT_BIT, PARITY_NONE, ONE_BIT, FLOW_CONTROL_NONE);
    if(GS_PC_str.fd<0)
    {
       printf("serial open fail\n");
	   return 0;
	}
	else
	{
       printf("serial open success fd = %d\n",GS_PC_str.fd);
	}
   //卡状态
	TFcardState = Hk_Camera_Get_SD_State(&GS_TF_state);
	printf("return_value = %d\n", TFcardState);
	printf("state->f_blocks = %d\n", GS_TF_state.f_blocks);
	printf("state->f_bavail = %d\n", GS_TF_state.f_bavail);
	printf("state->used_percent = %d\n", GS_TF_state.can_used_percent);
   //配置自己的IP地址	
	HK_Camera_Init_Internet_Ip("192.168.1.5");
    //拨号状态 
    GS_Call_state = Hk_Camera_Data_Call();
    //开启摄像头功能
	Hk_Camera_Paramete_Init();
	Hk_Camera_Init_Camera("192.168.1.64", 13851, 0, 3);//开启第1(1~4)
	Hk_Camera_Start_Camera_Communicate();
	
    while(1)
    {
      //读取信号强度
      GS_Signal_Strength = Hk_Camera_Get_Signal_Strength();
	  printf("Signal Strength = %d\n", GS_Signal_Strength);	
	  if(GS_Signal_Strength>99)
	  {
        Signal_Strength_temp = 98;
	  }
	  else
	  {
        Signal_Strength_temp = GS_Signal_Strength;
	  }
	  //拨号状态 
	  GS_Call_state = Hk_Camera_Get_Call_Data_State();
	  //读IMEI号     
	  IMEI[0]=0x31;  
	  IMEI[1]=0x39;  
	  IMEI[2]=0x30;  
	  IMEI[3]=0x38;  
	  IMEI[4]=0x30;  
	  IMEI[5]=0x35;  
	  IMEI[6]=0x31;  
	  IMEI[7]=0x34;
	  IMEI[8]= 0;
      //判定摄像头是否在线 
      GS_camera_state =  Hk_Camera_Get_Camera_State_By_Id(0); 
      romdatasCopeToRamDataS("摄像:", WIFIName_temp);//0~4
	  if(GS_camera_state == 1 )
	  {//CURRENT_STAT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值