Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 26.03.2016, 10:25  
Freerider
Частый гость
 
Аватар для Freerider
 
Регистрация: 01.12.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 34 раз(а) в 10 сообщении(ях)
Freerider на пути к лучшему
По умолчанию Atmel Studio 7 не работают вложенные макросы

Хотел запилить макросы для упрощения написания программы в студии (недавно поставил) скачал макросы у PASHGAN на CHIPENABLE.RU его макросы
Код:
#define Bit(bit)  (1‹‹(bit))

#define ClearBit(reg, bit)       reg &= (~(1‹‹(bit)))
//пример: ClearBit(PORTB, 1); //сбросить 1-й бит PORTB

#define SetBit(reg, bit)          reg |= (1‹‹(bit))
//пример: SetBit(PORTB, 3); //установить 3-й бит PORTB
в maine работают а мои
Код:
#define CLR_PIN(ARGS)  __CLR_PIN(ARGS)
#define __CLR_PIN(PORT_LETTER, PIN) PORT##PORT_LETTER &= (~(1 ‹‹ (PIN)))

#define SET_PIN(ARGS) __SET_PIN(ARGS)
#define __SET_PIN(PORT_LETTER, PIN) PORT##PORT_LETTER |= (1 ‹‹ (PIN))
нет .Главное если их выложить сверху в самом maine
то программа их распознает а если в файле bits_macros.h
и в main прописать например

Код:
#define SCK D, 4
#include "bits_macros.h"

int main (void)
{
	SET_PIN(SCK);
	CLR_PIN(SCK);
}
то начинает ругаться
Severity Code Description Project File Line
Error 'D' undeclared (first use in this function) GccBoardProject1
Severity Code Description Project File Line
Error implicit declaration of function 'SET_PIN' [-Werror=implicit-function-declaration] GccBoardProject1
Severity Code Description Project File Line
Error implicit declaration of function 'CLR_PIN' [-Werror=implicit-

В чем беда не подскажите.Кстати проверял это в CodeVision там все работает , но хочется Atmel Studio уже юзать.
Реклама:
Freerider вне форума  
Непрочитано 01.05.2016, 19:38  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Atmel Studio 7 не работают вложенные макросы

Могу и ошибаться, но все-таки попробую. Может вот здесь ошибка: нельзя писать запятую в строке:
#define SCK D, 4
Т.е. если бы вы написали вот так
#define SCK 4
или так:
#define D 4 - то было бы нормально.
А тут:
#define SCK D, 4
вроде как скобок нет и ошибку генерит, наверное так. Правильно?
Signalshik2 вне форума  
Непрочитано 10.05.2016, 00:51  
siarzhuk
Прохожий
 
Регистрация: 17.10.2015
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
siarzhuk на пути к лучшему
По умолчанию Re: Atmel Studio 7 не работают вложенные макросы

Сообщение от Signalshik2 Посмотреть сообщение
нельзя писать запятую в строке:
Можно, запятая - тоже оператор, хоть и с самым маленьким приоритетом.
Так результат выражения
Y = X,4
Y будет равен X (из-за более высокого приоритета присваивания), a
Y = (X,4)
Y будет равен 4.
siarzhuk вне форума  
Непрочитано 25.06.2016, 12:57  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Atmel Studio 7 не работают вложенные макросы

Сообщение от Freerider Посмотреть сообщение
если в файле bits_macros.h
и в main прописать например
Код:
#define SCK D, 4
#include "bits_macros.h"
int main (void)
{
SET_PIN(SCK);
CLR_PIN(SCK);
}
у меня ваш пример работает, положите вас ваш файл.h рядом main.c
CodeNameHawk вне форума  
Непрочитано 27.06.2016, 19:06  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Atmel Studio 7 не работают вложенные макросы

Сообщение от siarzhuk Посмотреть сообщение
Можно, запятая - тоже оператор, хоть и с самым маленьким приоритетом.
Так результат выражения
Y = X,4
Y будет равен X (из-за более высокого приоритета присваивания), a
Y = (X,4)
Y будет равен 4.
- я посмотрел, оператор запятая используйется только для перечисления параметров в define и define получается как функция. А у Вас define как сравнение, как if()else - я считаю это неверно. Так что неправы Вы батенька!
Signalshik2 вне форума  
Непрочитано 27.06.2016, 19:12  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Atmel Studio 7 не работают вложенные макросы

А у автора по-моему косяк вот в этом месте:
Сообщение от Freerider Посмотреть сообщение
#define CLR_PIN(ARGS) __CLR_PIN(ARGS)
#define __CLR_PIN(PORT_LETTER, PIN) PORT##PORT_LETTER &= (~(1 ‹‹ (PIN)))
#define SET_PIN(ARGS) __SET_PIN(ARGS)
#define __SET_PIN(PORT_LETTER, PIN) PORT##PORT_LETTER |= (1 ‹‹ (PIN))
- нельзя писать ARGS, потом перечислять параметры. Хотя не дыбаю в Atmel Studio 7. Может и можно.
Вообще Вы сделали проблему из ничего. Операторы REGISTER = (1‹‹BIT), REGISTER |= (1‹‹BIT) и REGISTER &= ~(1‹‹BIT) - всю жизнь применялись в чистом виде и ничего здесь писать не нужно.
Signalshik2 вне форума  
Непрочитано 27.06.2016, 19:54  
siarzhuk
Прохожий
 
Регистрация: 17.10.2015
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
siarzhuk на пути к лучшему
По умолчанию Re: Atmel Studio 7 не работают вложенные макросы

Сообщение от Signalshik2 Посмотреть сообщение
А у Вас define как сравнение
Пример относился к утверждению, что "нельзя писать запятую в строке" - вполне можно. Также как и "только для перечисления параметров в define" тоже не совсем так безнадёжно - оператор "запятая" может использоваться в теле самой макроподстановки. А уж что приоритеты растаскивают такой неогороженый define как Тузик прелую грелку - то, как бы, общее место в соответствуюших страшилках про препроцессор.
siarzhuk вне форума  
 

Закладки

Метки
atmel studio, define, макросы
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Atmel Studio 6.0 как русифицировать? Aleksand AVR 13 22.05.2019 19:36
Atmel Studio и переменные valenok Песочница (вопросы новичков) 1 11.01.2016 17:25
Atmel Studio 7 перестал видеть программатор Aviator93 AVR 8 26.10.2015 17:35
Atmel Studio 6 majorka65 Embedd С 17 17.12.2013 15:33
Atmel Studio C++ для AVR-8 svad0 Микроконтроллеры, АЦП, память и т.д 4 04.06.2012 23:29


Часовой пояс GMT +4, время: 19:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot