Controllare il codice qui sotto:può GCC stampare risultati intermedi?
#include <avr/io.h>
const uint16_t baudrate = 9600;
void setupUART(void) {
uint16_t ubrr = ((F_CPU/(16 * (float) baudrate)) - 1 + .5);
UBRRH = ubrr >> 8;
UBRRL = ubrr & 0xff;
}
int main(void) {
setupUART();
}
Questo è il comando usato per compilare il codice:
avr-gcc -g -DF_CPU=4000000 -Wall -Os -Werror -Wextra -mmcu=attiny2313 -Wa,-ahlmns=project.lst -c -o project.o project.cpp
ubrr
è calcolato dal compilatore come 25, finora tutto bene. Tuttavia, per verificare cosa ha calcolato il compilatore, ho dato un'occhiata alla lista di disassemblaggio.
000000ae <setupUART()>:
ae: 12 b8 out UBRRH, r1 ; 0x02
b0: 89 e1 ldi r24, 0x19 ; 25
b2: 89 b9 out UBRRL, r24 ; 0x09
b4: 08 95 ret
E 'possibile effettuare avr-gcc
stampare il risultato intermedio al momento della compilazione (o tirare le informazioni dal file .o), in modo che quando compilo il codice viene stampato una riga simile (uint16_t) ubbr = 25
o simili? In questo modo posso eseguire un rapido controllo di integrità sui calcoli e le impostazioni.
Hai provato l'opzione '-s'? – devnull
@devnull Non esce dal compilatore? Voglio che il compilatore finisca il lavoro, basta stampare un calcolo intermedio che ha fatto. – jippie
Se non si passa '-Os', probabilmente si otterrà esattamente ciò che si desidera vedere nello smontaggio. Probabilmente non vuoi spedire in quel modo, comunque. ;-) –