Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.01.2011, 17:52
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
WinAVR оператор "И"
WinAVR не хочет воспринимать вот это, т.е. компилирует без проблем, а реализовывать отказывается:
Код:
|
#define bit_is_0_and_1(reg,bit,reg1,bit1) ((!(reg & (1‹‹(bit))))&&(!(reg1 & (0‹‹(bit1))))) //проверка на линии порта 0 и 1 |
Сразу оговорюсь, что пробовал как логический оператор &&, так и побитовый оператор &, все равно не работает
хотя вот это прекрасно кушает:
Код:
|
#define bit_is_0(reg, bit) (!(reg & (1‹‹(bit)))) //проверка на линии порта 0 |
Моделирую в Proteus, уровень оптимизации OPT=s
Последний раз редактировалось Sho_otnik; 16.01.2011 в 17:58.
|
|
|
|
16.01.2011, 17:57
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: WinAVR оператор "И"
Забыл добавить, что используется это примерно так:
Код:
|
if(bit_is_0_and_1(PINA,4,PINA,7)){Ftype_1(freq_in, step_in,step);} |
|
|
|
|
16.01.2011, 18:41
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: WinAVR оператор "И"
Сообщение от Sho_otnik
|
(0‹‹(bit1))
|
Это что такое?
(Кстати, в макросе аргументы reg и reg1 тоже не мешает в скобки взять)
|
|
|
|
16.01.2011, 18:51
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: WinAVR оператор "И"
Так наглядней?
Код:
|
if (!(PIND & (1‹‹PIND1))) // проверить "0" на линии 1 порта D |
|
|
|
|
16.01.2011, 19:03
|
|
Временная регистрация
Регистрация: 25.11.2009
Сообщений: 61
Сказал спасибо: 1
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
|
Re: WinAVR оператор "И"
Я бы написал так:
Код:
|
#define bit_is_0_and_1(reg,bit,reg1,bit1) ( ((reg) & (1‹‹(bit))) == 0 && ((reg1) & (1‹‹(bit1))) != 0 ) |
А лучше имхо составлять сложные макросы из простых:
Код:
|
#define BITIS0(port, bit) (((port) && (1‹‹(bit))) == 0)
#define BITIS1(port, bit) (((port) && (1‹‹(bit))) != 0)
#define BITS0AND1(port1, bit1, port2, bit2) (BITIS0(port1, bit1) && BITIS1(port2, bit2)) |
Хотя зачем такой макрос нужен, мне не совсем ясно. Я бы писал составное условие прямо в коде - оно и понятнее будет.
|
|
|
|
16.01.2011, 19:04
|
|
Временная регистрация
Регистрация: 03.02.2005
Сообщений: 52
Сказал спасибо: 8
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
|
Re: WinAVR оператор "И"
Смотри : https://kazus.ru/forums/showpost.php...92&postcount=8
testerplus, вам уже намекнул, а вы даже подумать не хотите.
|
|
|
|
16.01.2011, 19:53
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: WinAVR оператор "И"
to igor-k
Не волнуйтесь за меня уважаемый, книгу заказал -книга едет)
|
|
|
|
16.01.2011, 19:55
|
|
Частый гость
Регистрация: 01.01.2011
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: WinAVR оператор "И"
PS
Решил проблему просто вложенным условием if)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:09.
|
|