200请教

thp 2004-04-19 04:00:35
我在写一张卡的驱动,卡接在COM口上,我往串口发送不同的指令,卡可以返回指令执行的结果,但要我主动去串口读取,那流程应该是:
1、发送指令到串口:int txWriteData(const char *Data,int nDataLen);//数据发送成功返回0,否则返回非零(-1)
2、从串口读取指令执行结果int txReadData(char *Buf);//这个函数一直读到数据才返回,返回实际读到的数据长度,数据保存在Buf里。

现在我要把这两个动作封装成一个函数:
int txRunCmd(const char* cData,int nDataLen,char *Buf)
{
if(txWriteData(cData,nDataLen)==0)
return txReadData(Buf);
return -1;
}
我想问的是上面这样子封装为什么老是不成功,也就是发指令后读不到想要的结果。

但是把txWriteData和txReadData放在不同的按钮里,然后先点击写数据,再点击读数据,就能读到正确的结果,为什么??
...全文
50 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yydy 2004-04-20
  • 打赏
  • 举报
回复
更正

在txWriteData这个函数,像端口OutPut数据后, sleep(1000) 然后再返回值 0 OR -1
yydy 2004-04-20
  • 打赏
  • 举报
回复
在txWriteData这个函数,取数据后, sleep(1000) 然后再返回值 0 OR -1
thp 2004-04-20
  • 打赏
  • 举报
回复
to: dacaifu(dacai) 你也许没注意这个说明:
2、从串口读取指令执行结果int txReadData(char *Buf);//这个函数一直读到数据才返回,返回实际读到的数据长度,数据保存在Buf里。
thp 2004-04-20
  • 打赏
  • 举报
回复
Sleep(1000)都有试了呢。
dacaifu 2004-04-20
  • 打赏
  • 举报
回复
if(txWriteData(cData,nDataLen)==0)
Sleep(100);
return txReadData(Buf);
试一试
我估计是你刚写进去,还没有来得及处理就去读,当然得不到结果
用两个按钮的花,点击时有延迟,所以能得到结果
thp 2004-04-20
  • 打赏
  • 举报
回复
再顶
thp 2004-04-19
  • 打赏
  • 举报
回复
顶。。。。。。。。。。。。。。。
thp 2004-04-19
  • 打赏
  • 举报
回复
或者说像这类操作应该怎么样设计程序才合理???

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