5287|4

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助RTX环境下串口通信的问题 [复制链接]

小弟最近开始学习Ardence RTX,有很多不懂得地方,下面是一个基于serialAPI.h开发驱动的RTX通信串口测试程序。主线程是读数据,次线程是写数据。经过两次测试:
1.在单台计算机上用串口线连接COM1和COM2,并在RTX环境下将其打开,将下面次线程中写函数的COM1参数改成COM2,向COM2写函数成功,但主线程确无法从COM1的inbuffer中读到数据。
2.分别连接两台计算机的COM1,直接用下面的程序测试,经过测试,向COM1写函数成功,但在另一台计算机上读COM1的inbuffer还是无法读出数据。

现在很费解,既然串口线已经直连,写数据也已经成功,为什么在接收缓存一端无法读出数据呢,请各位大侠指点指点。

#include  "12.h"
#include "serialAPI.h"

main()
{
        WORD        rc;
           WORD  idx;
        WORD        bytesSent;
           WORD  bytesRead;
        WORD        len;
           BYTE  inBuffer[1024];
        BOOL GO = TRUE;
           DWORD threadId;
           WORD  totalCount = 0;
        HANDLE         hWriteCom;
   
        rc = RtOpenComPort( (BYTE)COM1, 0,0,0,0 );
        if( rc )
        {
                printf("failed to open com port. error = %d\n", rc );
                exit(0);
        }
       
        printf( "Com port opened\n");
       
        //---------------------------------------
        // full duplex test
        //---------------------------------------
       
        hWriteCom = CreateThread (NULL,0,ComWrite,NULL,0,&threadId );
       
        while ( GO )                          
        {
                rc = RtGetComBufferCount( COM1 );
               
               
                        Sleep(100);
               
               
               
                        if(RtReadComPort ( COM2, inBuffer, rc, &bytesRead )==0)
                                printf("success");
                        totalCount += bytesRead;
                        inBuffer[bytesRead] = 0;
                        printf("%s...%d bytes\n",inBuffer,bytesRead );
               
                if ( totalCount >= 585 )
                {
                        GO = FALSE;
                }
        }
   //  printf("test program ended.....");
        RtCloseComPort( COM1 );
}


int RTFCNDCL   ComWrite( PVOID junk )
//--------------------------------------------
// Thread to write to COM port
//--------------------------------------------
{
        WORD  len;
        WORD  rc;
        WORD  bytesSent;
        BYTE  outbuffer[1024]={"HELLO\n"};
        BOOL GO = TRUE;
        printf("entering xmit thread\n");   
        while( GO )
        {
                len = strlen ( outbuffer );
                printf("writing %d characters\n",len );
               
                if(RtWriteComPort ( COM1,outbuffer, len, &bytesSent )==0)
                //         printf("success");
        
                Sleep ( 1000 );
        }
}



最新回复

我认为 if(RtReadComPort ( COM2, inBuffer, rc, &bytesRead )==0) COM2应改写为COM1   详情 回复 发表于 2010-5-10 09:58
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
将下面次线程中写函数的COM1参数改成COM2,向COM2写函数成功,但主线程确无法从COM1的inbuffer中读到数据。

=======================
不太明白为什么要这么做?

如果发送向COM2发了,那么接收是否也应该是接收COM2的呢
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
是同一台计算机的COM1和COM2,我自己用串口先把他们连起来,在把它们在RTX环境下注册前,我在windows环境下用串口调试助手测过,通信没有问题。这样,向COM2写数据,自然应该从用串口线相连COM1接收啊。
引用 1 楼 rzsheng 的回复:
将下面次线程中写函数的COM1参数改成COM2,向COM2写函数成功,但主线程确无法从COM1的inbuffer中读到数据。

=======================
不太明白为什么要这么做?

如果发送向COM2发了,那么接收是否也应该是接收COM2的呢
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
帮顶下。MARK.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
我认为
if(RtReadComPort ( COM2, inBuffer, rc, &bytesRead )==0)
COM2应改写为COM1
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表