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

 
 
> Макросы в 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
SasaVitebsk
сообщение Feb 9 2010, 01:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(ivainc1789 @ Feb 9 2010, 01:44) *
То, что Вы и прочие специалисты можете написать проще и нагляднее мне совершенно понятно. Могу и я написать.

Да дело не в простоте и наглядности. И не в красоте. Это все вещи субъективные.

Давайте проведите простой эксперимент. Поставьте свой макрос и выключите оптимизацию. После чего - листинг выложите постом ниже. Вот и будет простой и объективный ответ вам.

Пост ведь называется "макросы". Далее вы указываете "что применяется данная программа только один раз для установки Vref = 1v1". Значит задачу я понимаю правильно. Сами указываете, что "с целью экономии кода".
Подытоживая всё это, как я понимаю надо средствами препроцессора сделать текст проги красивым и наглядным, но, как минимум не в ущерб памяти программ. Сами вы ставите более серьёзную задачу - сэкономить.

На самом деле я вижу, что препроцессор здесь проходит лётом и вся ваша конструкция - достаётся компилятору. Компилятор учитывая что значение условия - есть константа, конечно должен соптимизировать, но простите, вы не упрощаете ему работу, а усложняете.
Именно об этом я и указал.

Проверьте сами и выложите здесь. А то ветка для начинающих, и кто-нибудь из таковых, не разобравшись, вооружится вашими макросами. Да ещё вставит их в CV. А тот уже ему наэкономит будь здоров.
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
|- - _Pasha   Цитата(ivainc1789 @ Feb 9 2010, 00:44) Но...   Feb 8 2010, 22:14
||- - ivainc1789   Цитата(_Pasha @ Feb 9 2010, 01:14) Потому...   Feb 9 2010, 15:23
||- - AHTOXA   Цитата(ivainc1789 @ Feb 9 2010, 20:23) Из...   Feb 9 2010, 15:38
|||- - 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   +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 Текстовая версия Сейчас: 23rd July 2025 - 10:05
Рейтинг@Mail.ru


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