Hi,
ja ich möchte mit einem ATXMega32A4 arbeiten, ich hab wohl vergessen, das zu erwähnen, tut mir leid!
Wieso so "abwertend"? Sind Pointer was schlechtes oder interpretiere ich den Satz einfach nur falsch?Allerdings musst Du dann mit Pointern arbeiten.
Könnte ich mit dieser Union auf einen Integer und dessen zwei zugrundeliegende Bytes zugreifen?Code:union overlay { uint8_t byte1; uint8_t byte2; int16_t integer1; };
Also ich muss schon sagen, geschenkt wird einem bei C wohl garnichts. Nichtmal die Delay-Funktion funktioniert!?
Ich möchte in einem Abstand von ca. 1s einen Text über die serielle ausgeben, aber es wird nichts mehr gesendet. Ist das ein Bug?
Ich hab <avr/delay.h> eingebunden und auch den Hinweis mit max. delayZeit = 262.14ms / F_CPU (in MHz) hab ich gesehen....
GrußCode:#include <avr/io.h> #include <avr/delay.h> #define F_CPU 32000000UL int main(void) { Clock_init(); uart_init(&USARTC1,115200); PORTC.DIRSET = 0x80; while(1) { send_string(&USARTC1, "Hallo Welt"); delay_ms(1); } } void Clock_init(void) { OSC.CTRL |= OSC_RC32MEN_bm; while(!(OSC.STATUS & OSC_RC32MRDY_bm)); CCP = CCP_IOREG_gc; CLK.CTRL = CLK_SCLKSEL_RC32M_gc; } void uart_init(USART_t *uart, uint32_t baud) { uart->BAUDCTRLA = (F_CPU/(16*baud))-1; uart->BAUDCTRLB = ((F_CPU/(16*baud))-1)>>8; uart->CTRLB = USART_RXEN_bm | USART_TXEN_bm; uart->CTRLC = USART_CHSIZE_8BIT_gc; } void send_string(USART_t *uart, char str[]) { uint8_t i = 0; while (i<strlen(str)) { while (!( uart->STATUS & USART_DREIF_bm)); uart->DATA = str[i]; i++; } while (!( uart->STATUS & USART_DREIF_bm)); uart->DATA = 0x0d; while (!( uart->STATUS & USART_DREIF_bm)); uart->DATA = 0x0a; } void delay_ms(uint64_t ms) { uint64_t i = 0; while (i < ms) { i++; _delay_ms(1); } }
Chris







Zitieren

Lesezeichen