Sari la conținut
ELFORUM - Forumul electronistilor

Nu pot rula pas cu pas un program C in AVR Studio 4.19


simplex

Postări Recomandate

Nu pot rula pas cu pas un program C in AVR Studio 4.19

 

Am incercat sa rulez mai multe coduri luate de pe internet pe AVR Studio 4.19 cu compilator de C.

 

Unul din teste a fost programul acesta:

 

#include <math.h>float a, b, d, e, p, r;int main(){ // 165 Cycle Countera=1.2456; // sageata galbena a debuggerului sare peste aceasta instructiuneb=1.1328; // 177 Cycle Countere=exp(b); // 189 Cycle Counter (doar 12 tacti pentru calcularea unei exponentiale !!)p=b*a; // 201d=a/b; // 213r=sqrt(b); // 225} // 237 Cycle Counter
Am avut surpriza sa vad sageata galbena a debuggerului sarind peste instructiunea a=1.2456; iar exponentiala, produsul, raportul si radicalul terminindu-se toate dupa 12 tacti, ceea ce da de gindit.

 

Dupa unele documentari suplimentare am constatat ca in realitate compilatorul face niste optimizari si calculeaza dinainte valorile lui e, p, d si r, inglobindu-le in fisierul hex care trebuie incarcat in memoria AVR-ului, astfel incit acesta, cind vine vremea rularii programului, doar ia din memoria sa valorile precalculate pentru cele patru "variabile".

 

Pentru a impiedeca compilatorul sa mai faca optimizari am citit ca trebuie folosita optiunea -O0

( AVR Studio 4.19 / Project / Configuration Options / General / Optimization: -O0 )

sau declarata una din variabilele a, b de tip volatile float nu float simplu.

 

Am incercat ambele variante insa apare o noua problema, sageata galbena a debuggerului dispare imediat dupa linia e=exp(b);

 

Intrebare: Stie cineva o procedura (setari suplimentare, etc.) care sa determine debuggerul lui AVR Studio 4.19 sa ruleze instructiunile una dupa alta, fara a precalcula valori, adica sageata galbena sa se deplaseze secvential de la linie la linie iar parametrul Cycle Counter sa indice citi tacti au fost necesari pentru executia fiecarei instructiuni.

 

Optimizorul, asa cum este presetat in AVR Studio 4.19, face depanarea programelor foarte dificila, aproape imposibila pentru coduri complicate.

Link spre comentariu
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • simplex

    4

  • godFather89

    4

  • nr4

    1

Zile populare

Top autori în acest subiect

Compilat si rulat cu ajutorul AVR Studio 5.

Fara optimizari (in dreptul fiecarei linii este valoarea contorului de ciclii inainte de executia liniei):

#include <avr/io.h>volatile float a, b, d, e, p, r;int main(void){//CC = 246	a=1.2456; //CC = 252	b=1.1328; //CC = 264	e=exp(b); //CC = 276	p=b*a; //CC = 4026	d=a/b; //CC =  6077	r=sqrt(b); //CC = 7455	    while(1); //CC = 7953}

Cu optimizari (de compilator, desi nu prea are ce), numarul total de ciclii (pana la while) este de 7936.

 

Nu stiu cat ai mai lucrat tu in embedded dar vad ca nu stii despre volatile. Fara volatile, toate valorile de mai sus erau cunoscute in momentul compilarii si puteau fi calculate de catre compilator pentru a imbunatatii timpul rularii. De altfel, variabilele nu sunt folosite nicaieri in program (doar cateva operatii care nu influenteaza nici cum programul) deci sunt inutile asa ca, compilatorul decidea sa le indeparteze complet.

Daca tot vrei sa testezi diferite platforme pentru viteza, iti recomand sa faci un programel adevarat si sa lasi optimizarile pornite. Pentru ca si faptul ca un compilator optimizeaza codul mai bine ca altul este un avantaj al acelei platforme.

Link spre comentariu

Multumesc pentru test. Se pare ca acest AVR Studio 4.19 pe care l-am instalat eu zilele trecute are ceva erori de afisare. Am rulat cu el programul executat pe AVR Studio 5, exact in varianta ta (cu volatile float) dar la instructiunea "e=exp(b)" sageata galbena dispare, la fel ca inainte.

Link spre comentariu

Multumesc pentru test. Se pare ca acest AVR Studio 4.19 pe care l-am instalat eu zilele trecute are ceva erori de afisare. Am rulat cu el programul executat pe AVR Studio 5, exact in varianta ta (cu volatile float) dar la instructiunea "e=exp(b)" sageata galbena dispare, la fel ca inainte.

Nu stiu ce sa zic... mie imi merge. Cand e sageata la insructiunea aceea ce dai? Step over sau step into? Cum e compilat? Release sau Debug?
Link spre comentariu

Cand e sageata la insructiunea aceea ce dai? Step over sau step into?

Dadeam Step Into (F11). Dupa ce ti-am citit mesajul am folosit Step Over (F10) si acum sageata galbena nu mai dispare, trece frumos de la o linie la alta.

Am mai remarcat ca daca am dat Step Into si sageata dispare (dar nu imi este foarte clar unde se duce) o pot face sa revina cu ajutorul lui Step Out (Shift F11).

 

Intrebare: AVR Studio 5 se comporta la fel in ceea ce priveste comenzile Step Into, Over si Out?

Link spre comentariu

Inseamna ca se ducea cu sageata in locul unde este definita functia aia (deci ar trebui sa vezi sageata in disassembly). Cam toate debugger-ele ar trebui sa se compoarte la fel in situatia asta.

Link spre comentariu

Inseamna ca se ducea cu sageata in locul unde este definita functia aia (deci ar trebui sa vezi sageata in disassembly).

Intr-adevar sageata se duce in fereastra "Disassembler" dar intr-un loc unde scrie "File not found" iar actiunea sa nu prea este de mare ajutor pentru depanarea programului.Disassembler window
e=exp(p); -> LDS       R22,0x020C   //sageata nu se duce aici  LDS       R23,0x020D     LDS       R24,0x020E     LDS       R25,0x020F     CALL      0x00000553     STS       0x021E,R22     STS       0x021F,R23     STS       0x0000,R24     STS       0x0221,R25
Disassembler window
1075: File not found-> LDI       R26,0x18   // aici merge sageataLDI       R27,0x00      LDI       R30,0x77      LDI       R31,0x02      JMP       0x0000051F
Poate ca este logic ca sageata sa se deplaseze acolo unde se duce dar ar fi totusi necesara o avertizare ca sa stiu unde a disparut cursorul.
Link spre comentariu

Daca ar avea codul C al functiei exp, s-ar duce la codul acela. Neavandu-l, se duce la codul assembly luat din biblioteca cu pricina.Mie imi da un mesaj ca nu are codul si daca vreau sa vad disassembly window.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări