Go Down

Topic: Come usare tanti Switch Case (o If) [Problemi memoria?] (Read 2 times) previous topic - next topic

cyberhs

Sospetto che il problema siano non il numero di if o case, ma le costanti stringa.

Quando scrivi Stringa1 = "ABC" la costante viene memorizzata.
Se poi scrivi Stringa2 = "ABC" la costante non viene memorizzata poiché già presente (è un'ottimizzazione base del compilatore)

Perciò, per risolvere il tuo problema, bisogna usare un trucco.

Ho notato che le costanti che usi sono composte più o meno dalle stesse lettere: "A", "U", "V", ecc.

Anzichè scrivere TestRx = "UAU" prova a scrivere TestRx = "U" + "A" + "U"

Ettore Massimo Albani

m_ri

@cyberhs: usare il + per concatenare stringhe va bene con la classe String,non col tipo char[]..
e se ha già problemi col char,figuriamoci con le string..

non puoi scegliere te che lettere assegnare in ogni case dello switch? in questo caso non ci  sarebbero problemi...

cyberhs

@m_ri

Ma dove hai letto che sono char[]?

Comunque se sono char[] tanto meglio: si dichiara globalmente char TestRx[x + 1] ove x è la massima dimensione prevista e poi negli if/case si assegna, al posto di TestRx = "UAU", TestRx[0] = 'U';   TestRx[1] = 'A';   TestRx[2] = 'U'; TestRx[3] = '/0';

m_ri

ho dato per scontato che usasse i char[]..cmq il tuo suggerimento continua a mangiarsi parecchia memoria..è quasi come dichiarare una matrice [139 o quel che è][4 o più]..altra strada è quella della compressione huffman..è facilmente implementabile sull'arduino,e penso che dimezzi la SRAM richiesta..

cmq ripeto la domanda: nei vari case,puoi assegnare la stringa che vuoi,basta che sia unica?oppure hai delle stringhe preconfezionate da inserire?
nel secondo caso,metti la lista..

cyberhs

#19
Sep 14, 2012, 02:44 pm Last Edit: Sep 14, 2012, 07:13 pm by cyberhs Reason: 1
@m_ri

Quote
il tuo suggerimento continua a mangiarsi parecchia memoria..è quasi come dichiarare una matrice [139 o quel che è][4 o più]


Forse non mi sono spiegato bene.

Il vettore char in questione occupa solo i byte strettamente necessari alla stringa che si vuole ottenere.
Ad esempio, supponendo che la stringa massima sia di 5 caratteri ("AUVBK"), dimensionerò globalmente char TestRx[6] e userò sempre il medesimo vettore per tutte le combinazioni:
TestRx = "UAU" ---> TestRx[0] = 'U';   TestRx[1] = 'A';   TestRx[2] = 'U'; TestRx[3] = '/0';
TestRx = "VA" ---> TestRx[0] = 'V';   TestRx[1] = 'A'; TestRx[2] = '/0';
TestRx = "VAU" ---> TestRx[0] = 'V';   TestRx[1] = 'A';   TestRx[2] = 'U'; TestRx[3] = '/0';

Go Up