variabile volatile - cererea de resurse

S

sivamit

Guest
Max a putea anyone, vă rugăm să încărcaţi sau să dea detalii cu privire la unele cuvinte-cheie volatile şi cererile sale ..?

Mulţumesc

 
Cuvinte cheie volatile este folosit pentru a specifica faptul că o variabilă (locaţie de memorie) ar putea fi supuse modificarilor din valoarea sa de cauze în afara controlului de rulare SW.
O utilizare tipic este de a defini interfeţe cu memorie mapped periferice, în cazul în care aveţi un set de locaţii de memorie utilizate pentru schimbul de date cu HW.
O altă utilizare a specificatorul volatile este atunci când doriţi pentru a evita ca compilatorului efectuează optimizări pe unele variabile.Ca un exemplu, defini o variabilă, dar dacă nu îl folosiţi în SW: Când compilarea fişierul compilatorului recunoaşte că variabila nu este folosit şi o tai de la executabil, din contră, dacă specificaţi cuvântul cheie volatile, compilatorul nu este capabil să facă nici o presupunere privind utilizarea sa (s-ar putea fi schimbat de către factori externi) şi se lasă-l în codul.De obicei aveţi posibilitatea să utilizaţi specificatorul volatile, pentru a defini variabilele dummy "pentru a evita optimizare compilator pe porţiune mică de cod (de exemplu, pentru locul breakpoint într-o buclă).

Cu respect
Mowgli

 
Un alt motiv de a folosi variabile volatile este atunci când utilizaţi o întrerupere de a actualiza o variabilă globală, care este utilizat în afara de întrerupere.De exemplu, ar putea fi o variabilă utilizate pentru a păstra secunde.Luaţi în considerare următoarele:

X secunde =;
un alt cod;
un alt cod;
un alt cod;
Y secunde =;

Dacă secunde nu este declarat ca volatil compilatorul va fi cel mai probabil să păstreze valoarea de secunde într-un registru, după stabilirea valorii de x şi va utiliza aceeaşi valoare pentru a seta Y.Aceasta va duce la o eroare în cazul în care întrerupe actualizat secunde în dintre linii pentru a de cod.Setarea de secunde pentru a volatile, va forţa compilatorului să se presupună că secunde ar fi putut fi schimbat de ceva externe pentru a secţiunii curente cod.Se va citi, prin urmare, secundă variabila din nou atunci când stabilesc y.

Există, desigur mai bune moduri de a scrie acest tip de cod de

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Zâmbi" border="0" />

acest lucru este doar pentru a ilustra punctul de

 
Acest cuvânt cheie este utilizat în principal în scop de optimizare.

O variabila volatil este una care poate schimba în mod neaşteptat.În consecinţă, compilatorul nu poate avea nici ipoteze despre valoarea variabilei.În special, optimizator trebuie să fie atent pentru a reîncărca variabila de fiecare dată când este folosit în loc de a deţine o copie într-un registru.Exemple de astfel de variabile volatile sunt:

* Registre Hardware în periferice (de exemplu registrele, stare)
* Non-variabile automate de referinţă în termen de o întrerupere de servicii de rutină
Variabilele * comun de către mai multe sarcini într-o aplicaţie multi-threaded

Sistemelor integrate face cu hardware-ul, întrerupe, RTOSes, şi altele asemenea.Toate aceste variabile necesită volatile.Imposibilitatea de a înţelege conceptul de volatile, va duce la dezastru.

 
Cea mai bună explicaţie pentru volatile este disponibil @ http://www.embedded.com/story/OEG20010615S0107

 
În multe aplicaţii filetat, de asemenea, cuvântul cheie volatile este utilizat pentru a actualiza variabilele golabal care sunt utilizate în ambele fire.

Pentru a fi clar Să presupunem că doi threda se execută.în cazul în care şirul prima folosind X este variabil, dar în timpul executării slice-timp poate trecerea la firul al doilea şi al valorii X poate chage în acest thread.Deci, din nou, atunci când felie de timp este înapoi la primul fir varible ar trebui să conţină cele mai recente valoare.

Deci, dacă u declara variabila volatile, acesta va referesh ASAP locaţia de memorie cu cele mai recente valoare.

