ho il seguente programma C:lettura dalla porta seriale fallisce
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
int main()
{
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK);
if(fd < 0)
{
perror("Could not open device");
}
printf("Device opened\n");
struct termios options;
tcgetattr(fd, &options);
cfmakeraw(&options);
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
tcsetattr(fd, TCSANOW, &options);
char txpacket[] = {0x23, 0x06, 0x00, 0x00, 0xdd, 0xf9};
ssize_t written = write(fd, txpacket, sizeof(txpacket));
printf("Written %d bytes\n", written);
printf("Starting to wait for target to respond\n");
while(1)
{
fd_set readset;
FD_ZERO(&readset);
FD_SET(fd, &readset);
int nCount = select(fd + 1, &readset, NULL, NULL, NULL);
if(nCount > 0)
{
if(FD_ISSET(fd, &readset))
{
int i;
char buffer[128];
ssize_t bytesread = read(fd, buffer, sizeof(buffer));
printf("Received %d bytes\n", bytesread);
for(i = 0; i < bytesread; i++)
{
printf(" %02x", buffer[i]);
}
}
}
}
}
Questo programma apre il dispositivo seriale/dev/ttyS0, scrive una sequenza di dati ad esso e si mette in ascolto di una risposta. Ottengo il seguente risultato:
Device opened
Written 6 bytes
Starting to wait for target to respond
Received 0 bytes
Received 0 bytes
Received 0 bytes
Received 0 bytes
Received 0 bytes
Received 0 bytes
...
E l'applicazione consuma CPU al 100%. Non sono in grado di ricevere alcun dato, anche se l'hardware di destinazione effettivamente lo trasmette.
Cosa c'è che non va?
Grazie! Questo era davvero ciò che stava causando il problema. – anorm
Dannazione, non ho visto la cosa di CLOCAL! – shodanex
Aveva lo stesso problema, grazie per il suggerimento. Non sapevo che cfmakeraw non avrebbe visto quelle due bandiere evidenti. – RishiD