Witam,
z góry przepraszam jeśli moje pytanie jest banalne ale zarówno C jak i programowania mikrokontrolerów dopiero się uczę.
Korzystając bibliotek Dharmani'ego [url=]http://www.dharmanitech.com[/url] (FAT32, SD, UART, SPI) stworzyłem sobie układ który zapisuje dane z czterech przetworników na kartę SD jako pliki *.csv. Konstrukcja pliku wygląda mniej więcej jak na zdjęciu:
.
Chciałbym na wyświetlaczu tft wyświetlać dane z kolejnych dni w formie wykresów stałych tj np mam zapisane dane z dnia 30.12.2011 i chciałbym utworzyć z nich wykres. Jak się do tego najlepiej zabrać? Rozważam trzy możliwości. Funkcję rysującą wykresy oczywiście mam napisaną.
1) Jako, że w plikach *.csv mam zapisane dane z przetworników można by kolejno wyciągać kawałki łańcucha i poprzez funkcję atof(); zamieniać te kawałki na typ float, zapisywać w tablicy 4x96 (pomiar z 4 przetworników co 15 minut daje w 24 godzinach 96 wyników). Problem w tym, że klastry zawierające dane mają 512 bajtów i podczas czytania i siekania takiego klastra miałbym problem z kawałkami łańcucha rozłożonymi na dwa sąsiadujące klastry. Tzn np część informacji o wartości acd0 znajduje się na 508-512 bajcie pierwszego klastra a kolejna część na pierwszych bajtach kolejnego. No i tutaj na razie leżę, i dlatego zastanawiam się nad kolejnymi możliwościami.
2) Przepisywanie zawartości pliku do tablicy w pamięci flash i analogiczne operacje na tej tablicy jak w punkcie 1). Chyba rozwiązanie niedopuszczalne ze względu na "zamulenie" procesora podczas przepisywania.
3) Zapis danych do pliku w jakiejś formie binarnej (?) I potem odczyt bezpośrednio na wyświetlacz. Jest takie coś możliwe?
No i taka czwarta ostateczna możliwość. Zapisywanie dublowanych plików na kartę SD, tj jednego pełnego z opisami, godziną, datą, znakami nowej linii itd, a drugi okrojony aby zmieścić się w 512bajtach na całość pliku. Taki plik zawierałby 24 odczyty z 4 przetworników o pełnych godzinach. Zakładając, że jeden odczyt z jednego przetwornika wyglądałby np 3.33 (volt oczywiście), i każdy odczyt oddzielony byłby przecinkiem plik ważyłby 480 bajtów
. To już chyba piękna kombinacja no ale nie mam już innego pomysłu.
Mam wrażenie, że próbuję wyważyć otwarte drzwi no ale cóż
Liczę na sugestie.
Dodano po 39 [minuty]:
Teraz tak sobie pomyślałem, że mógłbym tę końcówkę klastra która nie pomieści całej linii zapisywać znakami spacji i kolejną linię zapisywać w nowym klastrze. Ale czy to konieczne?
z góry przepraszam jeśli moje pytanie jest banalne ale zarówno C jak i programowania mikrokontrolerów dopiero się uczę.
Korzystając bibliotek Dharmani'ego [url=]http://www.dharmanitech.com[/url] (FAT32, SD, UART, SPI) stworzyłem sobie układ który zapisuje dane z czterech przetworników na kartę SD jako pliki *.csv. Konstrukcja pliku wygląda mniej więcej jak na zdjęciu:
Chciałbym na wyświetlaczu tft wyświetlać dane z kolejnych dni w formie wykresów stałych tj np mam zapisane dane z dnia 30.12.2011 i chciałbym utworzyć z nich wykres. Jak się do tego najlepiej zabrać? Rozważam trzy możliwości. Funkcję rysującą wykresy oczywiście mam napisaną.
1) Jako, że w plikach *.csv mam zapisane dane z przetworników można by kolejno wyciągać kawałki łańcucha i poprzez funkcję atof(); zamieniać te kawałki na typ float, zapisywać w tablicy 4x96 (pomiar z 4 przetworników co 15 minut daje w 24 godzinach 96 wyników). Problem w tym, że klastry zawierające dane mają 512 bajtów i podczas czytania i siekania takiego klastra miałbym problem z kawałkami łańcucha rozłożonymi na dwa sąsiadujące klastry. Tzn np część informacji o wartości acd0 znajduje się na 508-512 bajcie pierwszego klastra a kolejna część na pierwszych bajtach kolejnego. No i tutaj na razie leżę, i dlatego zastanawiam się nad kolejnymi możliwościami.
2) Przepisywanie zawartości pliku do tablicy w pamięci flash i analogiczne operacje na tej tablicy jak w punkcie 1). Chyba rozwiązanie niedopuszczalne ze względu na "zamulenie" procesora podczas przepisywania.
3) Zapis danych do pliku w jakiejś formie binarnej (?) I potem odczyt bezpośrednio na wyświetlacz. Jest takie coś możliwe?
No i taka czwarta ostateczna możliwość. Zapisywanie dublowanych plików na kartę SD, tj jednego pełnego z opisami, godziną, datą, znakami nowej linii itd, a drugi okrojony aby zmieścić się w 512bajtach na całość pliku. Taki plik zawierałby 24 odczyty z 4 przetworników o pełnych godzinach. Zakładając, że jeden odczyt z jednego przetwornika wyglądałby np 3.33 (volt oczywiście), i każdy odczyt oddzielony byłby przecinkiem plik ważyłby 480 bajtów
Mam wrażenie, że próbuję wyważyć otwarte drzwi no ale cóż
Dodano po 39 [minuty]:
Teraz tak sobie pomyślałem, że mógłbym tę końcówkę klastra która nie pomieści całej linii zapisywać znakami spacji i kolejną linię zapisywać w nowym klastrze. Ale czy to konieczne?