init, lire et écrire pour linux périphérique série avec C

Je suis en train de travailler sur un nouveau projet où je veux faire une connexion avec un FTDI qui est connecté à ma machine debian. J'ai l'intention d'écrire le code du C, pas du C++. Ici se trouve mon problème. Tous les exemples que je trouve sont incomplètes ou un compilateur c++ au lieu de le compilateur GCC.

L'objectif est d'en parler à mon microcontrôleur qui est connecté à la FTDI. Pour le débogage, je veux commencer la construction d'une application linux qui est en mesure de:

  • initialiser une connexion série au démarrage sur ttyUSB1
  • envoyer une chaîne de caractères
  • afficher les chaînes de caractères lorsqu'ils sont reçus par le pc
  • enregistrer la communication à un .fichier txt

Est il un exemple de code ou un tutoriel pour faire cela?

Si je réussis, je vais defenetly placer le code ici, de sorte que les nouveaux utilisateurs peuvent l'utiliser à!

Edit:

Comme je l'ai dit je poste le code si je l'avais, et c'est ce qui a fonctionné pour moi:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#define MODEM "/dev/ttyUSB0"
#define BAUDRATE B115200    
int main(int argc,char** argv)
{   
struct termios tio;
struct termios stdio;
struct termios old_stdio;
int tty_fd, flags;
unsigned char c='D';
tcgetattr(STDOUT_FILENO,&old_stdio);
printf("Please start with %s /dev/ttyS1 (for example)\n",argv[0]);
memset(&stdio,0,sizeof(stdio));
stdio.c_iflag=0;
stdio.c_oflag=0;
stdio.c_cflag=0;
stdio.c_lflag=0;
stdio.c_cc[VMIN]=1;
stdio.c_cc[VTIME]=0;
tcsetattr(STDOUT_FILENO,TCSANOW,&stdio);
tcsetattr(STDOUT_FILENO,TCSAFLUSH,&stdio);
fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);       //make the reads non-blocking
memset(&tio,0,sizeof(tio));
tio.c_iflag=0;
tio.c_oflag=0;
tio.c_cflag=CS8|CREAD|CLOCAL;           //8n1, see termios.h for more information
tio.c_lflag=0;
tio.c_cc[VMIN]=1;
tio.c_cc[VTIME]=5;
if((tty_fd = open(MODEM , O_RDWR | O_NONBLOCK)) == -1){
printf("Error while opening\n"); //Just if you want user interface error control
return -1;
}
cfsetospeed(&tio,BAUDRATE);    
cfsetispeed(&tio,BAUDRATE);            //baudrate is declarated above
tcsetattr(tty_fd,TCSANOW,&tio);
while (c!='q'){
if (read(tty_fd,&c,1)>0){
write(STDOUT_FILENO,&c,1); //if new data is available on the serial port, print it out
printf("\n");
}
if (read(STDIN_FILENO,&c,1)>0){
write(tty_fd,&c,1);//if new data is available on the console, send it to serial port
printf("\n");
}
}
close(tty_fd);
tcsetattr(STDOUT_FILENO,TCSANOW,&old_stdio);
return EXIT_SUCCESS;
}

La plupart du code est venu de http://en.wikibooks.org/wiki/Serial_Programming/Serial_Linux mais j'ai aussi utilisé un peu le code affiché ci-dessous.

Il y a même un howto sympa dédié à ce sujet.
avez-vous vérifier cette question stackoverflow.com/questions/2982552/...
Quel est le problème avec minicom?
Bonne question, plus tard je veux reconstruire le programme à se connecter et exécuter des commandes sans avoir de moi derrière le pc donc, ce concept est que le début.
Je vois le point. Eh bien, vous pouvez au moins regarder minicom code source (alioth.debian.org/frs/...). Il est open source et écrit en C, également largement utilisé depuis de nombreuses années, donc je suis sûr qu'il ya beaucoup de choses à la réutilisation de l'apprendre.

OriginalL'auteur Embed | 2013-10-17