crowdy
18.10.2012, 18:10
Hi,
bei der itoa() Funktion habe ich ein Problem, das ich auch mit Hilfe der Dokumentation nicht lösen konnte. Ich möchte nämlich ein int8_t als Binärzahl mit Hilfe von itoa über den USART ausgeben. Theoretisch bräuchte ich dafür einen 9-stelligen String, dabei tritt aber anscheinend ein Overflow auf und das Programm stürzt ab. Mit einem 17-stelligen String funktioniert es. Ich möchte allerdings, da es ja auch nur eine 8-bit breite Variable ist, diese auch nur mit 8-Stellen bzw. 9 ausgeben. In einem Beispiel der Dokumentation ist ein ganz ähnliches Beispiel angegeben. Der angehängte Code ist diesem Beispiel sehr ähnlich und funktioniert dennoch nicht.
Hier der Link zur Doku:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html
Und hier der Funktionsaufruf in meinem Program
int8_t i8 = -52;
uart_put_int8( i8, 2);
Und die Funktion selber:
void uart_put_int8( int8_t val, uint8_t rdx )
{
char str_val[9], str_rdx[3];
uart_put_str( itoa( val, str_val, rdx ) );
switch( rdx )
{
case 2: uart_put_str( "(bin)" );
break;
case 10: break;
case 16: uart_put_str( "(hex)" );
break;
default: uart_put_char('(');
uart_put_str( utoa( rdx, str_rdx, 10 ) );
uart_put_char(')');
break;
}
}
Mit freundlichen Grüßen
bei der itoa() Funktion habe ich ein Problem, das ich auch mit Hilfe der Dokumentation nicht lösen konnte. Ich möchte nämlich ein int8_t als Binärzahl mit Hilfe von itoa über den USART ausgeben. Theoretisch bräuchte ich dafür einen 9-stelligen String, dabei tritt aber anscheinend ein Overflow auf und das Programm stürzt ab. Mit einem 17-stelligen String funktioniert es. Ich möchte allerdings, da es ja auch nur eine 8-bit breite Variable ist, diese auch nur mit 8-Stellen bzw. 9 ausgeben. In einem Beispiel der Dokumentation ist ein ganz ähnliches Beispiel angegeben. Der angehängte Code ist diesem Beispiel sehr ähnlich und funktioniert dennoch nicht.
Hier der Link zur Doku:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html
Und hier der Funktionsaufruf in meinem Program
int8_t i8 = -52;
uart_put_int8( i8, 2);
Und die Funktion selber:
void uart_put_int8( int8_t val, uint8_t rdx )
{
char str_val[9], str_rdx[3];
uart_put_str( itoa( val, str_val, rdx ) );
switch( rdx )
{
case 2: uart_put_str( "(bin)" );
break;
case 10: break;
case 16: uart_put_str( "(hex)" );
break;
default: uart_put_char('(');
uart_put_str( utoa( rdx, str_rdx, 10 ) );
uart_put_char(')');
break;
}
}
Mit freundlichen Grüßen