реклама на сайте
подробности

 
 
> Макросы в IAR EWAVR, v5.40.1
ivainc1789
сообщение Feb 8 2010, 06:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



В девайсах ATtiny иногда приходится сильно экономить память программ и использовать макросы. Поначалу все получалось и вдруг наступил затык. Три раза проект компилировался нормально, а с четвертого вдруг началась ругань на один из макросов. Причем его строки однотипны, а ругается только с четвертой. Подскажите в чем причина? Использую IAR EWAVR.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Feb 8 2010, 21:21
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Пример, заменяющий первую половину использованной Вами ахинеи, место которой вот здесь
Код
#define ADC_REF_VCC 1
#define ADC_REF_EXT  0
#define ADC_REF_1V1  3
#define ADC_REF_2V56 2
#define SET_ADC_CHANNEL(refn, chsel) ADMUX = (refn << REFS0) | (chsel)

Вопрос, а нафига оно нужно, плодить новояз, добавляющий еще один уровень понятий между терминами, определенными производителем микросхем и человеком, читающим текст программы, задавать не буду.
Лучше о хорошем поговорим. Например
Код
#define ADPS_DIV2 1

ни о чем не говорит, а вот с привязкой к F_CPU
Код
#define ADPS_dv(val) ((val >= (F_CPU / 250000)) && (val <= (F_CPU / 50000)))
#if ADPS_dv(2)
#define STD_ADPS 1
#elif ADPS_dv(4)
#define STD_ADPS 2
#elif ADPS_dv(8)
#define STD_ADPS 3
#endif

получаем некоторую свободу от пересчета делителя.
Такие дела.
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Feb 8 2010, 21:44
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата(_Pasha @ Feb 9 2010, 00:21) *
Пример, заменяющий первую половину использованной Вами ахинеи....
Дело не в том, как написано, а в том, что синтаксису это удовлетворяет (теперь), а компилятор выдает ошибку. То, что Вы и прочие специалисты можете написать проще и нагляднее мне совершенно понятно. Могу и я написать. Но почему не работает то, что вроде бы должно?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 8 2010, 22:14
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ivainc1789 @ Feb 9 2010, 00:44) *
Но почему не работает то, что вроде бы должно?

Потому что перед отмеченной красным строкой символ "\" не является последним в строке.
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Feb 9 2010, 15:23
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата(_Pasha @ Feb 9 2010, 01:14) *
Потому что перед отмеченной красным строкой символ "\" не является последним в строке.
Извините, но не поленился сделать простой проект в IAR. Могу я покорнейше узнать, почему эта ошибка все еще присутствует? У вас компилируется нормально или с той же ошибкой?
Цитата
...выискивая несуществующую разницу. Про pragma inline=forced Вы слышали? У Вас SETBIT() - это макрос, а у меня SetPin() - это функция, а компилируются они одинаково...
Хорошо. Спрошу проще: вы оформили SetPin() как функцию сознательно по каким-либо существенным мотивам или "просто так сложилось"? Т. е. для вас есть существенная разница как написать данную функцию для девайса со всего лишь 4к флеша? Вот что в хелпе нашел:
Цитата
The compiler is capable of inlining functions. This means that instead of calling a
function, the compiler inserts the content of the function at the location where the
function was called. The result is a faster, but often larger, application. Also,
inlining may enable further optimizations. The compiler often inlines small
functions declared static. The use of the #pragma inline directive and the C++
keyword inline gives you fine-grained control, and it is the preferred method
compared to the traditional way of using preprocessor macros.
This feature can be
disabled using the --no_inline command line option.

Но инлайнить нужно не всегда. И, тем более, когда "...это компилер решает...". Т.е. управлять этой прагмой все равно должен пользователь и встает вопрос - не проще ли макрос написать? Почему "gives you fine-grained control" пока не догоняю...
Я не спец по С, прошу уж сильно то не пинать )))), учитывая название раздела для данной темы....
Прикрепленное изображение

Прикрепленные файлы
Прикрепленный файл  proj.rar ( 6.38 килобайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 9 2010, 15:38
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ivainc1789 @ Feb 9 2010, 20:23) *
Извините, но не поленился сделать простой проект в IAR. Могу я покорнейше узнать, почему эта ошибка все еще присутствует?

Потому что
Цитата(_Pasha @ Feb 9 2010, 03:14) *
Потому что перед отмеченной красным строкой символ "\" не является последним в строке.


Уберите пробел в конце строки
Код
  if (Value == 4)   ADCSRA &= 0x07;else\


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ivainc1789   Макросы в IAR EWAVR   Feb 8 2010, 06:54
- - Палыч   Цитата(ivainc1789 @ Feb 8 2010, 09:54) По...   Feb 8 2010, 07:05
- - SasaVitebsk   Цитата(ivainc1789 @ Feb 8 2010, 10:54) В ...   Feb 8 2010, 08:19
- - ivainc1789   ЦитатаНепонятно, как именно вообще макросы могут с...   Feb 8 2010, 20:03
|- - Dog Pawlowa   Цитата(ivainc1789 @ Feb 8 2010, 23:03) А ...   Feb 8 2010, 20:26
|- - ivainc1789   Цитата(Dog Pawlowa @ Feb 8 2010, 23:26) 1...   Feb 8 2010, 21:21
|- - Dog Pawlowa   Цитата(ivainc1789 @ Feb 9 2010, 01:21) То...   Feb 9 2010, 09:33
|||- - ivainc1789   Цитата(AHTOXA @ Feb 9 2010, 18:38) Уберит...   Feb 9 2010, 16:32
||- - Dog Pawlowa   Цитата(ivainc1789 @ Feb 9 2010, 19:23) вы...   Feb 9 2010, 20:54
|- - SasaVitebsk   Цитата(ivainc1789 @ Feb 9 2010, 01:44) То...   Feb 9 2010, 01:54
- - SasaVitebsk   +1. Не считаю себя профессионалом в данном вопросе...   Feb 9 2010, 10:27
- - rezident   На последнем скриншоте из сообщения #13 в макросах...   Feb 9 2010, 17:26
- - ivainc1789   Цитата(rezident @ Feb 9 2010, 20:26) На п...   Feb 9 2010, 19:09
- - rezident   Цитата(ivainc1789 @ Feb 10 2010, 00:09) И...   Feb 9 2010, 20:50


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 16:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016