Использование числовой константы в функции макроса - PullRequest
0 голосов
/ 03 октября 2011

Я пишу простую библиотеку для моего AVR, и я хотел попробовать использовать макро функцию для определения моей скорости передачи. Многие функции в библиотеке AVR используют макрос F_CPU, а также тот, который я хочу написать.

Вот что у меня есть для определения макроса и моей предполагаемой реализации:

#define BAUD_SELECT(baud) ((F_CPU)/(2*baud)-1)

myubrr = BAUD_SELECT(38400);

Я пытался использовать #define F_CPU 8000000UL, а также в файле make как -D "F_CPU 8000000UL", но всегда получаю ту же ошибку в строке реализации.

expected ')' before numeric constant

Я уверен, что это как-то связано с моим злоупотреблением #define и определением макроса в заголовочном файле, реализацией в соответствующем файле .c и определением F_CPU в make-файле или другом основном файле. .c файл.

EDIT Я сделал изменение в скобках, как предложено, запустил препроцессор и нашел выходной файл (по крайней мере, я думаю)

 unsigned int myubrr = ((8000000UL 1)/(2*(baud))-1);

Он помещает лишнюю 1, где должно быть F_CPU, у меня нет опыта работы с препроцессором, поэтому я не уверен, как заставить его этого не делать, но, возможно, в этом проблема?

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Попробуйте заключить в скобки:

#define BAUD_SELECT(baud) ((F_CPU)/(2*(baud))-1)
0 голосов
/ 03 октября 2011

Это прекрасно работает для меня:

#define BAUD_SELECT(baud) ((F_CPU)/(2*(baud))-1)

unsigned int myubrr = BAUD_SELECT(38400);

когда я компилирую с

$ cc -c -DF_CPU=8000000UL t.c

В этом конкретном случае лишние парены не имеют большого значения, хотя в целом они считаются хорошей идеей. Так что происходит что-то еще. Возможно, есть другое определение F_CPU в другом заголовочном файле, которое переопределяет ваше определение F_CPU

...