我在Mac OS X上使用BAFO bf-810 USB转串口适配器和pl2303驱动程序。我是该领域的初学者,因此获得了来自here的高级API,这是一个跨平台的API 。
我有两个程序,一个是写,一个是读。此API在代码中没有内置示例。因此,我必须查看其他API以获取必须完成的工作(例如,comOpen,comWrite等)。由于知识有限,我使用链接的API编写了以下小程序。
sendSerial.c
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include "rs232.h"
extern int errno;
int main(){
comEnumerate();
if(!comOpen(1, 9600)) printf("Cannot open the port\n");
while (1){
char data[1024] = "Hello World";
int ret = comWrite(1, data, 512);
printf("%d\n", ret);
if(ret>0){
printf("Bytes transferred!\n");
} else{
printf("%s\n", strerror(errno));
}
sleep(1);
}
return 0;
}
recSerial.c
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include "rs232.h"
extern int errno;
int main(){
comEnumerate();
if(!comOpen(1, 9600)) printf("Cannot open the port\n");
char read[1024] = "EMPTY";
printf("\nNow reading data at %s...\n",comGetPortName(1));
while (1){
printf(".\n");
if(comRead(1, read, 4)){
printf("Data: %s\n**\n", read);
}
sleep(1);
}
return 0;
}
source有一个C程序,可能对我可能缺少的内容有帮助。
问题
发送数据时,写入在第三次迭代后返回Resource temporarily unavailable
错误。 为什么这种情况一直发生?当我在接收器运行时重新启动发送器程序时,错误从第一次迭代开始。
在任何情况下,我都无法读取程序读取端的任何数据。我知道RS232是一个异步协议,但我读过一些地方,系统在数据被覆盖之前有大约4 Mb的缓冲区。所以第二个问题是,我是否必须手动处理时钟同步?
P.S。:对于环回测试,我在DB9连接器上连接了Send-Recieve,RTS-CTS和DTR-DSR。