导 航┆主 站┆文 章┆资 料┆下 载┆美 食┆读 书┆笑 话┆博 客┆论 坛
>> Tony嵌入式开发论坛静态版首页
查看完全版本:Tony嵌入式开发论坛

 

    问点串口方面的问题
    作者:tearring 时间:2008-3-28 22:37:13

    现在有个设备是USB转串口的

    驱动是在vxworks提供的unsupported的usbAcm类驱动基础上完成的

    目前应用上有需要连续写较大容量数据的要求

    现在是把待发数据分批连续write(fd,buff,nBytes)

    有几个问题:

    1、write调用tyWrite是会阻塞的吧?阻塞的原因是rng环形缓冲区满而导致的吧?

    2、write失败的话返回实际写的字节数 不等于 指定要写的字节数

    这一般是在什么情况下会发生?

    3、常用select的读文件描述符集来监听设备,但我自己没用过写描述符集,想问一下select能用在串口发送数据上吗?

    4、连续写串口,每次写串口缓冲区大小的数据,有什么防错机制吗?我不是很懂啊

    比如2发生了,我改如何处理?

    5、ioctl的FIONWRITE是什么意思呢?

    问了这么多,就是想请大大给个连续写串口的考虑周全的思路啊

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------


    作者:tearring 时间:2008-3-31 12:15:00

    以下是引用MyForever在2008-3-31 8:48:33的发言:

    do 循环里面加个延时比较好

    总得让出点时间给写操作吧

    谢谢BZ

    [em01]

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------


    作者:MyForever 时间:2008-3-31 8:48:33

    do 循环里面加个延时比较好

    总得让出点时间给写操作吧

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------


    作者:tearring 时间:2008-3-29 20:48:52

    vxworks的demo理有个这个文件pkLib.c

    /* wait for i/o to complete */

    if (call == 0)
    {
    do
    {
    taskDelay (sysClkRateGet() / 4);
    (void) ioctl (loopFd, FIONWRITE, (int) (&mule)); /* wait for out */
    } while (mule != 0);

    我能这样处理吗?

    for()
    {
    write(fd,buff,len);
    do{
    ioctl(fd,FIONWRITE,(int)&m);
    }while(m!=0);
    }

    不知这样可行不啊?

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------



查看完全版本:Tony嵌入式开发论坛
Copyright 2006-2008 Cevx.Com Cevx.Net 制作 版权所有
网友发帖仅代表个人观点,与本论坛立场无关