Skocz do zawartości

Wielozadaniowość


Pomocna odpowiedź

(edytowany)

Czekam na wskazanie baboli

Dowcip o pierwszej kobiecej wyprawie kosmicznej:

załoga: Houston, Houston mamy problem

kontrola lotów: Proszę go opisać

załoga: Houston. Domyśl się sam 

Edytowano przez Kogut007
Uzupełnienie odpowiedzi

To czekaj dalej.

Widzisz - początkujący jeśli pokazuje kod i pyta czy jest dobrze to mu się pokazuje co jest źle.

Jeśli natomiast ktoś udaje speca, popełnia sążnisty artykuł uważając czata giepata za wyrocznię i nawet nie sprawdza swoich wypocin - wybacz, ale musi nauczyć się języka w którym pisze kody (to że coś się skompiluje nie znaczy że działa), czytać dokumentacje... a w linku który podał @orb777 był dokładnie pokazany ten błąd i przykład jak powinno być prawidłowo.

Tak że pytaj SI,  jeśli użycie własnej jest za trudne.

(edytowany)

do ethank. Gdybyś zechciał sprawdzić informację z linku, to byś przekonał się, że dokumentacja nie jest wyrocznią. Wystarczyłoby zmodyfikować przykład  chociażby z Forbota: https://forbot.pl/blog/kurs-arduino-ii-wielozadaniowosc-opoznienia-z-millis-id18418, który zmodyfikowałem tak, aby przepełnienie otrzymać po 65 sekundach i przy okazji wyświetlić różnicę czasu.

unsigned short aktualnyCzas = 0;
unsigned short zapamietanyCzas = 0;
unsigned short roznicaCzasu = 0;
void setup(){
  Serial.begin(9600);
}
void loop(){
  //Pobierz liczbe milisekund od startu
  aktualnyCzas = (short) millis();
  roznicaCzasu = aktualnyCzas - zapamietanyCzas;
  
  //Jeśli różnica wynosi ponad sekundę
  if (roznicaCzasu >= 1000) {
    //Zapamietaj aktualny czas
    zapamietanyCzas = aktualnyCzas;
    //Wyslij do PC
    Serial.println(roznicaCzasu);
    Serial.println(aktualnyCzas);
  }
}

Powołujesz się na dokumentację. Zakładasz, że jest nieomylna i na tej podstawie publicznie stawiasz mi zarzuty. Nie sprawdziłeś, czy moje rizwiązanie jest poprawne czy może dokumentacja jest błędna? Co sądzisz o bezkrytycznym (i innym też) rozpowszechnianiu błędów? Co do udawania speca, to pamiętaj, że o rzemieślniku świadczą jego dzieła. Pokaż moje błędy, a nie powołuj się na cokolwiek bez sprawdzenia. Poza tym pamiętaj, że nie ma jedynie słusznej drogi do dowolnego celu.  

I jeszcze jedno. Jeśli ktoś udaje fachowca i robi to dobrze, to po prostu jest fachowcem.

Edytowano przez Kogut007
Uzupełnienie odpowiedzi

Popraw błąd (a właściwie błędy) bo na razie ten cały artykuł to stek bzdur.

A jeśli uważasz że dokumentacja Arduino jest błędna to zgłoś poprawkę, bo na razie rozpowszechniasz jakieś bzdury wyssane z palca typu "wiem ale nie powiem". 

BTW. cholernie nie lubię jak się zniekształca mój nick ale czego mam wymagać od takich przemądrzalców co wiedzą lepiej a nie potrafią obsługiwać edytora na forum...

do ethank. Jak do tej pory nie wskazałeś ani moich błędów, ani nie wykazałeś, że mój artykuł to stek bzdur. Co więcej, nie odniosłeś się do załączonego przykładu w moim poprzednim poście. Twierdzisz, że "cholernie nie lubię jak się zniekształca mój nick". A jak sądzisz - czy ktokolwiek lubi, jak bezpodstawnie zarzuca się mu cokolwiek? I poza tym, jak sądzisz, jak stawianie takich zarzutów świadczy o Tobie? 

(edytowany)
1 godzinę temu, Kogut007 napisał:

Powołujesz się na dokumentację. Zakładasz, że jest nieomylna i na tej podstawie publicznie stawiasz mi zarzuty. Nie sprawdziłeś, czy moje rizwiązanie jest poprawne czy może dokumentacja jest błędna? Co sądzisz o bezkrytycznym (i innym też) rozpowszechnianiu błędów? Co do udawania speca, to pamiętaj, że o rzemieślniku świadczą jego dzieła. Pokaż moje błędy, a nie powołuj się na cokolwiek bez sprawdzenia. Poza tym pamiętaj, że nie ma jedynie słusznej drogi do dowolnego celu.  

Ważne żebyś ty sprawdził a nie wdawał się w pyskówki 😉 jak wykażesz że oficjalna dokumentacja jest błędna to daję sobie paznokieć przyciąć że @ethanak przyzna ci rację i przeprosi. Tymczasem brniesz w stronę... Kosza 

Edytowano przez _LM_
(edytowany)

W załaczniku, do którego się odniosłeś, jest przykład kodu testującego problem. Pokazałem, skąd go ściągnąłem, wskazałem modyfikacje, jakie w nim dokonałem. Każdy może go ściągnąć i uruchomić, także Ty. Program realizuje przepełnienie po 65 sekundach i na konsoli wyświetla aktualny czas i różnicę czasu. Zobacz, co się dzieje na wydruku w 66 sekundzie - sprawdź konsolę: czas i różnicę czasu. Jeśli to nie jest dowodem na błąd w dokumentacji, to co nim jest? W załączeniu zrzut ekranu.

obraz.thumb.png.b3465f6ec4856f5378eff1eb7aaf7ddf.png

Edytowano przez Kogut007

Kompiluję na Arduino 2 - nie wyrzuca błędu. Faktycznie, zgodnie z zasadami sztuki powinno być static long PrevLed = 0L; Przepraszam za błąd

Poprawione funkcje:

void task_dioda() {
static long PrevLed = 0L;  
if (millis() - PrevLed >= int(LED_PERIOD) ) {
     if(digitalRead(LED_BUILTIN) == HIGH) digitalWrite(LED_BUILTIN, LOW); else digitalWrite(LED_BUILTIN, HIGH);
     PrevLed = millis();
  }
}

void task_nuda() { // liczba wywołań funkcji w czasie 1 sekundy
  static long PrevPrnt = 0L;
  static long Licznik = 0L;
  if(millis() - PrevPrnt >= 1000) {
    Serial.println(Licznik);
    Licznik = 0;
    PrevPrnt = millis();
  }

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...