• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zapis pomiarów na karcie SD
#14
Jeśli macie koledzy problem z funkcją millis(), bo ja rozumiem że 2^32 to jest niewielka liczba (dla Was), to można ją w każdej chwili zresetować. Rozumiem też, że dla projektów, w których istotne jest mierzenie czasu, nie instalujecie RTC (no bo po co?).

Procedura wygląda tak:
Kod:
//Deklaracja zmiennych
extern volatile unsigned long timer0_millis;

Potem gdzieś w jakiejś pętli sprawdzamy tą nieszczęsną millis().
Jeśli chcemy reset co sekundę:
(można też co jedną milisekundę, jak co poniektórzy się upierają) 

Kod:
if (millis() >= 1000){
noInterrupts ();
timer0_millis = 0;
interrupts ();
}

W ten sposób możemy resetować wartość zmiennej millis i ustawiać każdą wartość 32bit.
Oczywiście w normalnych warunkach, gdy zmienna millis osiągnie 4 294 967 296, to po prostu zostanie wyzerowana i odliczanie nastąpi od początku. Nie nastąpi koniec świata, jak niektórzy użytkownicy tego forum by sobie życzyli.
Gdy ktoś chce odliczać wielkie interwały, to nie musi stosować powyższego kodu, tylko sprawdzać, czy millis się nie przepełniło, a jeśli tak to inkrementować jakąś zmienną, lub co innego tam zaznaczyć.
Można na przykład założyć, że:
{49 dni
 17 godzin
 2 minuty
 47 sekund
 296 milisekund}
to jest epoka Arduino i liczyć kolejne epoki.
Na prawdę funkcja millis() nie jest jakimś potworkiem i jego używanie nie jest problemem.
Nie prawdą jest też, że:

es2 napisał(a):Ten co wymyślił millis musiał być kretynem albo naćpany. 
I jeszcze jedno:
es2 napisał(a):Problem przepełniania jest o czym niejedne już się dowiedział. Co się stanie jak czekając np 60 minut, użyję rozkazów:
x=millis() + 60*60*1000;
if( millis() > x )
a millis będzie równe 0xFFFFFF00 ? 

Równie dobrze można zapytać, co się stanie:
char x, y;
x = y + 250;
a y będzie równe 10 ???????????????????????
No masz babo placek.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Wiadomości w tym wątku
Zapis pomiarów na karcie SD - przez sawka234 - 13-07-2018, 23:35
RE: Zapis pomiarów na karcie SD - przez es2 - 14-07-2018, 10:26
RE: Zapis pomiarów na karcie SD - przez sawka234 - 14-07-2018, 13:24
RE: Zapis pomiarów na karcie SD - przez es2 - 14-07-2018, 17:12
RE: Zapis pomiarów na karcie SD - przez kaczakat - 15-07-2018, 19:25
RE: Zapis pomiarów na karcie SD - przez es2 - 15-07-2018, 20:56
RE: Zapis pomiarów na karcie SD - przez kaczakat - 15-07-2018, 21:53
RE: Zapis pomiarów na karcie SD - przez es2 - 15-07-2018, 22:29
RE: Zapis pomiarów na karcie SD - przez es2 - 16-07-2018, 06:29
RE: Zapis pomiarów na karcie SD - przez kaczakat - 16-07-2018, 11:55
RE: Zapis pomiarów na karcie SD - przez es2 - 16-07-2018, 13:08
RE: Zapis pomiarów na karcie SD - przez kaczakat - 16-07-2018, 18:33
RE: Zapis pomiarów na karcie SD - przez es2 - 16-07-2018, 19:02
RE: Zapis pomiarów na karcie SD - przez Robson Kerman - 16-07-2018, 22:52
RE: Zapis pomiarów na karcie SD - przez kaczakat - 18-07-2018, 02:42
RE: Zapis pomiarów na karcie SD - przez es2 - 18-07-2018, 09:48
RE: Zapis pomiarów na karcie SD - przez es2 - 18-07-2018, 15:55

Skocz do:


Przeglądający: 1 gości