gcc-linux baudrate ändern

Gast #1621130
moinmoin....

beschäftige mich seit ein paar tagen mit com-ports unter linux...
hab mir scho n wolf gegoogelt... ich finde meinen fehler nicht der 
compiler gibt nur n warning wegen der "alten" string deklerationen 
ansonsten nciht also kurz gesagt alles funktioniert nur leider kann ich 
die baudrate nicht verändern sie läuft immer auf 9600 soll aber in 
diesem fall höher werden...

hier der code:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <iostream>
//include <sys/wait.h>

#define RXBUFFERSIZE 254

int  comdesk;
char rxBuffer[RXBUFFERSIZE];

int initUart(char *portdesk,double baud,char *format)
{
   struct termios options;
   // Get the current options for the port...
   tcgetattr(comdesk, &options);
   // Set the baud rate...
   cfsetispeed(&options, B115200);
   cfsetospeed(&options, B115200);
   // Enable the receiver and set local mode(8N1)...
   options.c_cflag |= (CLOCAL | CREAD);
   options.c_cflag &= ~PARENB;
   options.c_cflag &= ~CSTOPB;
   options.c_cflag &= ~CSIZE;
   options.c_cflag |= CS8;
   // Set the new options for the port...
   tcsetattr(comdesk, TCSANOW, &options);
   // Open Com Port
   comdesk = open(portdesk, O_RDWR | O_NOCTTY | O_NDELAY);
   if (comdesk == -1)
   {
      perror("open_port: Unable to open /dev/ttyS0 - ");
   }
   else
   {
      fcntl(comdesk, F_SETFL, FNDELAY);
   }
   return (comdesk);
   //close(comdesk);
}

int uartRD(void)
{
   int in = read(comdesk, rxBuffer, RXBUFFERSIZE);
   rxBuffer[in] = 0x00;
   printf("data:%s\n", rxBuffer);
}

int uartWR(void)
{
   printf("write...\n", rxBuffer);
   write(comdesk, "Hallo Welt !!!", 14);
}

int main(void)
{
   initUart("/dev/ttyS1",B115200,"8N1");
   while(1)
   {
      uartRD();
      usleep(50000);
      uartWR();
   }
   return 0;
}

währe dankbar für jede form von hilfe
mfg fugitivus
Gast #1621146
Ohne jetzt genauer analysiert zu haben:

comdesk ist der Filehandler fuer die Schnittstelle. Diese bekommt aber 
Ihren Wert erst bei
   comdesk = open(portdesk, O_RDWR | O_NOCTTY | O_NDELAY);
zugewiesen. Demzufolge kann
   tcgetattr(comdesk, &options);
   // Set the baud rate...
   cfsetispeed(&options, B115200);
   cfsetospeed(&options, B115200);
noch gar nicht wissen, um welchen Filehandler es sich handelt.

Gast
Gast #1621157
Wie schon geschrubt:
>    tcgetattr(comdesk, &options);
..mach nichts anständiges nicht, weil comdesk noch uninitialisiert ist 
(kuckst Du manpage, da steht das drin dass das initilisiert sein muss - 
ergo die Reihenfolge in init..() umdrehen: erst öffnen (versuchen), dann 
Werte holen, dann Werte setzen, falls alles(!) erfolgreich war den 
Dekriptor zurückgeben, sonst wieder schließen und Fehler melden).

Abgesehen davon wäre es zweckmäßig die Rückgabewerte der Funktionen 
auszuwerten.. die sind nämlich extra dafür da um Fehler zu erkennen ;-)

HTH

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.