Skocz do zawartości

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


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;
}

 

A po co jest ten delay? Spróbuj go wywalić i sprawdź czy działa. Jeśli działa to zgłoś błąd. Jeśli nie i masz lepszy pomysł, wrzuć patcha.

3 minuty temu, ethanak napisał:

A po co jest ten delay

też nie wiem 🙂

1 minutę temu, ethanak napisał:

Adafruit to nie Arduino

zgoda

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.

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ć).

 

 

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. 

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ć.

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.

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...