天天看點

使用開發闆與虛拟機進行序列槽資料傳輸(檔案傳輸)

這裡我們設定開發闆為發送端,虛拟機或者電腦為接收端。(如果相反隻要改一下裝置名稱和一些傳輸的方式就行了)

除此之外就是如何編寫Makefile的一些問題,其餘有什麼問題可以咨詢QQ:2821072611,随時解答。

首先是開發闆即發送端:

#include <stdio.h>

#include <sys/types.h>

#include <fcntl.h>

#include <termios.h>

#include <stdlib.h>

#include <string.h>

#include<unistd.h>

#define BAUDRATE B9600

#define MODEMDEVICE "/dev/ttySAC0"//這裡根據開發闆的序列槽的接口設定

#define STOP '@'

#define MAX   128

int main(){

    //定義一些 終端結構體,線路狀态屬性的設定

    int fd,c=0,res;

    struct termios oldtio,newtio;

    char ch,s1[20];

    printf("start..\n");

    fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);

    if(fd<0)

    {

        perror(MODEMDEVICE);

        exit(1);

    }

    printf("open...\n");

    tcgetattr(fd,&oldtio);

    bzero(&newtio,sizeof(newtio));

    newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;

    newtio.c_iflag = IGNPAR;

    newtio.c_oflag = 0;

    newtio.c_lflag = ICANON;

    tcflush(fd,TCIFLUSH);

    tcsetattr(fd,TCSANOW,&newtio);

    printf("write...\n");

       int fi,fo;

       //打開這兩個檔案,如果沒有,那麼就建立檔案,fo是用來測試的檔案可以不用看

       fi = open("uartData.txt",O_RDWR|O_CREAT);

       fo = open("out.txt",O_RDWR|O_CREAT);

       char a[100];

       int i=0,size; 

       size = read(fi,a,100);

printf("%s",a);

       write(fd,a,size);//寫進序列槽

        write(fo,a,size);//可以不用看,我是看能否把緩沖區的資料寫入檔案中的

    printf("close..\n");

    close(fd);

    tcsetattr(fd,TCSANOW,&oldtio);

    return 0;

}

然後是虛拟機或者主機,我們設定為接收端:

#include<stdio.h>  

#include<sys/types.h>  

#include<fcntl.h>  

#include<termios.h>  

#include<stdlib.h>

#include<string.h>

#include<sys/stat.h>

#include<errno.h>

#define BAUDRATE B9600  //設定波特率

#define MODEMDEVICE "/dev/ttyS1"//這裡要看電腦上虛拟機的序列槽對應的計算機所連接配接的實體序列槽

int main()  

{  

    //定義一些序列槽檔案,中斷結構體,線路規程的設定,還有一些狀态屬性

    int fd,c=0,res;  

    struct termios oldtio,newtio;  

    char buf[256];  

    printf("start ...\n");  

    fd=open(MODEMDEVICE,O_RDWR | O_NOCTTY);  

    if(fd<0)  

    {  

      perror(MODEMDEVICE);  

      exit(1);  

    }  

    printf("open...\n");  

    tcgetattr(fd,&oldtio);  

    bzero(&newtio,sizeof(newtio));  

    newtio.c_cflag=BAUDRATE | CS8 | CLOCAL | CREAD;  

    newtio.c_iflag=IGNPAR;  

    newtio.c_oflag=0;  

    newtio.c_lflag=ICANON;  

    tcflush(fd,TCIFLUSH);  

    tcsetattr(fd,TCSANOW,&newtio);  

    printf("reading...\n");

int fo;

fo = open("/uartData.txt",O_CREAT|O_RDWR);//打開或者建立檔案

if(fo<0){perror("error!");}

char a[100];

while(1){

read(fd,a,1);//将序列槽中的資料寫入檔案中來

printf("%s",a);

write(fo,a,1);}

       printf("close...\n");  

       close(fd);  

       tcsetattr(fd,TCSANOW,&oldtio);  

       return 0;  

}