Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
70 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 33

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

16.01.2019, 20:47. Показов 1473. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2019, 20:47
Ответы с готовыми решениями:

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

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

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

2
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
16.01.2019, 20:53
Лучший ответ Сообщение было отмечено 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  [ТС]
Увы, он начал ругаться на то, что 'DD' is not a class or namespace. Чуть погуглив, нашёл, что значения перечислений глобальны и можно писать явно SET_BIT(DDRB, MOSI), и всё заработало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2019, 21:16
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru