stats

Printf-loop

Met een ESP als webserver is het handig om files op te slaan in SPIFFS in plaats van in PROGMEM. Wanneer de file "variabelen" bevat kunnen deze middels een printf() functie worden ingevoegd. De file wordt dan eerst in een buffer gelezen, via printf bewerkt en daarna verzonden.

Maar wat als het aantal variabelen variabel is, dus uit een soort van database komt (b.v. een struct array)?
Door de pagina in stukken te knippen kunnen we het variabele deel in een fornext loop plaatsen en deze data vervolgens in een tabel gieten. Nadeel is dat het te verzenden html buffer een voor het eindresultaat toereikende afmeting moet hebben!

De oplossing is de html data naar een tijdelijke file schrijven en deze als eindproduct te verzenden. De rede voor deze tussenstap is dat de size van de te verzenden data bekend moet zijn voordat deze wordt verzonden! Het voordeel is dat er geen html-buffer nodig is en het leesbuffer niet groter hoeft te zijn dan de "loop" als basis nodig heeft.

Is het gedeelte voor- of na de loop groter dan dat buffer, dan kan de bron-file verder opgedeeld worden. Het ingeladen deel voor de printf functie moet (!) met een NUL worden afgesoten, anders weet printf niet waar de informatie in het buffer eindigd.

In het gegeven voorbeeld is een underscore (0x5F) het scheidingsteken in de file. Deze wordt door de terminate NUL overschreven en komt daarmee niet terug in de outputfile.

Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!

HOME