Hallo zusammen,
ich habe versucht den Beispiel über Uart/Fido aus RN-Wissen nach zu programmieren...
Es klappt auch soweit allerdings sendet mein UART an dauernd, anstatt ein Zeichen.
Ich verstehe dass nicht! Benütze ja keine schleifen! Bitte um Hilfe.
Code:
int main()
{
uart_init();
sei(); // Wird nur gebraucht bei der Interrupt-Version
uart_putc ('f');
/*uart_puts ("Hallo Welt!" CR);*/
while (1)
{
}
return 0;
}
uart:
Code:
/* Senden eines Chars */
int uart_putc (const uint8_t data)
{
int ret = fifo_put (&out_fifo, data);
UCSRB |= (1 << UDRIE);
return ret;
}
fifo_put :
Code:
/* Schreibt das nächste Byte "data" in die FIFO.
* Liefer 1 bei Erfolg und 0, falls die FIFO voll ist. */
uint8_t fifo_put (fifo_t *f, const uint8_t data)
{
return _inline_fifo_put (f, data);
}
und _t fifo_put:
Code:
/* Schreibt das nächste Byte "data" in die FIFO.
* Liefer 1 bei Erfolg und 0, falls die FIFO voll ist. */
static inline uint8_t _inline_fifo_put (fifo_t *f, const uint8_t data)
{
if (f->count >= f->size)
return 0;
uint8_t * pwrite = f->pwrite;
*(pwrite++) = data;
uint8_t write2end = f->write2end;
if (--write2end == 0)
{
write2end = f->size;
pwrite -= write2end;
}
f->write2end = write2end;
f->pwrite = pwrite;
uint8_t sreg = SREG;
cli();
f->count++;
SREG = sreg;
return 1;
}
dank im voraus
Lesezeichen