Gast
#1904261
Hallo zusammen, ich habe folgendes Problem: Ich möchte mit einem AT90CAN128 Controller Bytes über die serielle Schnittstelle senden. Dafür habe ich folgende Funktion programmiert: void uart1_init() // UART 1 initialisieren { UCSR1B = (0<<U2X1); //Baudrate einstellen UBRR1H = (unsigned char) (BAUD>>8); UBRR1L = (unsigned char) BAUD; UCSR1A = (1<<U2X1); /// double tx speed //Frame format einstllen: asynchron, 8data, no parity & 1 stop bits UCSR1C = (0<<UMSEL1) | (0<<UPM1) | (0<<USBS1) | (3<<UCSZ0); //Enable RX,TX und INT UCSR1B = (1<<RXEN1) | (1<<TXEN1) | (1 << RXCIE1); } void uart1_send(unsigned char *buf, uint8_t size)//sendet Daten über UART { for(int i=0; i<size;i++) { while ( !(UCSR1A &(1<<UDRE1))){}; // warten bis Senden // moeglich if(buf[i]!= 0){ UDR1 = buf[i]; } } } In der Main.c erfolgt dann der Aufruf: uint8_t sof = 0x7b; uart1_send((unsigned char *)&sof, 1); //Start of Frame ich mache hier einen Cast auf den u char pointer, da die uart1_send das so erwartet. Das ganze funktioniert auch ohne Probleme. Das Problem ist folgendes: Ich möchte sof nicht als Variable sondern als #define anlegen, da es sich um einen festen Datenrahmen handelt. wenn ich das define so anlege: #define SOF 0x7b, wie mache ich dann den Cast, bzw. wie kann ich das SOF der Funktion übergeben? Kann mir da jemand helfen? Braucht ihr noch weitere Infos? Gruß P.