第3次发帖了。之前查过大量资料。至今还没有实现。
我有一个硬件设备,是通过串口来通讯的.我的C程序在ubuntu下面能正常读写串口。但是移到android模拟器下面或硬件板上面就不行了。
在linux下面C的函数open()返回的fd的3.移到android上返回的就是40了.再用minicom监控串口,发现串口并没有被占用,
也就是说我的模拟器open("/dev/ttyS0")是错的,不是我硬件的串口。那如果是没有打开串口,为什么fd会返回一个40.
另外在启动模拟器的时候是有带参数的 ./emulator -avd android2.3.3 -partition-size 1024 -radio /dev/ttyS0。int fd, socket = 0xff;
struct termios oldtio;
LOGD("start......");
if((fd = init_tty(&oldtio)) < 0)
{
LOGD("Can't find usb-to-serial port SAC!!!");
return -1;
}
LOGD("fd= %d\n",fd);
//if(send(fd, socket) < 1)return -1;
int nread;
char buff[512];
nread = read(fd,buff,512);
LOGD("nread = %d\n",nread);
//while (1) 
//{
while(nread > 0){
LOGD("nread= %d\n",nread);
LOGD("buff=%s\n", buff);
}上面是我调用的本地函数,串口的初始化在init里面。之前只能走到fd= 40,之后read的时候就死掉。在昨晚最后一次调试过后。依次走:
Start。
fd= 40
nread = 0
read返回0,表示没有数据。但是我想硬件设备发送指令的时候,这个read还是返回0,也就是根本没有读到它。
百撕不得骑姐。求各位大大帮帮看看。

解决方案 »

  1.   

    初始化没有问题,因为在单独在linux下能读到串口发来的数据。
      

  2.   

    chmod 777 /dev/ttyS0
    打开文件权限问题吗?
      

  3.   


    读写的权限已经在shell里设定过了。还是不行。。
      

  4.   

    这2天的测试,我怀疑问题出在2个地方,不知道对不对。
    1.模拟器里面的/dev/ttyS0是虚拟的文件.无法与pc的串口挂载.所以使用 emulator -avd android2.3.3 -partition-size 1024 -radio /dev/ttyS0
    是不行的。
    2.我把程序放到开发板上面的时候,发现我传进去的串口地址无法打开.串口地址我传的是个File.也就是File.canWrite()返回的是false.无法给权限.