|
我自己写了个程序,在arm端运行,主要是在arm端测试读写,代码如下:
/*
*实现开发板与宿主机的串口通信
*宿主机实现写,开发板读
*步骤:
1.打开串口
2.设置串口参数
3.读写串口(包括宿主机和开发板)
*/
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/stat.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>
#include "open_port_arm9.c"
#include "set_port_config.c"
#define BUFFER_SIZE 5 /*最大缓冲区*/
#define TARGET_COM_PROT 1 /*用n表示目标机上的串口n*/
int main(int argc,char* argv[]){
//打开串口设备
int fd;
char buff[BUFFER_SIZE];
if(fd = open_port(TARGET_COM_PROT) < 0){
perror("open_port");
return -1;
}
if(set_port_config(fd,2400,8,'N',1) < 0){
perror("set_port_config");
return -1;
}
printf("open success\n");
do{
memset(buff,0,BUFFER_SIZE);
if(write(fd,"1",BUFFER_SIZE) == -1){
printf("write");
break;
}
sleep(1);
printf("\n-----------------------\n");
int ret = 0;
if(ret = read(fd,buff,BUFFER_SIZE) > 0){
puts(buff);
printf("\n");
printf("%d\n",ret);
strcat(buff,"-arm");
printf("words are:%s\n",buff);
fflush(stdout);
}else{
printf("wrong");
}
}while(strncmp(buff,"quit",4));
close(fd);
return 0;
}
但是却出现了很奇怪的问题,我用ret接收read过来的字符,但是printf之后,却发现每次的显示都为1,但是却没有在开发板里面的终端显示出来(我用交叉编译器在pc端编译好,然后放到板子里,用板子里配置好的终端运行,却发现没输出这个字符),但是我输入有5个字符,它却每次显示都只有一个字符。
输出结果如下:
open success
nihao--------------------------------
1
-armds are:
nihao-------------------------------
1
-armds are:
格式全乱了,不知道为什么,而且加入我在write处,传过去的就是一个1字符,它的结果就更奇怪了,其他都跟上面输出结果一样,就是nihao那边变成了1w,无缘无故多了个w,实在不能理解为什么会这样。请那位有耐心的朋友仔细帮我分析一下,看看问题出在哪里? |
|