|
|
  |
IAR меня игнорирует . :(, Причем , молча.... собака! |
|
|
|
Sep 17 2009, 12:10
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(Rst7 @ Sep 17 2009, 16:05)  Конкретно в IAR'е для AVR этот макрос разворачивает union со всякими собственными диалектическими словами типа __io и @. Можно реализовать и более стандартно, путем организации приведения типов. если Вы имеете ввиду это Код /*==========================*/ /* Predefined SFR Addresses */ /*==========================*/
/**************************************************************************** * An example showing the SFR_B() macro call, * the expanded result and usage of this result: * * SFR_B(AVR, 0x1F) Expands to: * __io union { * unsigned char AVR; // The sfrb as 1 byte * struct { // The sfrb as 8 bits * unsigned char AVR_Bit0:1, * AVR_Bit1:1, * AVR_Bit2:1, * AVR_Bit3:1, * AVR_Bit4:1, * AVR_Bit5:1, * AVR_Bit6:1, * AVR_Bit7:1; * }; * } @ 0x1F; * Examples of how to use the expanded result: * AVR |= (1<<5); * or like this: * AVR_Bit5 = 1; ***************************************************************************/ То в моей версии IAR, как видите, это закоментировано и дано как образец. Т.е. это все самому прописывать надо
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Sep 17 2009, 12:29
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Все разобрался. В файле iom<номер контроллера>.h есть объявление SFR_B(PINC, 0x13), а также подключен зыголовочный файл iomacro.h, в котором SFR_B определено как Код #define SFR_B(_NAME, _ADDR) SFR_B_BITS(_NAME, _ADDR, \ Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7) В свою очередь SFR_B_BITS определено как Код #define SFR_B_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \ __io union { \ unsigned char _NAME; /* The sfrb as 1 byte */ \ struct { /* The sfrb as 8 bits */ \ __BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \ }; \ } @ _ADDR;
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Sep 17 2009, 16:34
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(dimka76 @ Sep 17 2009, 15:02)  А что есть еще варианты? Вариантов полно, главное проявить фантазию Мне, из-за моей забывчивости и постоянного переключения между проектами , нравится типа так: if (GetPin(ALARM_BUTTON)) SetPin(LOCK_THE_DOOR); Ну а дальше работает оптимизация, приводящая все к нескольким командам.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Sep 17 2009, 21:00
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(zltigo @ Sep 17 2009, 23:18)  Баловство все эти фирменные навороты или навороченные (переболел в свое время) макросы.... Где все-таки грань навороченности макросов, не только для портов? Я наоборот, от простых макросов описания конкретных портов перехожу к более универсальным. Ниже - перебор? (много поскипано, но идея, думаю, понятна) Код OUTPUT ( PulseWdt , P1 , 0x01 ) INPUT ( KeyStIn , ~P1 , 0x10 ) ... #pragma inline=forced unsigned char GetPin(unsigned int name); #pragma inline=forced void OnPin(unsigned int name); ... // generation of inputs functions unsigned char GetPin( unsigned int name) { switch (name) { #define INPUT( name, port, bit) case name: return (port##IN & bit); #include pins_file default: return 0; } }
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Sep 17 2009, 21:07
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Dog Pawlowa @ Sep 18 2009, 03:00)  Где все-таки грань навороченности макросов, не только для портов? Грань на границе HAL стоит. Цитата(Dog Pawlowa @ Sep 18 2009, 03:00)  Я наоборот, от простых макросов описания конкретных портов перехожу к более универсальным. Зачем? Опишите функцию (имею в виду не программное понятие, а функциональную модель аппаратуры), которую выполняет hardware и работайте дальше с этой абстракцией. Все равно то, что в пределах HAL лежит аппаратнозависимо и некроссплатформенно. Нафига зачем какие-то универсальные порты описывать-то?
|
|
|
|
|
Sep 17 2009, 21:29
|

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

|
Цитата(Dog Pawlowa @ Sep 18 2009, 03:00)  Ниже - перебор? (много поскипано, но идея, думаю, понятна) Так есть же макросы имени Волкова. Очень удобно. Я так привык к ним, что для плюсов тоже соорудил аналог, правда для stm32 и msp430.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|