检查下面的代码:
#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();
}
这是用于编译代码的命令:
avr-gcc -g -DF_CPU=4000000       -Wall -Os -Werror -Wextra -mmcu=attiny2313 -Wa,-ahlmns=project.lst -c -o project.o project.cpp
ubrr由编译器计算为 25,到目前为止还不错。但是,为了检查编译器的计算结果,我查看了反汇编列表。
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
是否可以在编译时avr-gcc打印出中间结果(或从 .o 文件中提取信息),所以当我编译代码时它会打印出类似或类似的行?这样我就可以对计算和设置进行快速的健全性检查。(uint16_t) ubbr = 25