Частенько использую макросы для автоматизированного расчета загружаемых в регистры значений. Например:
Код: Выделить всё
#define F_CPU 1200000UL
#define TIMER_FREQUENCY_HZ 1013 // Частота срабатывания таймера в герцах.
#define LOAD_VALUE ((unsigned char)( round(((double)F_CPU / (double)TIMER_FREQUENCY_HZ / 8 - 1))))
....
OCR0 = LOAD_VALUE; // 8 - предделитель таймера. Режим CTCВ общем, если использую подобные макросы при работе с регистрами напрямую или передавая значение функции, то все ОК.
А на этот раз решил поиграться с классами. Создал класс и появилась проблемка. При передаче функции класса числового значения все ОК. Либо если передаю макрос, где нет приведения типов, то тоже все ОК. А вот если в макросе есть приведение типа переменной, то компилятор начинает материться, что:
missing binary operator before token "("
Кто может сталкивался с такой проблемой? Как ее решить? Я так предполагаю, что препроцессор сначала подставляет выражение из макроса, а уже потом его рассчитывает. Может можно как-то заставить его сначала рассчитать это значение, а потом уже подставлять куда надо? Или как-то альтернативно решить эту проблему?
Какой ентому гаду бинарный оператор нужен?
И еще. Если я функции класса передаю не переменные, а числовые константы, можно как-то компилятор заставить, чтобы функция не принимала значения через стек (или регистры), а генерировалась инлайном с подстановкой нужных значений, не качая их из стека? Это с учетом того, что она в классе и простой инлайн не катит, но вызывается при этом всего один раз.