2017-10-14 1 views
1

Dies ist eine Fortsetzung von Compilation error due to table in C++C++ UART Infite Schleife mit dem TI-Nspire

Also das ist mein Programm ist:

#include <os.h> 
#include <nspireio/uart.hpp> 
#include <nspireio/console.hpp> 

int key_already_pressed = 0; 
char oldinput[100] = {0}; 
char voidlist[100] = {0}; 
/* 
void messagel(void) { 
    if(messagemode){ 
    if(isKeyPressed(KEY_NSPIRE_A) && !key_already_pressed) { 
     nio_printf("A"); 
     uart_printf("A"); 
     //strcat(message,"A"); 
     key_already_pressed = 1; 
    } 
    if(isKeyPressed(KEY_NSPIRE_B) && !key_already_pressed) { 
     nio_printf("B"); 
     uart_printf("B"); 
     //strcat(message,"B"); 
     key_already_pressed = 1; 
    } 
     if(isKeyPressed(KEY_NSPIRE_ENTER) && messagemode && !key_already_pressed) { 
      messagemode = 0; 
     key_already_pressed = 1; 
     } 
    if(!any_key_pressed()) 
     key_already_pressed = 0; 
    } 
}*/ 


int main(void) 
{ 
    assert_ndless_rev(874); 
    //clrscr(); 
    nio_console csl; 
    nio_init(&csl,NIO_MAX_COLS,NIO_MAX_ROWS,0,0,NIO_COLOR_WHITE,NIO_COLOR_BLACK,TRUE); 
    nio_set_default(&csl); 
    nio_color(&csl,NIO_COLOR_BLACK,NIO_COLOR_WHITE); 
    nio_printf("Nspire UART Chat by Samy. Compiled the %s At %s\n",__DATE__,__TIME__); 
    nio_color(&csl,NIO_COLOR_WHITE,NIO_COLOR_BLACK); 
    nio_puts("Press any ESC to exit and CTRL to send msg...\n"); 
    while(!isKeyPressed(KEY_NSPIRE_ESC)){ 
    if(isKeyPressed(KEY_NSPIRE_CTRL) && !key_already_pressed){ 
    nio_printf(">"); 
    char input[100] = {0}; 
     nio_getsn(input,100); 
    uart_printf(input); 
    key_already_pressed = 1; 
    } 
    if(!any_key_pressed()) 
     key_already_pressed = 0; 
    if(uart_ready()) { 
    char input[100] = {0}; 
    getline(input,100); 
    if(oldinput != input) { 
     if(input != voidlist) { 
      nio_puts(input); 
      strcpy(oldinput,input); 
      strcpy(input,voidlist); 
     } 
    } 
    } 
    } 
    nio_puts("Closing the programm."); 
    nio_free(&csl); 

    return 0; 
} 

Die programe halten sendet einen Brief continualy auf dem TI-Bildschirm und auf der seriellen Ausgabe. Wenn ich zum Beispiel lol in den seriellen Monitor schreibe, sendet es automatisch l und der Buchstabe ändert sich nicht, wenn ich einen neuen String sende.

Ich möchte wirklich, dass dieses Programm für das Ende des Wochenendes voll funktioniert, also sag mir, was ich falsch mache?

PS: Ich bin französisch

+0

haben Sie wahrscheinlich nicht in vollem Umfang das Konzept hinter Strings verstehen in C/C++ könnte hilfreich sein, etwas über sie zu lernen, wenn Sie so nahe die tatsächliche Hardware programmieren, nur sagen;) – ExOfDe

+0

Ich habe die Wahl, es ist die einzige Möglichkeit, die Kommunikation mit dem Kalkül – TurtleForGaming

+0

Mach dir keine Sorgen, aber für diesen Fall hier könnte es dir helfen, die Antwort habe ich mi gegeben ght dir weiterhelfen. – ExOfDe

Antwort

0

uns diesen Teil des Codes aussehen lassen

if(uart_ready()) { 
    char input[100] = {0}; 
    getline(input,100); 
    if(oldinput != input) { 
     if(input != voidlist) { 
      nio_puts(input); 
      strcpy(oldinput,input); 
      strcpy(input,voidlist); 
     } 
    } 
} 

Sie überprüft werden, wenn der UART bereit ist, wenn so Sie ein char arry mit 100 Elementen deklarieren. Bis hier in Ordnung. Aber was sind Sie tun als:

if(oldinput != input) { 

Sie Adresse des Arrays vergleichen ‚oldinput‘ mit der Adresse des zuvor erklärt ‚Input‘ Array. Ich nehme an, was Sie eigentlich wollten, war der Inhalt dieser beiden char-Arrays zu vergleichen, da 'oldinput' und 'input' immer nicht gleich sind.

, was Sie eigentlich wollten, ist dies:

if(strcmp(oldinput,input) != 0){ 

dies vergleicht die tatsächlich Inhalt dieser Felder. Beachten Sie jedoch, dass diese Funktion am Ende der Zeichenfolge einen Null-Terminator voraussetzt !!! Das gleiche gilt für das nächste "wenn".

Versuchen Sie, dies zu beheben und es könnte Ihnen helfen, Ihr Problem zu lösen.

Strings in C

PS: Ich bin deutsch, aber wen interessiert XP

+0

können Sie mir die Antwort geben Ich lerne viel mit etwas, das funktioniert – TurtleForGaming

+0

Wenn ich könnte ich würde, aber ich habe keine Mittel zum Testen des Codes, sorry. Ich benutze die Stdperiph-Bibliothek zu Hause und habe keine Erfahrung mit Ihrer Bibliothek, die Sie verwenden. Ich kann nur auf die offensichtlichsten Fehler hinweisen, die wahrscheinlich das Problem sind. Aber wenn Sie meine Antwort sorgfältig lesen, glaube ich, dass es das Problem lösen wird, das gleiche Zeug wiederholt zu schreiben. Denken Sie einfach darüber nach. In deiner jetzigen Version werden deine Bedingungen IMMER WAHR sein. das ist etwas, was du nicht willst. Sie wollen, dass sie nur manchmal wahr sind! – ExOfDe