PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit UART-Progrämchen



Martinius11
14.05.2011, 19:06
Hi,

ich wolt mit meinem RP6 mal ein Programm schreiben indem er mit mir komuniziert.
Ich hab dazu erst mal ein Test-Progrämmchen geschrieben um mich einzu arbeiten.
Das funktioniert aber leider nicht. Kann mir jemand helfen? Danke



#include "RP6RobotBaseLib.h"




int main(void){
setLEDs(0b000000);
writeString("Hallo lass uns starten\n");
writeString("Schreibe mal bitte zwei Chars ins Terminal\n");

uint8_t charsToReceive = 2;
char receiveBuffer[charsToReceive+1];
clearReceptionBuffer();

uint8_t cnt;
for(cnt = 0; cnt < charsToReceive; cnt++) {
receiveBuffer[cnt]=0;
}
uint8_t buffer_pos = 0;
while(true){
if(getBufferLength()){
receiveBuffer[buffer_pos] = readChar();
if(receiveBuffer[buffer_pos]=='\n')
{
receiveBuffer[buffer_pos]='\0';
buffer_pos = 0;
break;
}
}
buffer_pos++;
}
writeChar('\n');
writeString(receiveBuffer);
writeString_P("\n");
return 0;
}

Dirk
14.05.2011, 21:16
@Martinius:
Vielleicht guckst du dir mal dieses sinnfreie Progrämmchen an:
https://www.roboternetz.de/community/showthread.php?53015-RP6Control-M32-Conway-s-Game-Of-Life&p=510826&viewfull=1#post510826

Martinius11
14.05.2011, 22:24
ich hab mein programm mal deinem nachenpfunden aber es will nicht klappen:



#include "RP6RobotBaseLib.h"

char Buffer[UART_RECEIVE_BUFFER_SIZE + 1];


uint8_t Eingabe(void){



uint8_t buffer_pos = 0;
if(getBufferLength()){
Buffer[buffer_pos]=readChar();
if(Buffer[buffer_pos]=='\n'){
Buffer[buffer_pos] = '\0';
return true;
}
else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE) {
Buffer[UART_RECEIVE_BUFFER_SIZE] = '\0';
buffer_pos = 0;
return 2;}
buffer_pos++;
}
return 0;
}

void Warten(void){

while(!Eingabe());

}

int main(void){




setLEDs(0b000000);
writeString("Hallo lass uns starten\n");
writeString("Schreibe mal bitte zwei Chars ins Terminal\n");



Warten();




writeChar('\n');
writeString(Buffer);
writeString_P("\n");
return 0;
}

Dirk
15.05.2011, 03:34
@Martinius:

1. In Main immer: initRobotBase();
Sonst funktioniert nichts!

2. buffer_pos als "static" deklarieren!

3. Anstelle von:
Buffer[buffer_pos] = '\0';
return true;

... muss da in der Funktion Eingabe() stehen:
Buffer[buffer_pos] = '\0';
buffer_pos = 0;
return 1;

Dann sollte es klappen!

Martinius11
15.05.2011, 09:53
@Martinius:

1. In Main immer: initRobotBase();
Sonst funktioniert nichts!


Also sorry für das da hät ich selbst drauf kommen können,
hab wohl in letzter zeit zu viel minecraft gespielt. Aber
danke jetzt klappt es. Du bist der beste