Richtig wäre es, wenn "USART1_sendString" ein Argument vom Typ "const
char*" übernehmen würde. Schließlich sollte es den Text nicht verändern.
1 | void USART1_sendString(const char *str)
|
2 | {
|
3 | for(size_t i = 0; i < strlen(str); i++)
|
4 | {
|
5 | USART1_sendChar(str[i]);
|
6 | }
|
7 | }
|
Allerdings wird hier strlen in jedem Durchlauf aufgerufen, d.h. super
ineffizient. Viel besser geht es so:
1 | void USART1_sendString(const char *str)
|
2 | {
|
3 | for(const char* p = str; *p != '\0'; ++p)
|
4 | {
|
5 | USART1_sendChar(*p);
|
6 | }
|
7 | }
|
Weil es ja um AVR geht, wäre es natürlich noch besser den String nur im
Flash abzulegen.
Falls du mal den Fall hast dass du eine Funktion wie USART1_sendChar
hast die den String tatsächlich ändert, muss man eine Kopie des Strings
im RAM (hier: auf dem Stack) anlegen:
1 | char str [] = "Hello World!\r\n";
|
2 | USART1_sendString(str);
|
Hier ist also wieder schön zu sehen, dass die Mikrocontroller-Hersteller
desaströse Code-Qualität produzieren, und Microchip ist ganz vorne
dabei.