AVR GCC asm & optimering

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: AVR GCC asm & optimering

Inlägg av Swech »

Du bör nog inte låsa dig i tanken på att det är optimeringen ensam som djävlas....
Bättre att bredda scenariot.

Saknas en massa info för att hjälpa ytterligare.
Två tips.

Stänger du av interrupten då du pillar på FQBUF utanför interrupten?

Ta 2 register och lås dem till att endast innehålla FQBUF så behöver du inte pusha och popa i din interupt.
Den blir då bara 3 instruktioner lång och då är det väloptimerat....

Swech
PCP-Lasse
Inlägg: 44
Blev medlem: 3 maj 2010, 20:19:56
Ort: Nyköping

Re: AVR GCC asm & optimering

Inlägg av PCP-Lasse »

Jag håller faktiskt på och lägger över variablerna som används av interrupten hela tiden i fasta register. Använder register r2 till r8, då jag läste att de lämnas ifred av C.

Men jag tjänade inte så mycket jag hoppades på det då många instruktioner inte fungerar på de låga registrena. Så det blev push och pop ändå. :( Men jag kunde iaf använda en snabb mov instället för att läsa i ramminnet.

Finns det ett sätt att låsa register över 15 skulle jag hemskt gärna vilja få reda på det.
PCP-Lasse
Inlägg: 44
Blev medlem: 3 maj 2010, 20:19:56
Ort: Nyköping

Re: AVR GCC asm & optimering

Inlägg av PCP-Lasse »

Optimering -O2 genererade bara marginellt större program än -Os (ett par hundra bytes), och lämnade assemblern intakt. Glömde bort att 03 (som genererade ett mkt stort program) inte alls behöver vara "bättre" än O2. Det verkar helt klart vara optimeringsrelaterat, googlade fram fall där andra haft liknande problem med -Os.

Tänkte bara säga det utifall någon annan råkar på samma bekymmer.

Fortfarande ingen som har något hemligt C-trick som får kompilatorn att exkludera register över 15?
Användarvisningsbild
ahlsten
Inlägg: 659
Blev medlem: 12 november 2005, 00:24:14
Ort: Uppsala

Re: AVR GCC asm & optimering

Inlägg av ahlsten »

Angående reservering av specifika register kan du kika på -ffixed-registernamn eller kanske -mfixed-range=registernamn_m-registernamn_n, där registernamnen måste finnas i macrot med enhetsspecifika definitioner.
PCP-Lasse
Inlägg: 44
Blev medlem: 3 maj 2010, 20:19:56
Ort: Nyköping

Re: AVR GCC asm & optimering

Inlägg av PCP-Lasse »

Usch, det verkar inte roligt. Verkar som att man får kompilera om alla librarys man använder efter man lagt in registerreservationerna i varenda ett.. Och jag är värdelös på allt det där "bakom".. Vet inte i vilken ände jag ska börja ens.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: AVR GCC asm & optimering

Inlägg av jesse »

Jag trodde de bibliotek du använder kompilerades i samband med att du kompilerade din kod. De finns ju där i form av källkod. Så verkar det fungera för mig i alla fall - jag kör winavr med AVR GCC.
PCP-Lasse
Inlägg: 44
Blev medlem: 3 maj 2010, 20:19:56
Ort: Nyköping

Re: AVR GCC asm & optimering

Inlägg av PCP-Lasse »

Det vore ju bra..det var nån som sa att det låg färdigkomplierade subrutiner, hoppas det var fel. Får kolla efter jobbet, hoppets stjärna tändes. :)
Skriv svar