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

 
 
> Макросы в 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
Ответов
ivainc1789
сообщение Feb 8 2010, 20:03
Сообщение #2


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

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



Цитата
Непонятно, как именно вообще макросы могут сэкономить память программ (или вообще какую-нибудь память). И как ваши конкретные макросы её экономят.
Очень просто. Можно написать макрос как подпрограмму. Например, подпрограмма выбора Vref в ADC на основе всех возможных сочетаний. Это займет значительный кусок кода. Но потом выяснится, что применяется данная программа только один раз для установки Vref = 1v1. Ясное дело, это неэффективно. Если такую задачу решать с помощью макроса, то экономия памяти налицо. Вот почему для многих установок ADC полезно все же писать макросы, но для установки мультиплексора, возможно, подпрограмму (это зависит уже от конкретики задачи)...
Цитата
Дело в том,что независимо от аргумента ваша фича скомпилируется в кучу операторов.
С чего бы это? Какая куча? Скомпилируется только то, что соотв. условию по аргументу...
А посути-то есть что сказать? Если есть желание попробовать, прилагаю код...
Прикрепленные файлы
Прикрепленный файл  macro.rar ( 417 байт ) Кол-во скачиваний: 33
 
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 8 2010, 20:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(ivainc1789 @ Feb 8 2010, 23:03) *
А посути-то есть что сказать?

1) По сути... где фигурные скобки?!
2) Еще раз по сути ... ИАР имеет очень удобную фичу отладки макросов, которая заключается в выводе в файл текста после препроцессора.
3) И третий раз по сути ... Ваши общие рассуждения о расходе памяти программ в случае оформления фрагмента кода как подпрограммы без оговорок о оптимизации и "инлайнирование" неверны. Программист может (и, пожалуй, обязан) написать так, что в любом случае память программ будет расходоваться одинаково экономно.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Feb 8 2010, 21:21
Сообщение #4


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

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



Цитата(Dog Pawlowa @ Feb 8 2010, 23:26) *
1) По сути... где фигурные скобки?!
2) Еще раз по сути ... ИАР имеет очень удобную фичу отладки макросов, которая заключается в выводе в файл текста после препроцессора.
3) И третий раз по сути ... Ваши общие рассуждения о расходе памяти программ в случае оформления фрагмента кода как подпрограммы без оговорок о оптимизации и "инлайнирование" неверны. Программист может (и, пожалуй, обязан) написать так, что в любом случае память программ будет расходоваться одинаково экономно.
По всем трем пунктам большое спасибо. Писал все это под утро, уж на автопилоте. Только это что-то мало помогло. Решил упростить все до безобразия и вот... Что же еще упускаю?
Прикрепленное изображение


2) если вы про пояснения в листинге, то там то же, что и в окне Build
Цитата
3) Программист может (и, пожалуй, обязан) написать так
То есть вы считаете, что программист заранее ОБЯЗАН знать, что лучше применить макросы или подпрограммы? По-моему, это не так тривиально и возможно только когда окончательно устаканится код... Лично меня как-то все время больше "тянет" на подпрограммы и уже позже, начинаю замечать, что вызовов не так много и возможно макросы отработают лучше...
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 9 2010, 09:33
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(ivainc1789 @ Feb 9 2010, 01:21) *
То есть вы считаете, что программист заранее ОБЯЗАН знать, что лучше применить макросы или подпрограммы?

Ну нет же! Вы воюете с ветряными мельницами, выискивая несуществующую разницу.
Про pragma inline=forced Вы слышали? Она позволяет сделать так, что содержимое функции будет вставлено в текст программы. Потом, после оптимизации Вы получите код, идентичный написанному с использованием макросов.
Все одно, разница только в синтаксисе.
У Вас SETBIT() - это макрос, а у меня SetPin() - это функция, а компилируются они одинаково.


--------------------
Уходя, оставьте свет...
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
- - _Pasha   Пример, заменяющий первую половину использованной ...   Feb 8 2010, 21:21
|- - ivainc1789   Цитата(_Pasha @ Feb 9 2010, 00:21) Пример...   Feb 8 2010, 21:44
|- - _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   Цитата(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 Текстовая версия Сейчас: 1st August 2025 - 17:31
Рейтинг@Mail.ru


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