12 000/den znamena 500/hod, blok na SD karte je 512B. Otazka je, kolik je jedno dato v tvem pripade - pokud zaznamenavas jednu teplou, tak to snadno das do 1B s presnosti treba na 0.5 stupne ( v rozsahu -50 .. +70 stupnu pokud meris ve stinu a ne na rozpalene cerne desce, tak se v pohode vejdes - do bytu ulozis pocet pulstupnu od -50). V takovem pripade bys zapisoval na SD kartu 1x za hodinu a neriskoval ztratu vetsiho bloku dat, kvuli vypadku napajeni. Pokud bys mel takovych meridel treba 4 , tak budes zapisovat kazdych 15 minut a neriskujes delsi ztratu ...
Co jsem rychle probehnul zdroje, tak
https://www.arduino.cc/en/Reference/SD rika, ze je zalozeno na sdfatlib by William Greiman.
https://github.com/greiman/SdFat ta se prestehovala sem a pouziva
https://github.com/greiman/SdFat/blob/m ... ckDriver.h pro zapis na kartu, jsou tam funkce
virtual bool readBlock(uint32_t block, uint8_t* dst) = 0; pro cteni libovolneho bloku z karty
virtual bool writeBlock(uint32_t block, const uint8_t* src) = 0; pro zapis na libovoln misto
FAT je nadstavba nad blokovou strukturou disku
https://cs.wikipedia.org/wiki/File_Allocation_Table a pokud ji nepotrebujes (tedy nepotrebujes soubory), tak muzes psat na disk bez ni a rezii si spravovat sam (coz ti v takto jednoduchem pripade usetri strasnou spoustu RAM a taky strasnou spoustu kodu (FLASH), ktere muzes vyuzit lepe - ten nastineny zpusob ukladani je na zdroje radove mene narocny)
Seek se dela tak, ze si proste prectes sektor dle libosti, uvidis, jestli ma spravne poradove cislo a pokud ne, tak ho muzes dopocitat a na druhy pokus se trefit, nebo konstatovat, ze takovy zaznam uz nemas (hmm 4GB to je asi 3.800.000 kB, 12kB/den je historie asi tak 300.000 dni, tedy kolem tisice let - pokud je jeden zaznam teploty 1B - to by mohlo stacit na to, aby se ta SD ani nestihla prepsat jednou dokola a drzela data za celou dobu zpet)
NASu se muzes zeptat, ktera data dostal jako posledni a poslat mu vse od toho mista dal. (Samozrejme pokud si ulozis cislo, co jsi uz poslal, tak dokud to Arduino nekdo nevypne, tak se ani ptat nemusis, posles od toho mista dal a prislusne si to cislo v pameti zvetsis.)
Pripadne muzes naivne predpokladat pri startu, ze NAS nebyl nedostupny vic jak jeden den a poslat mu data za den (nebo dva) zpatky, s tim, ze holt budou duplicity a NAS si s nima nejak poradi a snad to nebude vypnute tak dlouho, aby tam neco chybelo.
A samozrejme muzes to Arduino ciste vypnout (tedy rict mu, at ulozi vse co ma a da vedet a pak ho vypojit), vytahnout kartu a precist si to primo z ni kratkym programem na velkem pocitaci, kartu vratit, zapnout Arduino a pak v klidu desifrovat ulozeny obsah karty.
Rychlost vyhledavani ti nereknu, zalezi na parametrech te karty, ctecky a asi milionu jinych veci, ale pravdepodobne te zajimat nemusi - urcite je rychlejsi, nez prez souborovy system a pokud to ctes po jednotlivych sektorech, tak jeden sektor je precteny bleskove (seekovat nemusis, posles primo adresu). Teda, uvnitr interruptu bych to asi nedelal a pokud mam neco na interruptech zavisle, tak bych to s nima nejak vtipne synchronizoval, ale asi mluvime o milisekundach.
ten seek funguje tak, ze kdyz chci sektor 1234, tak zavolam neco jako readBlock(1234,&buffer), karta naadresuje bunku 1234 (pro ni je to jako pro tebe cist hodnotu z pole na prislusnem indexu) a posle prislusnych 512B, ktere skonci v tom bufferu. prenos tech 512B z karty do pameti na tom trva nejdele.
---
Samopzrejme jde pouzit i jine knihovny, urcite jich existuje asi tak milion a nebo si najit specifikace SD ctecky a napsat si to sam, ale tohle bylo, co se da najit strasne snano a rychle a zaroven to je zminovano oficialni dokumentaci.
A nejspis, pokud mas na disku uz tu SD knihovnu od Arduina, tak presne tyhle funkce obsahuje taky nekde, takze staci pohledat na lokalnim disku a pouzit to, co pouziva ofiko arduino primo z jehop ofiko knihovny - jen si to vytahnes ven samostatne, abys netahal veskery ten FAT balast okolo.
(A poznamka na zaver - Arduino je urceno pro humanitni umelce a tak jim co nejvic "usnadnuje zivot" i za cenu toho, ze pred nima schova vsechny ostre noze, aby se nemohli riznout, i za cenu, ze mekkou veku budou pizlat plastovou lzici deset minut - takze jejich zdrojaky podle toho vypadaji - na efektivitu se moc nehraje, na korektnost jen do te miry, aby to uzivatel nemel nahodou slozite a kdyz obcas neco sleti, tak to sleti, stejne je to urceno jen na hrani. Hlavne pred uzivatelem nejak zamaskovat vetsinu chyb a problemu, aby se nam nahodou neleknul - da se s tim zit, ale da se z toho HW ziskat i mnohem vic - staci se nebat a ucit. (Jo a pokud pri zkoumani zdrojaku narazis na neco, co ti prijde jako blbost, tak neni vylouceno, ze to doopravdy blbost je.))