USARTモジュールをXMEGAマイクロコントローラに設定しようとしていますが、見つからないエラーが発生しました。明確にするために、私はあなたに完全なコードを与えます。したがって、このヘッダファイルには何もありません。プリプロセッサ:トークンの前に2進演算子がありません
#ifndef USART_H_
#define USART_H_
#include <avr/io.h>
#define USART_BAUDRATE 4800
#define USART_BSCALE -3
#if USART_BSCALE < 0
#define USART_BSEL F_CPU/(pow(2,USART_BSCALE) * 16 * USART_BAUDRATE) - 1
#define USART_BAUD_REAL F_CPU/(pow(2,USART_BSCALE) * 16 * (USART_BSEL + 1))
#else
#define USART_BSEL (1/(pow(2,USART_BSCALE))) * (F_CPU/(16 * USART_BAUDRATE) - 1)
#define USART_BAUD_REAL F_CPU/(16 * ((pow(2,USART_BSCALE) * USART_BSEL) + 1))
#endif
#define USART_BAUD_ERROR USART_BAUD_REAL * 1000/USART_BAUDRATE
#if USART_BAUD_ERROR<990 || USART_BAUD_ERROR>1010 /* <-- ERROR IS IN THIS LINE! */
#error Baud rate error too high!
#endif
#endif /* USART_H_ */
(F_CPU
メインファイルで定義されている)コンパイラは、標線における
missing binary operator before token "("
エラーで終了します。前に括弧がありましたが、それらを削除し、異なる括弧の組み合わせを試しましたが、コンパイラはまだそれらを参照しています。ここで何が間違っていますか?
#ifプリプロセッサディレクティブ引数の中でC関数(pow ...)を使用することはできません。なぜなら、コンパイル時にプリプロセッサによって評価されるからです... –
ああ、それは悪いです。力を計算する別の方法はありますか? – Peder
2の累乗?シフトビット(そしてそれらはサポートされています:https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html#SEC38) –