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

 

    写串口的程序的缓冲问题
    作者:tony001 时间:2008-9-11 14:00:41

    int tsend (int fd)
    {bbs.cedn.cn" t) B+ p/ @4 a1 Y
    char *p[ ]={ "11","22","33","44","55"};
    int i;- D: C4 {& H1 b9 F7 @
    ioctl(fd,FIOSETOPTIONS,OPT_RAW);bbs.cedn.cn3 n- `$ P! b9 ?. B
    for(i=0;i<5;I++)
    {
    ioctl(fd,FIOFLUSH,0);
    write( fd,*p,3)5 s" g+ b0 t7 M0 B% W* K" a
    printf("n");
    (*p)++;bbs.cedn.cn, n6 Y `( J; {% j3 `$ ^0 O' F
    }
    }
    X5 c: n9 k7 g! G
    void serimain( )
    {
    int fd=open("/tyCo/0",O_RDWR,0);
    ioctl( fd,FIOBAUDRATE,9600);
    taskSpawn("send",160,VX_FP_TASK,1024,fd,0,0,0,0,0,0,0,0,0);* F5 ]+ ~! j e; R7 E; c8 F: _# h
    }
    想把11,22,33,44,55依次写到串口,因为定义的是字符串所以加上有3个字符,所以在write用了参数3,然后在每次写串口时都清理了缓存,但是输出却是# O/ }

    11

    1

    22

    22

    ....

    似乎缓存根本没有清除,这是怎么回事?
    另外如果我想向串口写的是16进制数,那么应该怎么写?其实我写11就是当16进制数的。还有一个问题,当设置BAUDRATE为115200之后,如果在后面加上报错语句,会显示设置不成功,也就是没法把波特率设为115200,实际上试过比38600大就会设置错误了,这个怎么解决?
    请教!



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



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