Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - Linux/Unix ::  Serielle Schnittstelle ansprechen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
noc
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.06.2002
Beiträge: 7
Beitrag noc Mitglied 18:57:00 03.06.2002   Titel:   Serielle Schnittstelle ansprechen            Zitieren

Hallo,
ich möchte im Rahmen einer Projktarbeit die serielle Schnittstelle unter Linux mit Hilfe von Ansi C ansprechen (Daten einlesen). Leider habe ich keine Ahnung wie ich das anstellen soll. Kennt jemand vielleicht ein Tutorial oder Dokumentation im Netz über dieses Thema?

[edit]Thema für die FAQ angepasst[/edit]

[ Dieser Beitrag wurde am 25.09.2002 um 23:00 Uhr von kingruedi editiert. ]
Werbeunterbrechung
worst_case
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2001
Beiträge: 329
Beitrag worst_case Mitglied 20:20:00 03.06.2002   Titel:              Zitieren

hi,

ich habe viele infos von hier :
http://www.easysw.com/%7Emike/serial/serial.html
http://www.stokely.com/unix.serial.port.resources/index.html

hoffe es hilft

[ Dieser Beitrag wurde am 03.06.2002 um 20:20 Uhr von worst_case editiert. ]

_________________
worst_case
Unix-Tom
Moderator

Benutzerprofil
Anmeldungsdatum: 18.07.2000
Beiträge: 10398
Beitrag Unix-Tom Moderator 11:51:00 04.06.2002   Titel:              Zitieren

Im Grunde öffnest du aber nur den SerPort wie eine Datei und schreibst drauf wie in eine Datei.

_________________
Moderator für MFC, Linux, C# - NET und Datenbanken
Björn
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2000
Beiträge: 10
Beitrag Björn Mitglied 21:32:00 06.06.2002   Titel:              Zitieren

In den HowTo's gibts auch was:

/usr/share/doc/HOWTO/HTML/en/Serial-Programming-HOWTO.html

BjörnP
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 22822
Beitrag rüdiger Moderator 21:34:00 06.06.2002   Titel:              Zitieren

libserial - eine fertige Bibliothek für die Serielleschnittstelle

Serial Programming HOWTO
IO Port Programming HOWTO
Serial HOWTO
Serial Programming Guide for POSIX Compliant Operating Systems

Beispiel: (25.7.2002)
Ein Code von <Martin> aus seinem Buch "C und Linux"

ISBN:3446224270

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
    terminal.c - Ein- und Ausgabe ueber die serielle
                 Schnittstelle
*/


# include
<stdio.h>
# include
<unistd.h>
# include
<fcntl.h>
# include
<termios.h>

# define
TERM_DEVICE "/dev/ttyS0"   /* = COM1 */
# define
TERM_SPEED B19200      /* Bit/Sek */

int main()
 {
  int fd, old_flags;
  ssize_t length;
  char buffer[16];
  struct termios term_attr;
  fd_set input_fdset;

  if ((fd = open(TERM_DEVICE, O_RDWR)) == -1)
   {
    perror("terminal: Can't open device " TERM_DEVICE);
    return(1);
   }
            /* RS232 konfigurieren */
  if (tcgetattr(fd, &term_attr) != 0)
   {
    perror("terminal: tcgetattr() failed");
    return(1);
   }
  term_attr.c_cflag = TERM_SPEED | CS8 | CRTSCTS | CLOCAL;
  term_attr.c_iflag = 0;
  term_attr.c_oflag = OPOST | ONLCR;
  term_attr.c_lflag = 0;
  if (tcsetattr(fd, TCSAFLUSH, &term_attr) != 0)
    perror("terminal: tcsetattr() failed");

            /* Std.-Eingabe anpassen */
  if (tcgetattr(STDIN_FILENO, &term_attr) != 0)
   {
    perror("terminal: tcgetattr() failed");
    return(1);
   }
            /* alte Einst. sichern */
  old_flags = term_attr.c_lflag;
  term_attr.c_lflag &= ~(ICANON | ECHO);
  if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
    perror("terminal: tcsetattr() failed");

  while (1)
   {
    FD_ZERO(&input_fdset);
    FD_SET(STDIN_FILENO, &input_fdset);
    FD_SET(fd, &input_fdset);
    if (select(fd+1, &input_fdset, NULL, NULL, NULL) == -1)
      perror("terminal: select() failed");
    if (FD_ISSET(STDIN_FILENO, &input_fdset))
     {
      if ((length = read(STDIN_FILENO, buffer, 16)) == -1)
        perror("terminal: read() failed");
      else
        if
(buffer[0] == '\33')  /* Abbruch mit ESC */
      break;
    else
          write(fd, buffer, length);
     }
    if (FD_ISSET(fd, &input_fdset))
     {
      if ((length = read(fd, buffer, 16)) == -1)
        perror("terminal: read() failed");
      else
        write(STDOUT_FILENO, buffer, length);
     }
   }
            /* Std.-Eingabe wie vorher */
  term_attr.c_lflag = old_flags;
  if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
    perror("terminal: tcsetattr() failed");

  printf("Aborted.\n");
  close(fd);
  return(0);
 }  
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
terminal.c - Ein- und Ausgabe ueber die serielle
Schnittstelle
*/


# include
<stdio.h>
# include
<unistd.h>
# include
<fcntl.h>
# include
<termios.h>

