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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Макросы в IAR EWAVR, v5.40.1
rezident
сообщение Feb 9 2010, 17:26
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



На последнем скриншоте из сообщения #13 в макросах нужно убрать завершающий символ "точка с запятой". Потому что этот символ присутствует в тексте программы после "вызова" макросов.
Код
  Simple1(1);
  Simple2(2);
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Feb 9 2010, 19:09
Сообщение #17


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

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



Цитата(rezident @ Feb 9 2010, 20:26) *
На последнем скриншоте из сообщения #13 в макросах нужно убрать завершающий символ "точка с запятой". Потому что этот символ присутствует в тексте программы после "вызова" макросов.
Код
  Simple1(1);
   Simple2(2);
Верно. Я специально это проверил и с оператором ";" и без. Компилер вроде не ругается и в листинге норма. Или есть какая-то неявная опасность?
Go to the top of the page
 
+Quote Post
rezident
сообщение Feb 9 2010, 20:50
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(ivainc1789 @ Feb 10 2010, 00:09) *
Или есть какая-то неявная опасность?

Точка с запятой является концом оператора. Если она попадет в выражение, то выражение или описание может превратиться в оператор там, где это вовсе не предполагалось.
Пример конечно надуманный, но попробуйте представить, что будет в случае наличия лишнего символа ";" при макроподстановке в цикле for
Код
for (cntr=0; MACRO; cntr++)
{
...
}
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 9 2010, 20:54
Сообщение #19


Гуру
******

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



Цитата(ivainc1789 @ Feb 9 2010, 19:23) *
вы оформили SetPin() как функцию сознательно по каким-либо существенным мотивам или "просто так сложилось"?
Т. е. для вас есть существенная разница как написать данную функцию для девайса со всего лишь 4к флеша? ...
не проще ли макрос написать?


1) У меня система описания портов посложнее. Поскольку на одной плате реализовано несколько разноплановых проектов, я поставил задачу определять порты в отдельном файле в виде:
Код
  OUTPUT  (   PulseWdt        ,   A  , 0x01    )
  OUTPUT  (   Backlight       ,   A  , 0x02    )
  OUTPUT  (   EmptyError    ,   A  , 0x04    )
  INPUT    (   SdaIn           ,   B  , 0x01    )

и в общем то решил эту задачу с помощью функций. С макросами как-то не получалось. Не помню уже, почему.

2) если что макрос, что функция занимают одинаково места, то при чем тут размер памяти? Да, без оптимизации моя программа не поместится в память, но я никогда не компилирую без оптимизации. Компилятору нужно доверять.

3) Может и проще, но не такие, как у Вас smile.gif
Писал я подобные макросы. Основной их недостаток - плохая читаемость. А будете работать с тремя-четырьмя семействами контроллеров одновременно, крыша съедет. Мое мнение такое - или макросы должны быть простейшие, или уж система макросов должна надежно поддерживать логичную структуру описания объектов.
От проекта к проекту я так и делаю то одно, то другое, не используя Ваши промежуточные подходы, когда нужно помнить всю эту логику "макросизации".

Эта тема обсуждалась на форуме пару раз, может есть смысл поискать.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

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

 


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


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