AVR GCC asm & optimering
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: AVR GCC asm & optimering
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
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
Re: AVR GCC asm & optimering
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.
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å.

Finns det ett sätt att låsa register över 15 skulle jag hemskt gärna vilja få reda på det.
Re: AVR GCC asm & optimering
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?
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?
Re: AVR GCC asm & optimering
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.
Re: AVR GCC asm & optimering
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.
Re: AVR GCC asm & optimering
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.
Re: AVR GCC asm & optimering
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. 
