A ja odpisałem z grzeczności i napisałem ze esp32 to rozsądny wybórkrycha88 pisze: ↑pn sty 13, 2020 9:15 amlinka wrzuciłem jako ciekawostka
BLE Supla Gateway - wyzwanie dla programistów
Spoko pomysł z tą bramką. Akurat ostatnio zrobiłem sobie obsługę Xiaomi Flora https://www.aliexpress.com/item/32841210035.html. Tu mój kod do obsługi urządzenia jakbyście chcieli dodać https://github.com/pikciu/Arduino-Flora. W wolnej chwili zrobie z tego libkę do PlatformIO bo na razie mi się nie chciało
działa od wczoraj na esp32 te labelki trzeba pozmieniac bo taki mix pol-eng słabo wygląda
działa od wczoraj na esp32 te labelki trzeba pozmieniac bo taki mix pol-eng słabo wygląda
Dzięki za udostępnienie projektu
W konstruktorze klasy Flora używasz mało bezpiecznego rozwiązania: https://github.com/pikciu/Arduino-Flora ... ora.cpp#L4
Przypisujesz wskaźnik do ciągu znaków. To się może dość łatwo wysypać w wielu sytuacjach. Taki ciąg znaków powinien być kopiowany
Widzimy się na Supla Offline Party vol. 2
Dzięki za code review jak powinno być poprawnie? na codzień zajmuję się programowaniem na iOS (Swift) i do c++ mi dalekoklew pisze: ↑wt sty 14, 2020 9:06 pmDzięki za udostępnienie projektu
W konstruktorze klasy Flora używasz mało bezpiecznego rozwiązania: https://github.com/pikciu/Arduino-Flora ... ora.cpp#L4
Przypisujesz wskaźnik do ciągu znaków. To się może dość łatwo wysypać w wielu sytuacjach. Taki ciąg znaków powinien być kopiowany
W
Kod: Zaznacz cały
char *
Najprościej jest zrobić w klasie Flora zmienną
Kod: Zaznacz cały
char address[MAX_SIZE_OF_ADDRES];
Widzimy się na Supla Offline Party vol. 2
A czy const nie zabezpiecza mnie przed tym, że w tym miejscu w pamięci coś mi nadpisze dane? O ile dobrze rozumiem odpowiedz https://stackoverflow.com/questions/983 ... r/47300995 to właśnie tak jest. Mam wskaźnik na niemodyfikowany ciąg znaków. Wskaźnik mam zapamiętany w klasie Flora i dopóki go "nie przesunę" będzie on wskazywać na ten sam obszar w pamięci, a obszar ten jest "zarezerwowany" przez const i nie można go zmienić. Tak to rozumiem ale bardzo możliwe że jestem w błędzieklew pisze: ↑wt sty 14, 2020 9:34 pmWjest trzymany wskaźnik do miejsca w pamięci zawierającego jeden bajt (char). Twój aktualny kod po prostu kopiuje ten adres w pamięci. Gdy więc stworzysz instancję klasy Flora przekazując ciąg znaków w jakimś obiekcie tymczasowym, to później ta klasa może się odwoływać do pamięci, w której mogą być już inne dane.Kod: Zaznacz cały
char *
Najprościej jest zrobić w klasie Flora zmiennąi kopiować dane np. funkcją strncpy (http://www.cplusplus.com/reference/cstring/strncpy/)Kod: Zaznacz cały
char address[MAX_SIZE_OF_ADDRES];
W każdym razie chyba nie ma co zaśmiecać tematu ale jak Ci się chce dalej mi to tłumaczyć to jest priv
To tak tylko dla potomnych napiszę, że nie, to Cię przed niczym nie zabezpieczahZkgZK pisze: ↑wt sty 14, 2020 9:49 pm A czy const nie zabezpiecza mnie przed tym, że w tym miejscu w pamięci coś mi nadpisze dane? O ile dobrze rozumiem odpowiedz https://stackoverflow.com/questions/983 ... r/47300995 to właśnie tak jest. Mam wskaźnik na niemodyfikowany ciąg znaków. Wskaźnik mam zapamiętany w klasie Flora i dopóki go "nie przesunę" będzie on wskazywać na ten sam obszar w pamięci, a obszar ten jest "zarezerwowany" przez const i nie można go zmienić. Tak to rozumiem ale bardzo możliwe że jestem w błędzie
W każdym razie chyba nie ma co zaśmiecać tematu ale jak Ci się chce dalej mi to tłumaczyć to jest priv
"const" informuje kompilator, aby nie pozwalał Tobie modyfikować zawartości wskazywanej przez ten wskaźnik.
Natomiast nic nie stoi na przeszkodzie, aby inne częsci programu coś po tej pamięci pisały, gdy dostaną taki przydział (a to się może zdarzyć).
Dalej możemy ciągnąć tego offtopa na priv
Widzimy się na Supla Offline Party vol. 2
Używając strncpy zwróć uwagę na problem możliwego skopiowania ciągu znaków bez nulla na końcu. Jeśli nie użyjesz tej funkcji świadomie to możesz mieć problem z uzyskaną kopią.
Dla bezpieczeństwa użyj snprintf do skopiowaniu ciągu lub jeśli już użyjesz strncpy to po jego wystąpieniu
wykonaj
dest[sizeof(dest)-1] = 0;
Dla bezpieczeństwa użyj snprintf do skopiowaniu ciągu lub jeśli już użyjesz strncpy to po jego wystąpieniu
wykonaj
dest[sizeof(dest)-1] = 0;
Się dowiedziałem że te nowe kwadratowe czujniki mają zakodowane komunikaty.
Są już rozkodowane ale trzeba je inaczej obsłużyć
https://github.com/custom-components/se ... ZDCgB8EEEU
Te okrągłe podobno wysyłają czystym tekstem.
Są już rozkodowane ale trzeba je inaczej obsłużyć
https://github.com/custom-components/se ... ZDCgB8EEEU
Te okrągłe podobno wysyłają czystym tekstem.