|  | 
 
悬赏10未解决
 
| 用扩展的串口与TC35连接做了一个短信的收发模块。当按下按键时可以发送短信,当接收到短信时可以点灯或者打开蜂鸣器。按下按键发送短信可以实现,但是当接收到短信(短信接收方式已设为中断方式即收到短信时会从串口发出数据)时,2440的扩展串口貌似接收不到数据,以下是部分源码:int main(void) 
 {
 
 serial_init();
 
 /*打开键盘设备文件*/
 buttons_fd = open("/dev/IRQ-Test", 0);
 if (buttons_fd < 0)
 {
 perror("open device buttons");
 exit(1);
 }
 
 for (;;)
 {
 char key_value_temp[4];
 int ret;
 /*开始读取键盘驱动发出的数据,注意key_value和键盘驱动中定义为一致的类型*/
 ret = read(buttons_fd, key_value_temp, sizeof(key_value_temp));
 if (ret != sizeof(key_value_temp))
 {
 perror("read buttons:");
 exit(1);
 }
 /*打印键值*/
 #if 1
 for (i = 0; i < sizeof(key_value); i ++)
 {
 if(key_value[i] != key_value_temp[i])
 {
 key_value[i] = key_value_temp[i];
 if(key_value[i] !='0')
 {
 nwrite = write(serial_fd,TC_MDSJ,sizeof(TC_MDSJ));//"AT+CMGS=\r"
 printf("nwrite=%d\n",nwrite);
 printf("%s",TC_MDSJ);
 printf("\n");
 
 sleep(1);
 nread=read(serial_fd,TC_RE,50);
 if(nread>0)
 {
 printf("nread=%d\n",nread);
 printf("%s",TC_RE);
 printf("\n");
 }
 
 nwrite = write(serial_fd,TC_FSNR,sizeof(TC_FSNR));//"@set temperature"
 printf("nwrite=%d\n",nwrite);
 printf("%s",TC_FSNR);
 printf("\n");
 
 sleep(1);
 nread=read(serial_fd,TC_RE,50);
 if(nread>0)
 {
 printf("nread=%d\n",nread);
 printf("%s",TC_RE);
 printf("\n");
 }
 CurCmdInfo=ATDAT;
 nwrite = write(serial_fd,TC_EOF,sizeof(TC_EOF));//0x1A,"\r\n"
 printf("nwrite=%d\n",nwrite);
 printf("%s",TC_EOF);
 printf("\n");
 
 sleep(1);
 nread=read(serial_fd,TC_RE,50);
 if(nread>0)
 {
 printf("nread=%d\n",nread);
 printf("%s",TC_RE);
 printf("\n");
 }
 }
 }
 }
 #endif
 ////////////////以下就是收到短信之后采取的动作,但是压根就没进去过  不知道为什么
 nread=read(serial_fd,TC_RE,100);
 if(nread>0)
 {
 for(i=0;i<(nread-1);i++)
 {
 if((TC_RE[i]=='C')&&(TC_RE[i+1]=='M'))
 {
 cmtag=i;
 printf("nread=%d\n",nread);
 printf("%s",TC_RE);
 printf("\n");
 break;
 }
 else
 {
 continue;
 }
 }
 
 
 if((TC_RE[cmtag]=='C')&&(TC_RE[cmtag+1]=='M'))
 {
 nwrite = write(serial_fd,TC_DQML,sizeof(TC_DQML));//"AT+CMGR=1\r"
 
 printf("nwrite=%d\n",nwrite);
 printf("%s",TC_EOF);
 printf("\n");
 
 sleep(1);
 for(i=0;i<100;i++)
 {
 TC_RE[i]=0;
 }
 
 nread=read(serial_fd,TC_RE,100);
 for(i=0;i<(nread-1);i++)
 {
 if(((TC_RE[i]=='p')&&(TC_RE[i+1]=='w'))||((TC_RE[i]=='l')&&(TC_RE[i+1]=='e')))
 {
 ptag=i;
 break;
 }
 else
 {
 continue;
 }
 }
 
 optag = TC_RE[ptag];
 ontag = TC_RE[ptag+4];
 led_tag = TC_RE[3];
 on=((ontag == '1')?1:0);
 if(optag == 'p')
 {
 pwm_op(on, 80);
 }
 
 }
 
 
 }
 
 /*关闭设备文件句柄*/
 close(buttons_fd);
 return 0;
 }
 
 
 
 代码只复制了部分上来,调试过程中发现两个现象,第一个是如果注释掉ret = read(buttons_fd, key_value_temp, sizeof(key_value_temp));这句代码,短信来了串口就能读到数据。第二个就是短信来了串口没反应,但是一按下按键串口立即就能收到数据。驱动是TQ已经做好了的,这里主要是做的一些应用程序。望论坛前辈给点解决办法,谢谢。
 
 
 
 | 
 |