Deklarace proměnných v Atmel Studio

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Jirka525
Příspěvky: 325
Registrován: 22 kvě 2013, 00:00
Bydliště: Psáry JN79GW

Deklarace proměnných v Atmel Studio

#1 Příspěvek od Jirka525 »

Ahoj, jsem drobet zmatený, jak Atmel studio pracuje s proměnnými. Potřeboval jsem deklarovat volatilní proměnné ve funkci. Udělal jsem to následovně:

char funkce1(parametry)
{
volatile char var1, var2;
char var3, var4;

kód funkce
return;
}

přičemž var1, var2 se chovají jako obyčejné lokální. Při zavolání funkce mají nulové hodnoty a nikoli hodnoty, které měly při předchozím ukončení "funkce1". Proměnné var3, var4 - tady jsem neměl ambice aby si pamatovaly hodnotu i po opuštění funkce. Stačilo by mě kdyby si pamatovaly hodnotu alespoň mezi první a poslední {}. Leč ani to se nestalo. Někdy v průběhu vykonávání kódu funkce1 také změní hodnotu. Jediné, co mě napadá, mám povolené přerušení. Jestli není možné, že při odskoku do přerušovací rutiny a návratu se nakopne zásobník?
Díky za radu
Jirka
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#2 Příspěvek od mtajovsky »

Ohledně var1 a var2 je to správně a není to otázka Atmel studia, ale jazyka C. Vaše proměnné jsou automatické, alokované na zásobníku vždycky znovu po vstupu do funkce. Klíčové slovo volatile upozorňuje, že mohou být změněny i někde jinde a asynchronně a překladač nepoužívá ohledně nich optimalizaci do registru (když automatické proměnné nejsou jinde viditelné a tak to postrádá smysl). Pokud chcete, aby se hodnota proměnné zachovávala i mezi voláními funkce, musí mít třídu uložení (storage class) "static". Jestli mění samovolně hodnotu i ve funkci, bude to bug v programu (například přetečení pole na zásobníku). Proměnné var3 a var4 mohou být těžko měnitelné odjinud, protože nejdou odjinud viditelné.
Uživatelský avatar
Jirka525
Příspěvky: 325
Registrován: 22 kvě 2013, 00:00
Bydliště: Psáry JN79GW

#3 Příspěvek od Jirka525 »

mtajovský - děkuji za vysvětlení. Omlouvám se, použil jsem nesprávnou terminologii. Nepotřebuji tedy volatilní proměnné ale statické proměnné. Myslel jsem si, že volatilní proměnná a automaticky i statická. Večer to vyzkouším. Otázka tedy zůstává, co je špatně u proměnných var3, var4.
Jirka
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“