Strana 1 z 1

MPLAX IDE - niektore premenne sa nedaju zobrazit vo Watches tabulke

Napísané: 11 Sep 2022, 12:34
od používateľa romiadam
Ahojte,

Chcel by som konecne zistit, preco sa mi deje toto. Taketo veci ma psychicky likviduju.... :) :

Zacal som tak ze som deklaroval lokalne premenne vo Funkcii SPI_EEPROM.c bez volatile. Vsetko co tam vidite su to lokalne premenne funkcie SPI_EEPROM.c. Po skompilovani a PC sa zastavil vo funkcii SPI_EEPROM.c som vsetky ponatahoval do Wathces tabulky a zobrazili sa mi len dva Month a Coded_Tm_Dt. Ostatne sa nezobrazili.

image.png

Tak som zacal googlit a zistil som, ze tam mam dopisat volatile. Zkompiloval som to, PC som odkrokoval to tej funkcie a stale nic, to iste, ale akonahle som zase tam natiahol len jeden napr. Day, tak sa tam vsetko objavilo a Day tam bol 2x.


image.png


Ak zmazem volatile, zkompilujem to cele, PC a resetne sa to, tak zase zmiznu tie, ktore nemaju deklarovane volatile.

image.png
image.png

Vam, co pouzivate MPLAB X IDE sa to deje tiez? Je toto normalne, alebo je to problem MPLAB X IDE ako bug? Preco sa toto deje? Aky je rozdiel medzi Month a

Mam vsetky premenne vo funkciach oznacovat ako volatile, ak to chcem sledovat pocas debugovania?
Ako to riesite vy co robite v MPLAB X IDE?
Doteraz som to riesil narychlo tak, ze vsetko mam lokalne premenne. Tie sa vo Variables zobrazuju OK, ale to ze mat vsetko ako globalne premenne nie je riesenie.

Re: MPLAX IDE - niektore premenne sa nedaju zobrazit vo Watches tabulke

Napísané: 11 Sep 2022, 13:17
od používateľa peterple
MP LAB nepoznám , tak len obecne. Volatile je modifikátor ktorý naznačuje prekladaču že premenná sa môže zmeniť kedykoľvek. Používa sa to na to aby kompilátor neurobil optimalizáciu a vždy načítaval obsah premennej do registrov. Príkladom je premenná ktorá sa mení v prerušení. V hlanom programe potom nejaký cyklus čo počíta s hodnotou tejto premennej. Ak je tam toho málo kompilátor by mohol načítať hodnotu premennej do registra a potom už pracovať len s touto hodnotou nakoľko sa mu to nikde v cykle nemení. To sú takzvané registrové premenné a slúži na to aby sa kód zrýchlil a skrátil. Volatile tomu zabráni a pri každom použití danej premennej sa jej obsah načíta priamo z pamäte.
Funguje to aj tak že niektoré lokálne premenné môžu byť čisto registrové. Teda v pamäti vôbec nefigurujú, ani v zásobníku. A ani IDE o nich nevie tak ich nezobrazuje. Takže vtedy to volatile zrejme pomôže.
Ale to je celé aj tak fuk. Tieto premenné sa dajú zobraziť len vtedy keď stojíš v príslusnej časti kódu kde existujú. Aspoň moje IDE to tak robí.

Inak pri MCU je niekedy lepšie debug robiť nie cez IDE (na niektorých MCU to nie je moc spoľahlivé) ale tak že sa ich obsah vypisuje na sériový port. Ja tak debugujem 99.99% času. Hlavne preto že to potrebujem často vidieť v reálnom čase, alebo aspoň čo najviac v reálnom čase lebo aj tie debug výpisy ten kód ovplyvňujú

Re: MPLAX IDE - niektore premenne sa nedaju zobrazit vo Watches tabulke

Napísané: 11 Sep 2022, 14:07
od používateľa romiadam
Diki za info.
Tak zatial tie co sa mi nezobrazia pocas debuu oznacim ako volatile a potom po ukonceni debugu a overeni funkcnosti funkcie to volatile zase odstranim. :thumbup:

Uvidime, ci niekto kto robi s MPLAB X IDE sa k tomu vjadri.