请查看下面的代码:
#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
的行? 这样我就可以快速检查计算和设置是否正确。
-S
选项吗? - devnull-Os
参数,你可能会在反汇编中看到你想要的内容。但是,你可能不希望以这种方式发布代码。;-) - Carl Norum