Как данные UDP могут передаваться через RS232 в ANSI C? - PullRequest
0 голосов
/ 20 мая 2010

Я хочу передавать и получать данные по RS232, используя UDP, и я хочу знать о методах, которые позволяют мне передавать и получать данные с более высокой скоростью, а также без потери данных?

Спасибо заранее. Я пытался, но по возможности нуждаюсь в улучшениях

 #include <stdio.h>
 #include <dos.h>
 #include<string.h>
 #include<conio.h>
 #include<iostream.h>
 #include<stdlib.h>

 #define PORT1 0x3f8

 void main()
 {
int c,ch,choice,i,a=0;
char filename[30],filename2[30],buf;
FILE *in,*out;
clrscr();
while(1){
outportb(PORT1+0,0x03);
outportb(PORT1+1,0);
outportb(PORT1+3,0x03);
outportb(PORT1+2,0xc7);
outportb(PORT1+4,0x0b);
cout<<"\n===============================================================";
cout<<"\n\t*****Serial Communication By BADR-U-ZAMAN******\nCommunication between two computers By serial port";
cout<<"\nPlease select\n[1]\tFor sending file \n[2]\tFor receiving file \n[3]\tTo exit\n";
cout<<"=================================================================\n";

cin>>choice;
if(choice==1)
{
    strcpy(filename,"C:\\TC\\BIN\\badr.cpp");
    cout<<filename;
    for(i=0;i<=strlen(filename);i++)
        outportb(PORT1,filename[i]);
    in=fopen(filename,"r");
    if (in==NULL)
    {       cout<<"cannot open a file";
         a=1;
    }
    if(a!=1)
    cout<<"\n\nFile sending.....\n\n";
    while(!feof(in))
    {
        buf=fgetc(in);
        cout<<buf;
        outportb(PORT1,buf);
        delay(5);
    }
}
else
{
    if(choice==3)
    exit(0);
    i=0;
    buf='a';
    while(buf!=NULL)
    {
        c=inportb(PORT1+5);
        if(c&1)
        {
            buf=inportb(PORT1);
            filename2[i]=buf;
            i++;
        }
    }
    out=fopen(filename2,"t");
    cout<<"\n Filename received:"<<filename[2];
    cout<<"\nReading from the port...";
    cout<<"writing to file"<<filename2;
    do
    {
        c=inportb(PORT1+5);
        if(c&1)
        {
        buf=inportb(PORT1);
        cout<<buf;
        fputc(buf,out);
        delay(5);
        }
        if(kbhit())
        {
        ch=getch();
        }
    }while(ch!=27);
}
 getch();
 }
 }

1 Ответ

1 голос
/ 20 мая 2010

Помните, что многие операционные системы блокируют прямой доступ к портам. Вы должны написать специальный драйвер для доступа к ним.

Если вы можете управлять выводами порта RS232 напрямую, вы можете настроить скорость программно . В большинстве случаев RS232 управляется UART (или USART). Это устройство также контролирует скорость (скорость серийной съемки). Скорость передачи ограничена этим устройством. Например, если максимальная поддерживаемая скорость UART составляет 9600 бит / с, ваша программа не сможет передавать данные быстрее.

Вы захотите оптимизировать свою программу, чтобы передавать как можно больше контента за транзакцию ввода / вывода. Это наиболее эффективное использование канала связи. Распространенным методом передачи является наличие одного потока, который передает данные из буфера. Основной поток форматирует данные в буфер, а затем сигнализирует о начале передачи. Это похоже на использование контроллера DMA. Также проверьте, есть ли у вашего контроллера порта возможности блоковых данных, которые делают вашу программу более эффективной.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...