|
Макросы в IAR EWAVR, v5.40.1 |
|
|
|
 |
Ответов
|
Feb 8 2010, 21:21
|
;
     
Группа: Участник
Сообщений: 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 получаем некоторую свободу от пересчета делителя. Такие дела.
|
|
|
|
|
Feb 9 2010, 15:23
|

Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Feb 9 2010, 20:54
|
Гуру
     
Группа: Свой
Сообщений: 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) Может и проще, но не такие, как у Вас  Писал я подобные макросы. Основной их недостаток - плохая читаемость. А будете работать с тремя-четырьмя семействами контроллеров одновременно, крыша съедет. Мое мнение такое - или макросы должны быть простейшие, или уж система макросов должна надежно поддерживать логичную структуру описания объектов. От проекта к проекту я так и делаю то одно, то другое, не используя Ваши промежуточные подходы, когда нужно помнить всю эту логику "макросизации". Эта тема обсуждалась на форуме пару раз, может есть смысл поискать.
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
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    AHTOXA Цитата(ivainc1789 @ Feb 9 2010, 20:23) Из... Feb 9 2010, 15:38     ivainc1789 Цитата(AHTOXA @ Feb 9 2010, 18:38) Уберит... Feb 9 2010, 16:32  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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|