# define
TERM_DEVICE "/dev/ttyS0" /* = COM1 */
# define
TERM_SPEED B19200 /* Bit/Sek */

int main()
{
int fd, old_flags;
ssize_t length;
char buffer[16];
struct termios term_attr;
fd_set input_fdset;

if ((fd = open(TERM_DEVICE, O_RDWR)) == -1)
{
perror("terminal: Can't open device " TERM_DEVICE);
return(1);
}
/* RS232 konfigurieren */
if (tcgetattr(fd, &term_attr) != 0)
{
perror("terminal: tcgetattr() failed");
return(1);
}
term_attr.c_cflag = TERM_SPEED | CS8 | CRTSCTS | CLOCAL;
term_attr.c_iflag = 0;
term_attr.c_oflag = OPOST | ONLCR;
term_attr.c_lflag = 0;
if (tcsetattr(fd, TCSAFLUSH, &term_attr) != 0)
perror("terminal: tcsetattr() failed");

/* Std.-Eingabe anpassen */
if (tcgetattr(STDIN_FILENO, &term_attr) != 0)
{
perror("terminal: tcgetattr() failed");
return(1);
}
/* alte Einst. sichern */
old_flags = term_attr.c_lflag;
term_attr.c_lflag &= ~(ICANON | ECHO);
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
perror("terminal: tcsetattr() failed");

while (1)
{
FD_ZERO(&input_fdset);
FD_SET(STDIN_FILENO, &input_fdset);
FD_SET(fd, &input_fdset);
if (select(fd+1, &input_fdset, NULL, NULL, NULL) == -1)
perror("terminal: select() failed");
if (FD_ISSET(STDIN_FILENO, &input_fdset))
{
if ((length = read(STDIN_FILENO, buffer, 16)) == -1)
perror("terminal: read() failed");
else
if
(buffer[0] == '\33') /* Abbruch mit ESC */
break;
else
write(fd, buffer, length);
}
if (FD_ISSET(fd, &input_fdset))
{
if ((length = read(fd, buffer, 16)) == -1)
perror("terminal: read() failed");
else
write(STDOUT_FILENO, buffer, length);
}
}
/* Std.-Eingabe wie vorher */
term_attr.c_lflag = old_flags;
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
perror("terminal: tcsetattr() failed");

printf("Aborted.\n");
close(fd);
return(0);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
    terminal.c - Ein- und Ausgabe ueber die serielle
                 Schnittstelle
*/


# include
<stdio.h>
# include
<unistd.h>
# include
<fcntl.h>
# include
<termios.h>

# define
TERM_DEVICE "/dev/ttyS0"   /* = COM1 */
# define
TERM_SPEED B19200      /* Bit/Sek */

int main()
 {
  int fd, old_flags;
  ssize_t length;
  char buffer[16];
  struct termios term_attr;
  fd_set input_fdset;

  if ((fd = open(TERM_DEVICE, O_RDWR)) == -1)
   {
    perror("terminal: Can't open device " TERM_DEVICE);
    return(1);
   }
            /* RS232 konfigurieren */
  if (tcgetattr(fd, &term_attr) != 0)
   {
    perror("terminal: tcgetattr() failed");
    return(1);
   }
  term_attr.c_cflag = TERM_SPEED | CS8 | CRTSCTS | CLOCAL;
  term_attr.c_iflag = 0;
  term_attr.c_oflag = OPOST | ONLCR;
  term_attr.c_lflag = 0;
  if (tcsetattr(fd, TCSAFLUSH, &term_attr) != 0)
    perror("terminal: tcsetattr() failed");

            /* Std.-Eingabe anpassen */
  if (tcgetattr(STDIN_FILENO, &term_attr) != 0)
   {
    perror("terminal: tcgetattr() failed");
    return(1);
   }
            /* alte Einst. sichern */
  old_flags = term_attr.c_lflag;
  term_attr.c_lflag &= ~(ICANON | ECHO);
  if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
    perror("terminal: tcsetattr() failed");

  while (1)
   {
    FD_ZERO(&input_fdset);
    FD_SET(STDIN_FILENO, &input_fdset);
    FD_SET(fd, &input_fdset);
    if (select(fd+1, &input_fdset, NULL, NULL, NULL) == -1)
      perror("terminal: select() failed");
    if (FD_ISSET(STDIN_FILENO, &input_fdset))
     {
      if ((length = read(STDIN_FILENO, buffer, 16)) == -1)
        perror("terminal: read() failed");
      else
        if
(buffer[0] == '\33')  /* Abbruch mit ESC */
      break;
    else
          write(fd, buffer, length);
     }
    if (FD_ISSET(fd, &input_fdset))
     {
      if ((length = read(fd, buffer, 16)) == -1)
        perror("terminal: read() failed");
      else
        write(STDOUT_FILENO, buffer, length);
     }
   }
            /* Std.-Eingabe wie vorher */
  term_attr.c_lflag = old_flags;
  if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
    perror("terminal: tcsetattr() failed");

  printf("Aborted.\n");
  close(fd);
  return(0);
 }  

_________________
.


Zuletzt bearbeitet von rüdiger am 17:30:18 16.03.2009, insgesamt 3-mal bearbeitet
C/C++ Forum :: FAQ - Linux/Unix ::  Serielle Schnittstelle ansprechen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.