Vom Prinzip her ist das schon ok.
Anmerkungen
1 | // Anzahl eingelesener Zeichen ermitteln
|
2 | while(uart_string[size] != '\0') size++;
|
das ist genau das, was auch die Funktion strlen macht.
1 | size = strlen( uart_string );
|
den Kommentar kannst du dir dann sparen, denn der steckt implizit in der
Funktion strlen drinnen, die eigentlich jeder C Programmierer kennen
sollte und daher auch weiß, was die macht.
Selbiges hier
1 | // Zeichen in Zahl umwandeln
|
2 | while(isdigit(uart_string[index]))
|
3 | {
|
4 | value = (value*10) + (uart_string[index] - '0');
|
5 | index++;
|
6 | }
|
das ist genau dasselbe, was auch die Funktion atoi macht.
1 | value = atoi( &uart_string[1] );
|
in deinem Fall lässt man die natürlich erst auf den Teilstring los, der
bei uart_string[1] beginnt.
D.h. unter Verwendung der bereits vorhandenen Standardfunktionen
schreibt sich das dann als
1 | char c = uart_string[0];
|
2 | if(c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')
|
3 | {
|
4 | size = strlen( uart_string );
|
5 | value = atoi( &uart_string[1] );
|
6 |
|
7 | ....
|
Noch ein kleiner Tipp.
Für solche Sachen
1 | uart_puts(itoa(size, buf, 10));
|
solltest du dir deinen Satz von uart Funktionen ergänzen.
Du hast ein urt_puts in deinem Funktionsvorrat. Nichts und niemand
hindert dich daran, da noch eine Funktion
1 | void uart_puti( int value )
|
2 | {
|
3 | char buf[7];
|
4 | uart_puts(itoa(size, buf, 10));
|
5 | }
|
mit aufzunehmen.
Genauso, wie du dir auch dafür
1 | if(value < 10) uart_puts_P(" ");
|
2 | else if(value < 100) uart_puts_P(" ");
|
3 | uart_puts(itoa(value, buf, 10));
|
gleich mal eine neue Funktion mit in die UART Funktionen mit dazu
programmieren kannst. Zb.
1 | void uart_putb_formatted( uint8_t byte )
|
2 | {
|
3 | char buf[7];
|
4 |
|
5 | if(value < 10) uart_puts_P(" ");
|
6 | else if(value < 100) uart_puts_P(" ");
|
7 |
|
8 | uart_puts(itoa(value, buf, 10));
|
9 | }
|
und in Zukunft hast du dann eben die beiden Funktionen (oder auch noch
andere) in deinen UART Funktionen vorrätig. Nur weil du bisher UART
Funktionen hattest bzw. dir irgendwo eine fertigen Satz an Funktionen
geholt hast, bedeutet das nicht, dass du dir da keine weiteren
Hilfsfunktionen dazu programmieren darfst, die du in weiterer Folge
immer wieder brauchen kannst. Lieber diesen Satz an Funktionen
erweitern, als bei jedem neuen Projekt x-mal die immer gleichen
Funktionalitäten erneut ausprogrammieren.
Letzten Endes kommt das auch deinem Code zu gute, wenn er aus keinem
guten Grund so aufgebläht wird, nur weil du dir für eigentlich einfache
Code-Bausteine keine Funktionen machst, sondern die immer wieder neu
ausprogrammierst.