70 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 33
1

Ошибка при развёртывании макроса

16.01.2019, 20:47. Показов 1149. Ответов 2

День добрый. Имеется программа (для avr, но это не принципиально (наверно))

main.h
C++
1
2
3
4
5
6
7
typedef enum {
    SS = PORTB2,
    MOSI = PORTB3,
    SCK = PORTB5    
} DD;
 
#define SET_BIT(reg, bit) (reg |= (1 << (bit)))
PORTB2, PORTB3 и PORTB5 -- номера пинов, которые определяются выше как #define PORTB2 2 и т. д.

Но когда я в main.cpp пытаюсь написать что-то типа
C++
1
SET_BIT(DDRB, DD.MOSI);
компилятор начинает кидать ошибки вида expected primary-expression before '.' token, причём если передать в макрос непосредственно PORTB3, то всё работает.

Сам макрос разворачивается в выражение
C++
1
( (*(volatile uint8_t *)((0x17) + 0x20)) |= (1 << (DD.MOSI)));
P. S. Понимаю, что надо по идее писать в раздел по C или по AVR, но проект создан на с++, где может быть своя специфика. Кроме того, вопрос по базовому программированию, без погружения в особенности микроконтроллеров
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2019, 20:47
Ответы с готовыми решениями:

Ошибка при определении макроса
Здорова! Есть код: #include &lt;iostream&gt; using std::cout; using std::endl; #include &lt;string&gt;...

Перемещение кнопок при развертывании окна
Здравствуйте. Возникла необходимость смещения кнопок при развертывании окна программы на весь...

Как сделать так чтобы при развертывании окна во весь экран все объекты на форме размещались по ней равномерно?
Подскажите как сделать так чтобы при развертывании окна во весь экран все объекты на форме...

Ошибка при добавлении макроса Q_OBJECT
Доброй ночи. Использую VS2010(Ultimate) + Qt libraries 4.8.3 for Windows (VS 2010, 235 MB) + Qt...

2
Параллельный Кот
1902 / 825 / 349
Регистрация: 25.03.2016
Сообщений: 2,041
16.01.2019, 20:53 2
Лучший ответ Сообщение было отмечено ktulhu-forever как решение

Решение

Цитата Сообщение от ktulhu-forever Посмотреть сообщение
SET_BIT(DDRB, DD.MOSI);
Нужна не точка, а оператор разрешения области видимости.

C++
1
SET_BIT(DDRB, DD::MOSI);
1
70 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 33
16.01.2019, 21:16  [ТС] 3
Увы, он начал ругаться на то, что 'DD' is not a class or namespace. Чуть погуглив, нашёл, что значения перечислений глобальны и можно писать явно SET_BIT(DDRB, MOSI), и всё заработало
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2019, 21:16

Перерисовка при развертывании окна
Что нужно сделать если требуется перерисовать часть окна в случае если оно было развернуто после...

Ошибка при развертывании
Привет всем!!! Выходят ошибки при развертке артефакта Artifact Web:war exploded: Error during...

Ошибка при развертывании приложения
Здравствуйте. Мне нужно развернуть на удаленном сервере веб приложение. Я делаю это через IIS....

Ошибка при развертывании сайта на хостинге
Всем привет! создал сайт asp.net mvc 3 C# + ms sql server 2008 выложил на хостинг (somee.com) но...

Ошибка при развертывании MS Analysis Services
Не знаю, в тот ли раздел пишу. Предмет &quot;Интеллектуальный анализ данных&quot;, нужно сделать лабу. Нам...

Ошибка при развёртывании SQL-сборки
Есть проект SQL-сборки. Права у сборки поставлены как EXTERNAL_ACCESS. При её развёртывании на MS...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.