Aiuto con charArray
buongiorno tutti.
ho realizzato uno sketch che gira perfettamente su arduino uno e che sfrutta un hmi nextion ed una libreria non originale per il suo controllo (libreria nextion - uso questa perchè è più semplice per quel che devo fare).
il problema è che, come dice l'ide:
poichè l'hmi ha un controllo stringhe, vorrei evitare di incappare in blocchi o frammentazioni della ram che portino blocchi del sistema nel lungo periodo.
attualmente le stringhe fisse le ho spostate in flash con la funzione f(), ma vorrei impiegare il più possibile le chararray solo che mi trovo bloccato quando devo estrapolare alcuni valori dalle stringhe in arrivo.
esempio:
in questo caso quando ricevo una stringa che inizia con 70 h devo poter estrapolare valori di ore, minuti e giorno dalla stringa stessa (la stringa intera è: 70 h235905 dove 23 sono le ore, 59 sono minuti e 05 è il giorno della settimana).
come faccio ad estrapolare due valori consecutivi dall'array anzichè solo quello dell'index tra parentesi quadre?
ho realizzato uno sketch che gira perfettamente su arduino uno e che sfrutta un hmi nextion ed una libreria non originale per il suo controllo (libreria nextion - uso questa perchè è più semplice per quel che devo fare).
il problema è che, come dice l'ide:
code: [select]
lo sketch usa 25.650 byte (79%) dello spazio disponibile per programmi. il massimo è 32.256 byte.
le variabili globali usano 1.340 byte (65%) di memoria dinamica, lasciando altri 708 byte liberi per le variabili locali. il massimo è 2.048 byte.
poichè l'hmi ha un controllo stringhe, vorrei evitare di incappare in blocchi o frammentazioni della ram che portino blocchi del sistema nel lungo periodo.
attualmente le stringhe fisse le ho spostate in flash con la funzione f(), ma vorrei impiegare il più possibile le chararray solo che mi trovo bloccato quando devo estrapolare alcuni valori dalle stringhe in arrivo.
esempio:
code: [select]
//----- inserimento dati rtc -----
if (message.substring(0, 4) == f("70 h"))
{
ore = (message.substring(4, 6)).toint();
minuti = (message.substring(6, 8)).toint();
giorno = (message.substring(9, 10)).toint();
settime(ore, minuti, secondi, giornosync, 4, 2015);
rtc.set(now());
}
in questo caso quando ricevo una stringa che inizia con 70 h devo poter estrapolare valori di ore, minuti e giorno dalla stringa stessa (la stringa intera è: 70 h235905 dove 23 sono le ore, 59 sono minuti e 05 è il giorno della settimana).
come faccio ad estrapolare due valori consecutivi dall'array anzichè solo quello dell'index tra parentesi quadre?
per le stringhe classiche del c, ovvero array/vettori di char, usa le funzioni strxxx() della libreria standard.
per il confronto ad esempio usa strcmp() string compare. ancora meglio strncmp() dove dici quanti caratteri confrontare.
per copiare da array ad array, strcpy(), la lunghezza di una stringa strlen()
poi essendo questo tipo di stringhe degli array, puoi accedere ad un elemento alla volta con le quadre.
per la conversione, invece di usare funzioni tipo atoi() che richiedono il vettore finisca con null (ovvero '\0' ovvero 0) puoi fare tu il calcolo leggendo semplicemente due char di ogni numero e numeri come ascii sono dal valore '0'=48 al '9'=57 quindi togli 48 ed hai il valore della singola cifra.
per il confronto ad esempio usa strcmp() string compare. ancora meglio strncmp() dove dici quanti caratteri confrontare.
per copiare da array ad array, strcpy(), la lunghezza di una stringa strlen()
poi essendo questo tipo di stringhe degli array, puoi accedere ad un elemento alla volta con le quadre.
per la conversione, invece di usare funzioni tipo atoi() che richiedono il vettore finisca con null (ovvero '\0' ovvero 0) puoi fare tu il calcolo leggendo semplicemente due char di ogni numero e numeri come ascii sono dal valore '0'=48 al '9'=57 quindi togli 48 ed hai il valore della singola cifra.
code: [select]
char buf[21];
message.tochararray(buf,20);
if(strncmp(buf,"70 h",4)==0) // if (message.substring(0, 4) == f("70 h"))
{ // esempio: "70 h235905"
// indice: 0123456789
ore=(buf[4]-48)*10+buf[5]-48; // '2' ovvero ascii 50-48=2 2*10+'3'-48
}
Arduino Forum > International > Italiano > Software (Moderator: leo72) > Aiuto con charArray
arduino
Comments
Post a Comment