【发布时间】:2013-04-15 06:57:02
【问题描述】:
检查下面的代码:
#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 文件中提取信息),所以当我编译代码时它会打印出类似 @ 的行987654326@ 或类似的?这样我就可以对计算和设置进行快速的健全性检查。
【问题讨论】:
-
你试过
-S选项吗? -
@devnull 那不退出编译器吗?我希望编译器完成这项工作,只需打印出它所做的中间计算。
-
如果你只是不通过
-Os,你可能会得到你想在反汇编中看到的东西。不过,您可能不想以这种方式发货。 ;-) -
@CarlNorum :o) 即使有了 -Oc 标志,我也发现了有用的信息,因为你给出了提示,但我必须编写一个额外的小脚本来提取信息,它可能很容易中断当我更改源代码时。不过很好。