Oppure

Loading
29/09/14 22:57
Roby94
Buonasera.
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_H
evitasse questi problemi.

aaa
30/09/14 13:13
TheDarkJuster
Su un header le le dichiari extern e sull' altro no, e problema risolto.
Ma per curiosità... prova a cambiare con
#ifndef MYUART
#define MYUART 0
aaa
30/09/14 16:37
Roby94
È lo stesso header file ma lo devo includere in due file diversi, vedi il codice del secondo e terzo file?
aaa
30/09/14 19:24
TheDarkJuster
Lo so, l'altro Header lo crei tu
aaa
30/09/14 20:16
Roby94
Extern lo metto nel file finale? Non in quello destinato alla libreria, giusto?
aaa
01/10/14 6:21
waseem123
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
aaa
01/10/14 7:57
nessuno
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
01/10/14 14:21
TheDarkJuster
No ehm, non ti ho capito. Come è strutturato il progetto? Come si chiamano quei files?
aaa