Buongiorno a tutti, approfitto già per salutare tutti gli utenti del forum e per ringraziarvi di qualsiasi consiglio e correzione che mi possiate dare.
Sto realizzando un programma che deve comunicare contemporaneamente tramite una rs485 e riportare le risposte dei dispositivi ad un'applicazione web.
Per ora sono ancora ad un punto parecchio iniziale del programma, ho scritto la demonizzazione seguendo le indicazioni di alcuni siti e mi trovo davanti ad un problema veramente stupido che però non riesco ad identificare. il codice che ho copiato / scritto per ora è questo:
#include "stdio.h"
#include "string.h"
#include "unistd.h"
#include "fcntl.h"
#include "errno.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "stdlib.h"
#include "stdarg.h"
#include "termios.h"
#include "linux/serial.h"
#define TIOCSRS485 0x542F
//variabili generali
int i;
//indirizzi paline esadecimali
#define indirizzi [8] {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}
//CARATTERI SPECIALI
//apertura e chiusura della stringa verso palina
#define SYNC 0x7E
//separatore lato web
#define separatore ;
//apertura e chiusura stringa lato web
#define startEnd @
//COMANDI
//comando seriale polling RFID
#define CMD1 0x01
//comando seriale scrittura display
#define CMD2 0x02
//comando sblocco bicicletta
#define CMD3 0x03
//comando controllo caricabatteria
#define CMD4 0x04
int main(void) {
char txBuffer[10];
char rxBuffer[10];
int fd;
struct termios tty_attributes;
struct serial_rs485 rs485conf;
pid_t pid,sid;
char mexSeriale[66];
//DEMONIZZAZIONE
pid=fork();
if(pid<0)
{
exit(EXIT_FAILURE);
}else
{
if(pid>0)
{
exit(EXIT_SUCCESS);
}
}
umask(0);
sid=setsid();
if(sid<0)
{
exit(EXIT_FAILURE);
}
if((chdir("/"))<0)
{
exit(EXIT_FAILURE);
}
//INIZIO DEL LOOP INFINITO
while(1)
{
//CICLO CHE PASSA IN RASSEGNA UNO ALLA VOLTA TUTTI I TERMINALI COLLEGATI A PARTIRE DAL 0x01 FINO AL 0x08
for(i==0;i<=7;i++)
{
if ((fd = open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NONBLOCK))<0)
{
fprintf (stderr,"Open error on %s\n", strerror(errno));
exit(EXIT_FAILURE);
}else
{
//imposto il primo carattere SYNC
mexSeriale[0]=SYNC;
//imposto il secondo carattere con indirizzo della palina i
mexSeriale[1]=indirizzi [i];
}
//contiuna da qui
}
}
//qui
{
tcgetattr(fd,&tty_attributes);
// c_cflag
// Enable receiver
tty_attributes.c_cflag |= CREAD;
// 8 data bit
tty_attributes.c_cflag |= CS8;
// c_iflag
// Ignore framing errors and parity errors.
tty_attributes.c_iflag |= IGNPAR;
// c_lflag
// DISABLE canonical mode.
// Disables the special characters EOF, EOL, EOL2,
// ERASE, KILL, LNEXT, REPRINT, STATUS, and WERASE, and buffers by lines.
// DISABLE this: Echo input characters.
tty_attributes.c_lflag &= ~(ICANON);
tty_attributes.c_lflag &= ~(ECHO);
// DISABLE this: If ICANON is also set, the ERASE character erases the preceding input
// character, and WERASE erases the preceding word.
tty_attributes.c_lflag &= ~(ECHOE);
// DISABLE this: When any of the characters INTR, QUIT, SUSP, or DSUSP are received, generate the corresponding signal.
tty_attributes.c_lflag &= ~(ISIG);
// Minimum number of characters for non-canonical read.
tty_attributes.c_cc[VMIN]=1;
// Timeout in deciseconds for non-canonical read.
tty_attributes.c_cc[VTIME]=0;
// Set the baud rate
cfsetospeed(&tty_attributes,B38400);
cfsetispeed(&tty_attributes,B38400);
tcsetattr(fd, TCSANOW, &tty_attributes);
// Set RS485 mode:
rs485conf.flags |= SER_RS485_ENABLED;
if (ioctl (fd, TIOCSRS485, &rs485conf) < 0)
{
printf("ioctl error\n");
}
txBuffer[0]='A';
write(fd,txBuffer,1);
// Read a char
if (read(fd,&rxBuffer,1)==1)
{
printf("%c",rxBuffer[0]);
printf("\n");
}
}
close(fd);
return EXIT_SUCCESS;
}
l'errore si trova nella riga:
mexSeriale[1]=indirizzi
;
e questo è quello che mi viene restituito dal terminale quando vado a compilare
ser485.c: In function ‘main’:
ser485.c:86: error: expected expression before ‘[’ token
nella mia ignoranza non riesco davvero a trovare l'errore, spero che mi possiate aiutare e dare qualche indicazione per riuscire a capire dove sto sbagliando in modo da non ripetere l'errore.
ancora grazie mille per tutti gli aiuti che spero di ricevere.
Buona navigazione a tutti
Luca