29/09/14 22:57
Roby94
Buonasera.
Sono diverse ore che sbatto la testa contro una compilazione impossibile...
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
Sono diverse ore che sbatto la testa contro una compilazione impossibile...
#ifndef UART_H #define UART_H #include <avr/io.h> #include "Buffer.h" #define UARTRxBufferSize 32//Dimensione del buffer software di ricezione del UART #define UARTTxBufferSize 32//Dimensione del buffer software di trasmissione del UART namespace UART { Buffer* rxBuffer;//Puntatore al buffer software di ricezione del UART Buffer* txBuffer;//Puntatore al buffer software di Trasmissione del UART void Init(uint16_t);//Inizializza la seriale UART accetando come parametro il valore UBRR /**/ } #endif
#include <avr/io.h> #include <avr/interrupt.h> #include "C++.h" #include "UART.h" void UART::Init(uint16_t ubrr) { UCSR0B = (1<<RXEN0) | (1<<TXEN0); //Abilito il pin di ricezione e il pin di trasmissione UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);//Imposto a 8 la lunghezza in bit di un carattere UBRR0H = ubrr >> 8; UBRR0L = ubrr; UART::rxBuffer = new Buffer(UARTRxBufferSize);//Creo una nuova istanza di Buffer per il buffer di ricezione UART::txBuffer = new Buffer(UARTTxBufferSize);//Creo una nuova istanza di Buffer per il buffer di trasmissione UART::RxInterruptEnabled();//Abilito l'interrupt per la ricezione di un byte UART::TxInterruptEnabled();//Abilito l'interrupt per la conclusione di invio di un byte }
#include <avr/io.h> #include "UART.h" int main(void) { UART::Init(207);//Baund 9600 for fcpu 16M while (true) { UART::Tx('a'); if(UART::RxAvailable()) { UART::Tx(UART::Rx()); } } }
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
#ifndef UART_H #define UART_Hevitasse questi problemi.
aaa