Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years, 11 months ago. This question has been closed. Reason: Duplicate question
Receive the string from c ++ to mbed, then work the string.
After the first run, the program stops responding. This happens after I call the 'void control ()' function, why?
#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx char stringa[200]; int seq_ph[200]; //vettore in cui salvo gli indici delle immagini dei fonemi trovati nella stringa struct phoneme{ //struct per contenere vari fonemi (matrice) e l'indice dell'immagine associata char poss_ph[25][4]; int lips; }; phoneme vect_ph[20]; //vettore di struct, serve per contenere i vari gruppi di fonemi di una lingua //Questa funzione riempie il vettore di struct vect_ph[] con tutti i fonemi e le immagini associate della lingua italiana void italian_ph() { for (int i=0; i<20; i++) //inizializzo il vettore { for (int j=0; j<25; j++) for (int k=0; k<4; k++) { vect_ph[i].poss_ph[j][k]='\0'; //carico tutti caratteri nulli nelle matrici in cui salverò i fonemi } vect_ph[i].lips=0; //pongo uguali a 0 tutti gli indici delle immagini } //Fonema 1 vect_ph[0].poss_ph[0][0]='a'; //carico tutti i fonemi della lingua vect_ph[0].lips=1; //Fonema 2 vect_ph[1].poss_ph[0][0]='o'; vect_ph[1].poss_ph[1][0]='u'; vect_ph[1].poss_ph[2][0]='h'; vect_ph[1].poss_ph[3][0]='q'; vect_ph[1].poss_ph[3][1]='u'; vect_ph[1].lips=2; //Fonema 3 vect_ph[2].poss_ph[0][0]='e'; vect_ph[2].poss_ph[1][0]='i'; vect_ph[2].lips=3; //Fonema 4 vect_ph[3].poss_ph[0][0]='c'; vect_ph[3].poss_ph[1][0]='d'; vect_ph[3].poss_ph[2][0]='g'; vect_ph[3].poss_ph[3][0]='n'; vect_ph[3].poss_ph[4][0]='s'; vect_ph[3].poss_ph[5][0]='t'; vect_ph[3].poss_ph[6][0]='z'; vect_ph[3].poss_ph[7][0]='g'; vect_ph[3].poss_ph[7][1]='n'; vect_ph[3].poss_ph[8][0]='f'; vect_ph[3].poss_ph[9][0]='v'; vect_ph[3].poss_ph[10][0]='s'; vect_ph[3].poss_ph[10][1]='c'; vect_ph[3].poss_ph[11][0]='c'; vect_ph[3].poss_ph[11][1]='h'; vect_ph[3].poss_ph[12][0]='s'; vect_ph[3].poss_ph[12][1]='t'; vect_ph[3].lips=4; //Fonema 5 vect_ph[4].poss_ph[0][0]='l'; vect_ph[4].poss_ph[1][0]='r'; vect_ph[4].lips=5; //Fonema 6 vect_ph[5].poss_ph[0][0]='m'; vect_ph[5].poss_ph[1][0]='b'; vect_ph[5].poss_ph[2][0]='p'; vect_ph[5].lips=6; //Fonema 7 vect_ph[6].poss_ph[0][0]='-'; vect_ph[6].poss_ph[1][0]='.'; vect_ph[6].lips=7; return; } //Questa funzione a partire dalla stringa di ingresso genera un vettore con tutti gli indici delle immagini associate ai fonemi trovati void control () { int z=0; bool ok3=false, ok2=false, ok1=false; char temp[4]; //uso una stringa temporanea in cui salvo i caratteri prelevati dalla stringa in ingresso da confrontare con i fonemi della lingua scelta for (int q=0; q<4; q++) temp[q]='\0'; int index_seq=0; while (stringa[z]!='\0') //fino a che non trovo il carattere di terminazione della stringa { if (ok3==false && z<197) //controllo sillabe da 3 { for (int j=0; j<3; j++) { temp[j]=stringa[z+j]; } for (int k=0; k<20 && ok3==false; k++) { for (int h=0; h<25 && ok3==false; h++) { if (temp[0]==vect_ph[k].poss_ph[h][0]) if (temp[1]==vect_ph[k].poss_ph[h][1]) if (temp[2]==vect_ph[k].poss_ph[h][2]) { ok3=true; //se i 3 caratteri prelevati corrispondono ad un fonema seq_ph[index_seq]=vect_ph[k].lips; //allora salvo l'indice dell'immagine associata al fonema nel vettore pc.printf("%d",(seq_ph[index_seq])); index_seq++; //mi sposto di una posizione avanti nel vettore z=z+3; //mi sposto di 3 posizioni avanti nella stringa di ingresso } } } } if (ok3==false && ok2==false && z<198) //controllo sillabe da 2 se non c'è corrispondenza con quelle da 3 { for (int j=0; j<2; j++) { temp[j]=stringa[z+j]; } for (int k=0; k<20 && ok2==false; k++) { for (int h=0; h<25 && ok2==false; h++) { if (temp[0]==vect_ph[k].poss_ph[h][0]) if (temp[1]==vect_ph[k].poss_ph[h][1]) { ok2=true; //se i 2 caratteri prelevati corrispondono ad un fonema seq_ph[index_seq]=vect_ph[k].lips; //allora salvo l'indice dell'immagine associata al fonema nel vettore pc.printf("%d",(seq_ph[index_seq])); index_seq++; //mi sposto di una posizione avanti nel vettore z=z+2; //mi sposto di 2 posizioni avanti nella stringa di ingresso } } } } if (ok3==false && ok2==false && ok1==false && z<199) //controllo sillabe da 1 { temp[0]=stringa[z]; for (int k=0; k<20 && ok1==false; k++) { for (int h=0; h<25 && ok1==false; h++) { if (temp[0]==vect_ph[k].poss_ph[h][0]) { ok1=true; //se il carattere prelevato corrisponde ad un fonema seq_ph[index_seq]=vect_ph[k].lips; //allora salvo l'indice dell'immagine associata al fonema nel vettore pc.printf("%d",(seq_ph[index_seq])); index_seq++; //mi sposto di una posizione avanti nel vettore z=z+1; //mi sposto di una posizione avanti nella stringa di ingresso } } } } ok3=false; ok2=false; ok1=false; } return; } void insert() { int i=0; char ch=0; do { if (pc.readable()) // if there is an character to read from the device { ch = pc.getc(); // read it if (i<200) // just to avoid buffer overflow stringa[i++]=ch; // put it into the value array and increment the index } } while (ch!='\n'); // loop until the '\n' character stringa[i]=0; pc.printf(stringa); } int main() { pc.baud(115200); italian_ph(); while(1){ insert(); control(); } }
1 Answer
6 years, 11 months ago.
Hi Thomas!
Without understanding the purpose of this program and the goal you want to accomplish with it, it is difficult for me to assist you with just the pasted code. However, the documentation for Mbed OS provides some helpful tips and tricks for debugging your Mbed programs:
- Debugging mbed OS applications
- Debugging with printf() calls
- Debugging with other IDEs
- Mbed OS API Reference for
Serial
Please let me know if you have any further questions!
- Jenny, team Mbed