Nejste přihlášen/a.
Dobý den,
mám dotaz na problém, s kterým se už několik dní trápím a tak se obracím s otázkou sem a doufám že najdu někoho zběhlejšího kdo by mi s tímto poradil.
Týká se objektového programování v Arduinu. Vytvořím si objekt, který má vlastní proměnné (viz obrázek Knihovna)
// Constructor
Zasobnik_prijimaci::Zasobnik_prijimaci() {
int velikost_vyuziti_zasobniku;
int velikost_zasobniku;
}
Proměnné "velikost_vyuziti_zasobniku" pak nastavím velikost například 200 a nikde dál její hodnotu neupravuji. V main/loop pak do smyčky volám dotaz na hodnotu této proměnné vždy když pošlu do arduina nějaká data.
Problém je v to, že 5x za sebou se hodnota proměnné nezmění (nemá ani důvod), ale pak se najednou změní. Moje podezření je, že špatně deklaruji ty proměné v konstruktoru/ špatná alokace paměti...?
Nemá někdo nápad co dělám špatně/ jak by se to mělo opravit?
V příloze posílám pár fragmentů kódu, kdyby se v tom náhodou chtěl někdo šťourat trochu víc.
Identifikoval jsem problém blíže ke zdroji.
chyby dělají:
řádky 185 - paket_velikost = prijimaci_zasobnik[4];
řádek 193 - paket_kontrolni_soucet = prijimaci_zasobnik[5];
v přiloženém archivu je to soubor Zasobnik_prijimaci.cpp
netuším proč, ale při tomto zápisu dojde k tomu, že se v proměnná prijimaci_zasobnik[4] posune na místo prijimaci_zasobnik[3] a prijimaci_zasobnik[4] zůstane bez hodnoty. Nevím jestli jsou ty proměné nějak vadně zadefinované, už mi z toho jde hlava kolem. Možná špatné zadefinování hodnot paket_velikost , paket_kontrolni_soucet a prijimaci_zasobnik. No já ale vůbec netuším v čem je ta chyba.
![]() |
Parova_komunikace.rar | 3.86 kB |
Jen tak na dálku. Tyhle divný chování může způsobovat kolize tabulek proměnných s pamětí programu za jeho běhu, zkontrolujte si obsazení paměti za běhu.
Druhá věc, která mě napadá je kolize lokálních a globálních proměnných.
Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.
Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.