Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Header file incluso piu volte
Forum - C/C++ - Header file incluso piu volte

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 0:57
Martedì, 30/09/2014
Buonasera.
Sono diverse ore che sbatto la testa contro una compilazione impossibile...
Codice sorgente - presumibilmente C++

  1. #ifndef UART_H
  2. #define UART_H
  3.  
  4. #include <avr/io.h>
  5. #include "Buffer.h"
  6.  
  7. #define UARTRxBufferSize 32//Dimensione del buffer software di ricezione del UART
  8. #define UARTTxBufferSize 32//Dimensione del buffer software di trasmissione del UART
  9.  
  10. namespace UART
  11. {
  12.         Buffer* rxBuffer;//Puntatore al buffer software di ricezione del UART
  13.         Buffer* txBuffer;//Puntatore al buffer software di Trasmissione del UART
  14.        
  15.         void Init(uint16_t);//Inizializza la seriale UART accetando come parametro il valore UBRR
  16. /**/
  17. }
  18.  
  19. #endif


Codice sorgente - presumibilmente C++

  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include "C++.h"
  4. #include "UART.h"
  5.  
  6. void UART::Init(uint16_t ubrr)
  7. {
  8.         UCSR0B = (1<<RXEN0) | (1<<TXEN0); //Abilito il pin di ricezione e il pin di trasmissione
  9.         UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);//Imposto a 8 la lunghezza in bit di un carattere
  10.        
  11.         UBRR0H = ubrr >> 8;
  12.         UBRR0L = ubrr;
  13.        
  14.         UART::rxBuffer = new Buffer(UARTRxBufferSize);//Creo una nuova istanza di Buffer per il buffer di ricezione
  15.         UART::txBuffer = new Buffer(UARTTxBufferSize);//Creo una nuova istanza di Buffer per il buffer di trasmissione
  16.        
  17.         UART::RxInterruptEnabled();//Abilito l'interrupt per la ricezione di un byte
  18.         UART::TxInterruptEnabled();//Abilito l'interrupt per la conclusione di invio di un byte
  19. }


Codice sorgente - presumibilmente C++

  1. #include <avr/io.h>
  2. #include "UART.h"
  3.  
  4. int main(void)
  5. {
  6.        
  7.         UART::Init(207);//Baund 9600 for fcpu 16M
  8.         while (true)
  9.         {
  10.                 UART::Tx('a');
  11.                 if(UART::RxAvailable())
  12.                 {
  13.                         UART::Tx(UART::Rx());
  14.                 }
  15.         }
  16. }


Includo nel programma due volte l'header file UART.h, nonostante vi siano precauzioni per evitare la doppia inclusione mi viene notificati gli errori "multiple definition of `UART::rxBuffer'" "multiple definition of `UART::txBuffer'" se aggiungo la classifica di extern vengono restituiti una serie di "undefined reference to `UART::rxBuffer'"
Non capisco poprio cosa non vada, credevo che il
Codice sorgente - presumibilmente C/C++

  1. #ifndef UART_H
  2. #define UART_H

evitasse questi problemi.



La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 15:13
Martedì, 30/09/2014
Su un header le le dichiari extern e sull' altro no, e problema risolto.
Ma per curiosità... prova a cambiare con
Codice sorgente - presumibilmente C/C++

  1. #ifndef MYUART
  2. #define MYUART 0


PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:37
Martedì, 30/09/2014
È lo stesso header file ma lo devo includere in due file diversi, vedi il codice del secondo e terzo file?


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:24
Martedì, 30/09/2014
Lo so, l'altro Header lo crei tu

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 22:16
Martedì, 30/09/2014
Extern lo metto nel file finale? Non in quello destinato alla libreria, giusto?


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
waseem123 (Normal User)
Newbie


Messaggi: 1
Iscritto: 01/10/2014

Segnala al moderatore
Postato alle 8:21
Mercoledì, 01/10/2014
Salve a tutti,
sono alle prese con un nuovo mondo e sto riscontrando qualche problema :D
In sostanza ho necessità di elaborare delle stringhe che ricevo su porta seriale, sul mio BeagleBone Black (con Debian).
La porta seriale è la /dev/ttyO0.





____
gill

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:57
Mercoledì, 01/10/2014
Scusa waseen ma perché scrivi all'interno di una discussione non tua? Hai letto di cosa si parla in questa?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 16:21
Mercoledì, 01/10/2014
No ehm, non ti ho capito. Come è strutturato il progetto? Come si chiamano quei files?

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:56
Giovedì, 02/10/2014
Dall'alto
-UART.h
-UART.cpp
-main.cpp

Ultima modifica effettuata da Roby94 il 02/10/2014 alle 18:59


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo