|
悬赏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已经做好了的,这里主要是做的一些应用程序。望论坛前辈给点解决办法,谢谢。
|
|