Dataflash

Z onlinetechnology.cz

Přejít na: navigace, hledání

Obsah

Využití paměti DATAFLASH v SDS-C programu

Zapisovat uživatelské údaje do paměti DATAFLASH lze teprve při použití verze SDS-C č. 05 a novější. To znamená, že musíte mít v zařízení nahraný nejnovější firmware.

Důležité varování

Počet zápisů do paměti typu DATAFLASH je omezen. Omezení je dáno technologií paměti (FLASH paměti). Toto omezení platí jak pro sys[100] až sys[115], tak pro doplněný prostor od verze SDS-C č. 05.

Maximální počet zápisů je těžké přesne číselně určit. Doporučuji nastudovat si dokumentaci od výrobce (firma Atmel - web: serial flash memories, typ. 45DB).

Při každém zápisu dochází k přepsání celé stránky paměti, podle toho, kam konkrétní položka patří (o to se stará firmware v zařízení SDS, pro uživatele SDS-C je to transparentní).

Po určitém počtu zápisů může dojít k poškození obsahu stránky, takže při čtení vrátí jiné hodnoty než tam byly zapsány, nebo do ní už nepůjde vůbec zapsat (změnit hodnotu).

Počet takových zápisů (aby došlo k poškození) je v desítkách až stovkách tisíc zápisů - což je sice na první pohled vysoké číslo, ale pokud např. budete zapisovat údaje každou vteřinu, pak deset tisíc zápisů dosáhnete za skoro 3 hodiny provozu, takže za pár dní s takovým tempem bude pamět zničená a bude potřeba ji vyměnit za novou.

Odsud se odvíjí i doporučení jak paměť DF využívat - např. pro ukládání konfigurace, která se mění jednou za čas atd. Naopak pro ukládání záznamů už se to jeví jako méně vhodné, zejména je-li k dispozici možnost údaje odesílat přes Ethernet na nějaký server a ukládat to tam.

Využití paměti DataFlash v SDS-C

Paměť je dostupná od pozice 0 po pozici 7259 včetně (toto platí pro verzi firmware vydanou v listopadu 2011).

Čtení a zápis se provádí zavoláním příslušné interní funkce. Hodnota se vždy předává v sys[99].

Zápis:

 sys[99] = 1234;
 write_dataflash(120);  // tato interní funkce zapíše hodnotu (1234) do DF na pozici 120

Příklad provede zápis na pozici 120, a zapíše se tam hodnota 1234.

Poznámka: Paměť poskytuje přístup ke svému obsahu po jednotlivých stránkách. Každá stránka má 264 bajtů, což odpovídá 66 signed long proměnným na jednu stránku. Při každém zápisu provede program přečtení celé stránky, změní v ní 4 bajtu (na odpovídajícím umístění) a pak celou stránku zapíše zpět do paměti. Stránky jsou uloženy těsně za sebou, takže najít pozici pro konkrétní položku je velmi snadné. Takže při změně jediné položky dojde k přepisu celé stránky (a jinak to s tímto typem DF paměti nelze provést). Takže pokud postupně provedete zápis do jednotlivých 66 položek na stránce, dojde k 66 násobnému přepisu celé stránky v DF. Toto opět výrazně přispívá ke snížení životnosti paměti DF, viz varování výše. Do budoucna se chystá možnost zápis do stránky pozdržet, pokud budete vědět, že tam chcete změnit více položek, které leží ve stejné stránce. V současném firmware tato možnost ale není.


Čtení:

 read_dataflash(120);  // tato interní funkce přečte hodnotu z DF z pozice 120
 i = sys[99]; // hodnota je uložena v konkrétní sys[], takže si ji můžeme vyzvednout, zde do proměnné "i"

Rychlost

Při zápisu a také i při čtení dochází k zablokování činnosti SDS-C programu. Zdržení je až 250 msec, záleží to na paměti DF.

Čtení využívá cache o velikosti stránky, takže pokud budete přemýšlet a vhodně umístíte jednotlivé položky (tak aby v každé stránce byly u sebe ty, které se častou čtou společně hned po sobě, atd.), tak nebude program tak často provádět nové čtení z DF (a blokace při čtení je pak omezena na minimum). Zápis však vždy trvá delší dobu.

Osobní nástroje
Translate