Hallo Ich muss für TWI (ich benutzte den Atmel Treiber, der einzelne Bytes übergibt) meine Strings in Bytes teilen, damit ich sie mittels TWI übermitteln kann. Hat hierbei einer Erfahrung wie man das macht? Oder ist es einfach den TReiber umzuschreiben? Vielen Dank!
Patrick Schmelzer schrieb: > meine Strings in Bytes teilen wo ist genau das Problem? dein String ist doch ein Array von bytes( char) und die kann man einfach mit einer schleife abrufen.
hier ein Beispiel: #define VERSION "t" wenn ich das ganze jetzt in int umwandle zum übergeben: uint8_t = atoi(VERSION); //hier die Übergabe von MCU an PC mit readbuffer char output[10] snprintf(output, "%d", readbuffer) Hier bekomme ich immer einen Buffer overflow, keine Ahnung warum. Was mach ich, wenn der #define String aus mehr als einem Byte besteht?
Patrick Schmelzer schrieb: > uint8_t = atoi(VERSION); was ja auch Unsinn ist.
1 | char* text = "test"; |
2 | |
3 | for( uint8_t i = 0; i < strlen( text ); ++i ) { |
4 | uint8_t x = (uint8_t)text[0]; |
5 | // sende x
|
6 | }
|
Peter II schrieb: > for( uint8_t i = 0; i < strlen( text ); ++i ) { > uint8_t x = (uint8_t)text[0]; > // sende x > } Was für ein Overhead. Wenn der Compiler es nicht wegoptimiert dann wird strlen(...) bei jedem Schleifendurchlauf neu aufgerufen ..... da biegen sich mir die Zehennägel hoch.
Kannst du mir erklären, warum das Unsinn ist? Die Rückumwandlung mit snprintf stimmt ?
Arduinoquäler schrieb: > Was für ein Overhead. Wenn der Compiler es nicht wegoptimiert > dann wird strlen(...) bei jedem Schleifendurchlauf neu > aufgerufen ..... da biegen sich mir die Zehennägel hoch. zum glück optimieren ja die Compiler. Außerdem geht es hier um ein Beispiel nicht um optimalen code. Das senden über TWI wird eh so langsam sein, es nicht mal einen unterschied machen würde.
Patrick Schmelzer schrieb: > Kannst du mir erklären, warum das Unsinn ist?
1 | uint8_t = atoi(VERSION); |
1. du hast nicht mal einen Name für die Variable. 2. wie soll man dann aus einen "t" eine Zahl machen?
Patrick Schmelzer schrieb: > Kannst du mir erklären, warum das Unsinn ist? Dein C-Buch sollte das können... Oliver
Mein Fehler, dass ich die Variable vergessen habe. Meine Frage war auch eher, ob ich atoi verwenden kann, um den String "kurzzeitig" in einen int umzuwandeln, zu verschicken, und dann zurückzuwandeln. -->anscheinend nicht Gibt es auch die Möglichkeit irgendwie anstatt uint8_t x = (uint8_t)text[0]; auch mehrere Charaktere in die Variable zu schreiben?
Patrick Schmelzer schrieb: > auch mehrere Charaktere in die Variable zu schreiben? ja nennt sich denn Array.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.