GOOGLE TRANSLATION
Un aggiornamento:
Dopo aver finito di scrivere SafeStrings, mi è stato chiesto di esaminare più da vicino Arduino Strings.
Si scopre che seguendo alcune linee guida è possibile utilizzare correttamente le stringhe nel codice.
Su Uno e Mega2560 risulta che le stringhe sono essenzialmente a prova di proiettile.
Per altre schede (con più memoria) vedere le linee guida nel mio tutorial
Domare le stringhe Arduino
Per ESP32 / ESP8266 che utilizza ampiamente le stringhe nelle loro librerie di supporto Web, Taming Arduino Strings suggerisce un riavvio automatico periodico e fornisce un codice di esempio per farlo.
Sto usando questo approccio su un progetto commerciale che sto facendo in questo momento.
SafeStrings ha ancora alcuni vantaggi rispetto alle stringhe Arduino
Controllo completo sull'utilizzo della memoria
Le SafeStrings sono un wrapper attorno a un char [] che fornisce sicurezza dai sovraccarichi del buffer e dall'indicizzazione fuori intervallo. Poiché SafeString utilizza un carattere fisso [], l'utilizzo della memoria viene corretto quando si crea SafeString e non cambia. Quando crei SafeString globali, il loro utilizzo della memoria viene segnalato dal compilatore, quindi è più semplice vedere quanta SRAM sta utilizzando il tuo codice. SafeString utilizza anche meno memoria perché non è necessario convertire "testo" in SafeString prima di utilizzarlo nelle funzioni compare e indexOf.
Cattura, contrassegna e ignora gli errori e stampa un messaggio dettagliato per aiutarti a correggere l'errore
SafeString controlla ogni sua chiamata di funzione per puntatori nulli, sovraccarico del buffer e indicizzazione fuori intervallo. Le chiamate di funzione che causerebbero un errore vengono ignorate, ovvero SafeString rimane invariato, l'errore viene contrassegnato e viene visualizzato un messaggio di errore dettagliato che consente di individuare il problema e risolverlo. SafeString inoltre non ha gli errori presenti nel codice di Arduino String
Lettori seriali semplici non bloccanti
Il lettore di stringhe Arduino, Serial.readStringUntil () può bloccare il ciclo in attesa durante l'attesa dei dati. Sebbene sia possibile codificare lettori non bloccanti utilizzando le stringhe, i metodi in SafeString sono più semplici e hanno una serie di funzioni avanzate come tokenizzare l'input, timeout di input non bloccanti, eco selezionabile dell'input e una funzione skipToDelimiter per saltare un- input voluto o parziale. I lettori di SafeString contano anche il numero di caratteri letti in modo da poter controllare quando è stata ricevuta un'intera risposta web.
Migliori metodi di analisi dei numeri
Come notato sopra, il metodo String toInt () può fornire risultati strani. SafeString toInt (int i), toLong (long l) ecc., Restituiscono true se la stringa è un numero valido e aggiorna l'argomento, altrimenti restituiscono false. Il metodo String toInt () restituisce solo 0 se la stringa non è un numero e restituisce 5 per "5.9" e per "5a"
Più facile da usare con le biblioteche
Le librerie di terze parti spesso restituiscono i risultati di testo come carattere *. Se usi le stringhe, farai una copia completa del testo quando assegni il risultato a una stringa, usando memoria extra. D'altra parte con SafeString, puoi semplicemente racchiudere il char * in una SafeString senza prendere una copia e quindi analizzare ed elaborare i dati in modo sicuro.
Altre funzioni di manipolazione del testo
Mentre le stringhe hanno i metodi startsWith ,endsWith, indexOf, lastIndexOf, substring, replace e remove, SafeString ha tutti questi metodi più un set completo di metodi print () per stampare su SafeString e prefix (), startsWithIgnoreCase (), indexOfCharFrom () , removeBefore (), removeFrom (), removeLast (), stoken (), nextToken () e readFrom () non bloccante, writeTo (), read (), readUntil (), readUntilToken ()
La libreria SafeString dispone anche di una classe SafeStringStream che consente di automatizzare il test degli schizzi che si aspettano di elaborare l'input dei dati Stream.
Esistono anche classi BufferedInput e BufferedOutput che forniscono buffer di input più grandi e output seriale non bloccante. Nella libreria SafeString sono incluse anche la classe temporale millisDelay non bloccante e una classe loopTimer.