Prosze o poradę jak podejść do tematu.. Sprawa ma się tak:
Buduję system, w którym jest moduł "czujnika" zrobiony na stm32l031 + RFM69 oraz Gateway które ze sobą się komunikują. Czujnik ma za zadanie zmierzyć napięcie, wygenerować z RTC aktualny czas pomiaru i wysłać go do Gatewaya,
który po otrzymaniu danych wysyła potwierdzenie do modułu. W razie nie otrzymania potwierdzenia, czujnik ponawia wysyłkę danych - i tak do 10 razy. Jeśli po 10 próbach się nie uda, to pomiar jest tracony. I to działa.
A teraz chciałbym dodać taką funkcjonalność, że jeśli moduł nie dostanie potwierdzenia, to żeby zapisywał pomiar w RAM. Przy kolejnym pomiarze moduł wyśle aktualny pomiar oraz ten z pamięci RAM, którego nie udało się wysłać
poprzednim razem. Dane jakie wysyłam to timestamp 4 bajtowy oraz napięcie jako 2 bajty. Bufor FIFO w RFM69 ma wielkość 66 bajtów, więc pomiarów mogę wysłać 10 i zostaje jeszcze 6 bajtów na np. informacje ile danych archiwalnych zawiera paczka itp.
Docelowo chciałbym przechowywać w RAM do 50 pomiarów.
Myślałem o zrobieniu dwóch 50 elementowych tablic - jednej z elementami 4 bajtowymi, drugiej 2 bajtowymi i w nich przechowywać pomiary,ale nie bardzo mam pomysł jak później to obsługiwać. Bo załóżmy, że w tablicach
przechowuję 15 pomiarów i przy kolejnej próbie udało mi się wysłać aktualny pomiar i 9 zarchwizowanych ( w sumie 10 pomiarów). Pozostaje 6 archiwalnych które muszę przeindeksować (bo z 15 zostało 6) czyli przepisać komórka po komórce:
pomiar z indeksem 10 do indeksu 0, 11->1 i tak dalej.
Gdyby zaś nie udało by się wysłac danych, to trzeba ten pomiar dodać do tablic i tez przeindeksować archiwalne pomiary zwiększając każdy o 1.
Mam nadzieję, że zrozumiale to opisałem.
A czy nie da się tego zrobić prościej?
Buduję system, w którym jest moduł "czujnika" zrobiony na stm32l031 + RFM69 oraz Gateway które ze sobą się komunikują. Czujnik ma za zadanie zmierzyć napięcie, wygenerować z RTC aktualny czas pomiaru i wysłać go do Gatewaya,
który po otrzymaniu danych wysyła potwierdzenie do modułu. W razie nie otrzymania potwierdzenia, czujnik ponawia wysyłkę danych - i tak do 10 razy. Jeśli po 10 próbach się nie uda, to pomiar jest tracony. I to działa.
A teraz chciałbym dodać taką funkcjonalność, że jeśli moduł nie dostanie potwierdzenia, to żeby zapisywał pomiar w RAM. Przy kolejnym pomiarze moduł wyśle aktualny pomiar oraz ten z pamięci RAM, którego nie udało się wysłać
poprzednim razem. Dane jakie wysyłam to timestamp 4 bajtowy oraz napięcie jako 2 bajty. Bufor FIFO w RFM69 ma wielkość 66 bajtów, więc pomiarów mogę wysłać 10 i zostaje jeszcze 6 bajtów na np. informacje ile danych archiwalnych zawiera paczka itp.
Docelowo chciałbym przechowywać w RAM do 50 pomiarów.
Myślałem o zrobieniu dwóch 50 elementowych tablic - jednej z elementami 4 bajtowymi, drugiej 2 bajtowymi i w nich przechowywać pomiary,ale nie bardzo mam pomysł jak później to obsługiwać. Bo załóżmy, że w tablicach
przechowuję 15 pomiarów i przy kolejnej próbie udało mi się wysłać aktualny pomiar i 9 zarchwizowanych ( w sumie 10 pomiarów). Pozostaje 6 archiwalnych które muszę przeindeksować (bo z 15 zostało 6) czyli przepisać komórka po komórce:
pomiar z indeksem 10 do indeksu 0, 11->1 i tak dalej.
Gdyby zaś nie udało by się wysłac danych, to trzeba ten pomiar dodać do tablic i tez przeindeksować archiwalne pomiary zwiększając każdy o 1.
Mam nadzieję, że zrozumiale to opisałem.
A czy nie da się tego zrobić prościej?