Skocz do zawartości

Czy jest możliwość zabezpieczenia kodu w Arduino lub esp32 przed odczytaniem z mikrokontrolera?


Tom28

Pomocna odpowiedź

Żeby nie było że z sufitu daję przykłady, jak widać nawet po kilku latach ta biblioteka wygląda tak samo BME280 funkcja init

bool Adafruit_BME280::init() {
  // check if sensor, i.e. the chip ID is correct
  _sensorID = read8(BME280_REGISTER_CHIPID);
  if (_sensorID != 0x60)
    return false;
  // reset the device using soft-reset
  // this makes sure the IIR is off, etc.
  write8(BME280_REGISTER_SOFTRESET, 0xB6);
  // wait for chip to wake up.
  delay(10);
  // if chip is still reading calibration, delay
  while (isReadingCalibration())
    delay(10);
  readCoefficients(); // read trimming parameters, see DS 4.2.2
  setSampling(); // use defaults
  delay(100);
  return true;
}

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

3 minuty temu, ethanak napisał:

A po co jest ten delay

też nie wiem 🙂

1 minutę temu, ethanak napisał:

Adafruit to nie Arduino

zgoda

Link do komentarza
Share on other sites

3 minuty temu, _LM_ napisał:

też nie wiem 🙂

W sparkfun też nie wiedzieli bo dało się zrobić liba bez tych potworków, inżynierowie Bosha również w niewiedzy żyją, na szczęście.

Link do komentarza
Share on other sites

11 minut temu, _LM_ napisał:

dało się zrobić liba bez tych potworków

Jakich potworków? Rozumiem, że delay() to Samo Zuo ™ i nie wolno go używać? A pierwsza linijka w sparkfunowym begin() to właśnie delay... potworne!

Zauważ: jest to funkcja inicjalizacji, wywoływana raz na początku programu i jakiś delay rzędu kilkudziesięciu czy nawet kilkuset milisekund nie powinien specjalnie przeszkadzać, a jest po to aby upewnić się, że chip załapał jakieś polecenie i zdążył go wykonać.

Poza tym masz tu do czynienia z funkcją, która może działać na małym Arduino (gdzie niespecjalnie coś więcej działa i delay i tak gdzieś tam w pętli się znajdzie), albo na jakimś ESP32 (gdzie delay jest raczej bardzo potrzebny, bo bez niego mało co będzie działać).

 

 

Link do komentarza
Share on other sites

7 minut temu, ethanak napisał:

Jakich potworków? Rozumiem, że delay() to Samo Zuo ™ i nie wolno go używać? A pierwsza linijka w sparkfunowym begin() to właśnie delay... potworne!

No tak, po co producent umieścił jakieś głupie flagi gotowości/zajętości. Lepiej robić puste przebiegi pętli. 

 

9 minut temu, ethanak napisał:

delay() to Samo Zuo ™ i nie wolno go używać?

używać != nadużywać zwłaszcza w miejscach gdzie nie jest niezbędny

10 minut temu, ethanak napisał:

gdzie niespecjalnie coś więcej działa i delay i tak gdzieś tam w pętli się znajdzie

oh jakby był jakiś mechanizm który pozwoli podzielić program na zadania, kurczę może jakiś prosty... millis()?

12 minut temu, ethanak napisał:

albo na jakimś ESP32 (gdzie delay jest raczej bardzo potrzebny, bo bez niego mało co będzie działać)

po co? chcesz zmienić kontekst możesz użyć task yield();

Poza tym Panie @ethanak chciałeś przykład to Ci go podałem, napisałem również dlaczego zrezygnowałem z adafruitowej biblioteki, w układzie zasilanym z baterii nawet te 100ms w inicjalizacji niepotrzebnie pali prąd. 

Link do komentarza
Share on other sites

8 minut temu, _LM_ napisał:

nawet te 100ms w inicjalizacji niepotrzebnie pali prąd. 

Jeśli czujnik sam w sobie potrzebuje jakiegoś czasu dla inicjalizacji, to ten prąd tak, czy siak będzie "spalony" - czy użyjemy delay(), czy czegokolwiek innego - ten czas trzeba odczekać.

Link do komentarza
Share on other sites

A teraz marsz do dokumentacji i poczytaj, czym się różni yield od delay i jaka jest różnica w przełączaniu kontekstów.

Jak chcesz wycisnąć z układu wszystko co się da to nie używasz bibliotek do tego nie przeznaczonych. Ewentualnie (co mi się często zdarzało) robisz sobie jakąś prostą poprawkę. W przypadku tych nieszczęsnych 100 msec przede wszystkim sprawdziłbym, czy taja wartość jest bezwzględnie konieczna, a jeśli nie to jaka. Prawdopodobnie wywaliłbym tego delaya, ale przed pierwszym odczytem zastosowałbym jakiś delay_until. A nie narzekał, że biblioteka ma delaye.

Mówisz że bateria... używasz Arduino? A ile czasu on czeka na bootloader? A... nie Arduino... no to czemu biblioteka przeznaczona właśnie dla amatorskich AVR-ów?

Poza tym postawiłeś tezę, że biblioteki Arduino są złe. Na razie podałeś dwa przykłady, w tym jeden nieprawdziwy a drugi wątpliwy.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.