2013-05-16 9 views
15

Ho già chiesto un similar question, ma mi rendo conto che non riesco a fare la testa o la coda della macrologia e della tempia. Sono un programmatore C (piuttosto che C++).Arduino F(): cosa fa in realtà

Cosa fa effettivamente F()? Quando riempie i personaggi in pgmem? Quando tira fuori personaggi da pgmem? Li memorizza? Come gestisce le situazioni di memoria insufficiente?

+1

Nella domanda precedente, sto chiedendo dove trovare l'implementazione. Dopo aver letto la fonte, mi rendo conto di non riuscire a capirlo. La domanda originale ha la sua risposta completa, quindi lo accetto. – iter

risposta

23

Non ci sono modelli coinvolti, solo sovraccarico di funzione. Il F() macro fa due cose:

  • utilizza PSTR per assicurare che la stringa letterale viene memorizzato nella memoria flash (lo spazio di codice piuttosto che lo spazio dei dati). Tuttavia, non è possibile stampare PSTR("some string") perché riceverebbe un semplice char * che rappresenta un indirizzo di base della stringa memorizzata in Flash. Dereferenziare quel puntatore avrebbe accesso ad alcuni caratteri casuali dallo stesso indirizzo nei dati. Ecco perché F() anche ...

  • invia il risultato di PSTR() a __FlashStringHelper*. Funzioni come print e println vengono sovraccaricate in modo che, dopo aver ricevuto un argomento __FlashStringHelper*, abbiano deferenziato correttamente i caratteri nella memoria Flash.

+0

Grazie. Questo ha molto più senso per me ora. Grazie. – iter

+0

Ecco un'altra risposta utile: http://forum.arduino.cc/index.php?topic=91314.msg685761#msg685761 – Ben

Problemi correlati