hallo,
ich habe mal ein paar Fragen,
habe hier eine Funktion(glaub hier aus dem forum) die den ankommenden
String
aus 29zeich +1zeichen für die endeerkennung($) in den Buffer schreibt,
wie ist das wenn ich anstatt einnen String eine zahl zB.16 in den Buffer
schreiben möchte
char SDBuffer[30];
void uart_gets( char* SDBuffer, int BufferLen )
{
int i = 0;
char c;
while( ( c = uart_getchar() ) != '$' && i < BufferLen - 1 )
SDBuffer[ i++ ] = c;
SDBuffer[i] = '\0';
}
mfg kay
kay schrieb: > wie ist das wenn ich anstatt einnen String eine zahl zB.16 in den Buffer > schreiben möchte Aufpassen. jetzt müssen wir vorsichtig sein. Was genau verstehst du unter 'einer Zahl'. Wenn du auf deinem Terminal hintereinander die Tasten 1 und 6 drückst, dann werden in den Buffer die Zeichen '1' und '6' eingetragen. Nur weil das für dich Ziffern sind, haben die erst mal keinerlei Sonderbedeutung. String ist String. Und ein String (also ein Text) kann selbstverständlich komplett aus Ziffern bestehen, also zb "13092011" Die weiterführende Frage lautet dann: wie kann man aus deinem String, der eine Textrepräsentierung einer Zahl beinhaltet, die Zahl selbst extrahieren, so dass man dann damit rechnen kann. das geht zb mit atoi() oder mit strtol() oder sscanf() oder .... oder man macht sich selber was.
> Und ein String (also ein Text) kann > selbstverständlich komplett aus Ziffern bestehen, also zb "13092011" das reicht mir aus, jetzt hab ich nochmal eine frage, die Funktion müsste doch auch so funktionieren,es es wird die Funktion void uart_gets(); aufgerufen und dann kommen die daten über UART char SDBuffer[30]; void uart_gets(void ) { int BufferLen; int i = 0; char c; while( ( c = uart_getchar() ) != '$' && i < BufferLen - 1 ) SDBuffer[ i++ ] = c; SDBuffer[i] = '\0'; }
kay schrieb: > > char SDBuffer[30]; > > void uart_gets(void ) > { > int BufferLen; > int i = 0; > char c; > > while( ( c = uart_getchar() ) != '$' && i < BufferLen - 1 ) welchen Wert hat den BufferLen? while( ( c = uart_getchar() ) != '$' && i < sizeof( SDBuffer ) - 1 ) und die Variable BufferLen wirfst du raus. > SDBuffer[ i++ ] = c; > > SDBuffer[i] = '\0'; > } Deine erste Version der Funktion war besser :-)
>welchen Wert hat den BufferLen?
ich glaube sie meinten das so
void uart_gets(void )
{
int BufferLen = 0;
int i = 0;
char c;
while( ( c = uart_getchar() ) != '$' && i < BufferLen - 1 )
SDBuffer[ i++ ] = c;
SDBuffer[i] = '\0';
}
kay schrieb: >>welchen Wert hat den BufferLen? > ich glaube sie meinten das so No > void uart_gets(void ) > { > int BufferLen = 0; > int i = 0; > char c; > > while( ( c = uart_getchar() ) != '$' && i < BufferLen - 1 ) Im ersten Schleifendurchlauf: i ist gleich 0, BufferLen ist gleich 0 Wie soll der Vergleich jemals true ergeben? Zurücklehnen. Nachdenken. Was ist die Idee an dieser Stelle. Was soll der Vergleich mit BufferLen bewirken? Nun, ein Array hat eine bestimmte Größe. Und über diese Größe hinaus darf man nicht schreiben. Ein Array der Größe 5 hat nun mal nur die Elemente 0, 1, 2, 3, 4. Wenn von der UART aber 6 oder 7 Zeichen reinkommen, hat man ein Problem, denn die würden im Array ander Position 5 oder 6 oder 7 (je nachdem das wievielte Zeichen hereinkommt, ehe dann mal ein $ daherkommt) abgespeichert werden. Ein Array Element 5 oder 6 oder 7 existiert aber nicht in einem Array der Größe 5. -> Diese Abfrage soll verhindern, dass man hinten aus dem Array rausschreibt. Und daher muss da die Arraygröße rein. Die ist aber ganz sicher nicht 0.
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.