
关于VC++串口编程问题
在看别人写的串口通信程序中,有这样一个函数boolSerialPort::send(constchar*sendBuf,constintbytesToSend,unsig...
在看别人写的串口通信程序中,有这样一个函数
bool SerialPort::send(const char * sendBuf,const int bytesToSend,unsigned long &bytesSend)
{
//获取调试信息句柄
DebugInfo * debugInfo = DebugInfo::getInstance();
//检测串口状态
if( hCom != INVALID_HANDLE_VALUE )
{
//写入数据
if( !WriteFile(hCom,sendBuf,bytesToSend,&bytesSend,NULL) )
{
debugInfo->print("不能写入数据\n");
return false;
}
return true;
}
debugInfo->print("串口没打开,不能发送数据\n");
return false;
}
关于该函数
参数:sendBuf:发送缓冲区; bytesToSend:要发送字节数; bytesSend: 实际发送字节数
我有一些问题不明白,为什么send函数的参数中,要bytesToSend和bytesSend,只要一个不行吗?
另外,我想知道什么是输入、输出缓冲区?
跪求高手回答,谢谢 展开
bool SerialPort::send(const char * sendBuf,const int bytesToSend,unsigned long &bytesSend)
{
//获取调试信息句柄
DebugInfo * debugInfo = DebugInfo::getInstance();
//检测串口状态
if( hCom != INVALID_HANDLE_VALUE )
{
//写入数据
if( !WriteFile(hCom,sendBuf,bytesToSend,&bytesSend,NULL) )
{
debugInfo->print("不能写入数据\n");
return false;
}
return true;
}
debugInfo->print("串口没打开,不能发送数据\n");
return false;
}
关于该函数
参数:sendBuf:发送缓冲区; bytesToSend:要发送字节数; bytesSend: 实际发送字节数
我有一些问题不明白,为什么send函数的参数中,要bytesToSend和bytesSend,只要一个不行吗?
另外,我想知道什么是输入、输出缓冲区?
跪求高手回答,谢谢 展开
展开全部
参数bytesToSend用来控制你要发送多少个字节,是函数WriteFile()的输入参数。而bytesSend是本次调用实际上发送了多少个字节,是函数的输出参数;你可以不关心这个参数,但别的应用可能会关心到这个参数……比如, bytesToSend为80时,由bytesSend返回了60,那么就可以通过对bytesSend的判断来确定剩下的20字节是重发呢还是放弃呢?这就用到了bytesSend。所以bytesSend前才用&传地址,否则传值是带不回来它的即时值的。
输入输出缓冲区是与输入输出接口绑定的在内存中开辟的一个空间段。我们发送的数据并没有直接送进那个输出端口,而是放在了与那个端口绑定的输出缓冲区中;输出接口有一种机制就是发现自己的输出缓冲区中有新的数据了,就自动通过端口向外发送数据。同理,接收端口将收到的数据自动送到内存中与自己绑定的那个空间段,并向系统发出事件信息告知程序来读取接收缓冲区中的数据。
输入输出缓冲区是与输入输出接口绑定的在内存中开辟的一个空间段。我们发送的数据并没有直接送进那个输出端口,而是放在了与那个端口绑定的输出缓冲区中;输出接口有一种机制就是发现自己的输出缓冲区中有新的数据了,就自动通过端口向外发送数据。同理,接收端口将收到的数据自动送到内存中与自己绑定的那个空间段,并向系统发出事件信息告知程序来读取接收缓冲区中的数据。

2023-06-12 广告
STM32是一种32位的微控制器,由意法半导体(STMicroelectronics)公司设计和生产。STM32是一种非常常见的嵌入式系统芯片,广泛应用于物联网、汽车、工业控制、医疗设备等领域。STM32具有以下特点:1. 体积小巧:STM...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询