Aceasta este experienţa mea practică.

 
Scurtă descriere:
În timpul runtime pentru fiecare utilizare a valoarea unei variabile de volatile, titularul valoare pentru variabila este reîncărcate din memorie reală fizice.

 
caracteristicile variabile volatile.

1.Volatile este o variabilă globală.
2.durează 1 octet de instruire
3.Compilator nu pot optimiza variabila.
4.turnare de tip nu este permis.
5.Valoare pot fi modificate de porturi, Hardware, întrerupe, porturile seriale numai.
6.Întotdeauna alocate în memoria Heap.
7.Location Permanente de memorie este alocată pentru ea.

Un subiect sale foarte bune pentru a discuta.Eu pot adăuga mai multe puncte pentru asta.Dacă poţi înţelege punctele de mai sus în mod corespunzător.

 
ckshivaram a scris:

caracteristicile variabile volatile.1.
Volatile este o variabilă globală.

2.
durează 1 octet de instruire

3.
Compilator nu pot optimiza variabila.

4.
turnare de tip nu este permis.

5.
Valoare pot fi modificate de porturi, Hardware, întrerupe, porturile seriale numai.

6.
Întotdeauna alocate în memoria Heap.

7.
Location Permanente de memorie este alocată pentru ea.Un subiect sale foarte bune pentru a discuta.
Eu pot adăuga mai multe puncte pentru asta.
Dacă poţi înţelege punctele de mai sus în mod corespunzător.
 
Când vom folosi Optimizaţi cuvânt, ne referim la faptul că variabila în memoria poate fi schimbat doar de către compilator ori de câte ori codul este executat.Modificatori volatilă nu pot fi optimizate prin compilator, care leagă În timpul procesului de cod este alocată memorie fizică, în memoria internă.aşa că în timpul procesului de link-ul (de generare a. lnk fişier în timpul compilării), aceste variabile sunt plasate în zona de lucru în loc de memorie principală.Compilator nu se poate modifica variabila până la excepţia cazului în care o copie este copiat în RAM pentru execuţie.Deci, compilator alocă o locaţie diferită de memorie pentru variabila.Acestea sunt numite de ONU locaţie optimizate.variabile în această locaţie nu sunt dependente de compilator pentru a modifica valoarea.în loc să întrerupă, porturile, seriale, hardware sunt dat permisiunea de a accesa aceste variabile vreodată atunci când se ridică o cerere.
Atunci când o memorie este optimizat, atunci durata de viaţă a acea variabilă este limitată numai până executa funcţia de atunci este distrus, dar volatile nu sunt distruse, dar menţine valoarea în ea până nu există nici o schimbare făcută de către entităţile externe.Ori de câte ori aceste variabile sunt accesate numai de valoarea actualizat ultima dată este văzută în registru.

Încărcarea un exemplu după această.cel mai bun exemplu este RTC (Real Time Clock).în PC-ul.chiar şi atunci când PC-ul este oprit, iar mai târziu reînceput, cele mai recente actualizări de ceas de timp curent.Adaugă după 9 minute:de exemplu:
de timp volatile, char;
actualizare (void)
(
time = timp 1;
)

void main ()
(
de timp = 0;
în timp ce (ora <100);
)fără a modificatorul volatile, compilatorului se uită la acest lucru ca pe 2 declaraţii diferite.
1.de timp = 0;
2.în timp ce (ora <100);

din moment de timp = 0; 0 <100, astfel încât bucla rămână mereu în aceeaşi linie până la condiţie este adevărată.
Timpul nu ajung niciodată în 100.Deci, atunci când memoria este optimizat, atunci acesta poate fi modificat numai prin executarea de declaraţie explicită care modifica valoarea.în cazul de mai sus, nu se schimbă.

dacă vom folosi modificatorul volatile, dezactivează această optimizare, forţând programul pentru a aduce o valoare nouă de la variabila de la fiecare variabilă de timp este accesat.

speranţa întrebarea dvs. acest răspunsuri.Dacă nu, atunci eu pot continua explaination mea în postul meu următor.Lasă-mă să ştiu dacă ai ceva de la acest lucru.

Întotdeauna aduc aminte de tine, nu se poate simula condiţiile de volatilă în C51 sau orice compilator ca memorie Heap nu pot fi simulate în Keil.acesta poate fi vazut doar pe hardware-ul.

mulţumesc
shivaram

 

Welcome to EDABoard.com

Sponsor

Back
Top