Проверьте код ниже:может GCC распечатать промежуточные результаты?
#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
@devnull Не выходит ли из компилятора? Я хочу, чтобы компилятор завершил работу, просто распечатайте промежуточный расчет, который он сделал. – jippie
Если вы просто не передаете '-O', вы, вероятно, получите именно то, что хотите увидеть при разборке. Вы, вероятно, не хотите грузить таким образом. ;-) –