|
Непонятный результат компиляция на IARe, Подскажите, в чем я не прав |
|
|
|
Apr 25 2007, 12:37
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Смешно, что вчера все работало. Подрабатывает обработка одновременного нажатия двух клавиш Код if ((pressed_keys == kUp | kDn) && // now these two keys ~(kbd_status3 & (kUp | kDn))) //and before it wasn't so { found_events |= kUpDn; // set new bit found_events &= ~(kUp | kDn); //reset usual bits } Откомпилировалось в это
Я удручен, этот код работает годами на разных платформах. Что не так?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
 |
Ответов
|
Apr 25 2007, 13:51
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Dog Pawlowa @ Apr 25 2007, 12:37)  Я удручен, этот код работает годами на разных платформах. Что не так? Я удручен не меньше вашего, за Вас и за все "платформы" на которых НЕ СОБЛЮДАЕТСЯ приоритет операции равно (==) перед поразрядным логическим или (|). Код if ((pressed_keys == (kUp | kDn)) && // now these two keys ~(kbd_status3 & (kUp | kDn))) //and before it wasn't so
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 25 2007, 14:04
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(zltigo @ Apr 25 2007, 13:51)  Я удручен не меньше вашего, за Вас и за все "платформы" на которых НЕ СОБЛЮДАЕТСЯ приоритет операции равно (==) перед поразрядным логическим или (|)... Принимаю соболезнования. Ошибка в приоритетах влияла, видимо, на незначительные свойства - неподавленный дребезг комбинации клавиш, который не влиял на пользовательские свойства. Перепроверил. Это тот же код для MSP430. Тоже IAR. kDn=2, kUp=8. А теперь расскажите мне про последовательность операций... Код 72 if ((pressed_keys==kUp+kDn)&& // now this two keys 73 ((~kbd_status3)&(kUp+kDn)))//and before it wasn't so \ 00008E F2900A00.... CMP.B #0xa, &pressed_keys \ 000094 0D20 JNE ??KbdService_6 \ 000096 5E42.... MOV.B &kbd_status3, R14 \ 00009A 7EE3 XOR.B #0xff, R14 \ 00009C 7EB00A00 BIT.B #0xa, R14 \ 0000A0 0724 JEQ ??KbdService_6 74 {found_events|=kUpDn; // set new bit \ 0000A2 F2D01000.... BIS.B #0x10, &found_events 75 found_events&=~(kUp+kDn); break; } //reset usual bits \ 0000A8 F2F0F500.... AND.B #0xf5, &found_events \ 0000AE 3041 RET
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Apr 25 2007, 15:02
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Сергей Борщ @ Apr 25 2007, 14:59)  Ищите 10 отличий: kUp+kDn и kUp | kDn Спасибо. Интересно, коллективный разум знает, зачем я поменял ?  И все это не объясняет почему работало вчера на AVR в уже неправильном виде. Впрочем, нужно идти вперед.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Apr 26 2007, 02:19
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Dog Pawlowa @ Apr 25 2007, 14:02)  Спасибо. Интересно, коллективный разум знает, зачем я поменял ?  Видимо чтобы выработать в себе хорошую привычку. Ведь если эти константы будут иметь более одного единичного бита и какие-то из битов совпадут, то результат | будет более правильный: Код enum {keyRepeat = (1<<7), kUp = (1<<0), kDn = (1<<1), kRUp = KeyRepeat | kUp, kRDn = KeyRepeat | kDn }; if(kbd_status3 & (kRUp | kRDn)) // ok if(kbd_status3 & (kRUp + kRDn)) // oops
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Dog Pawlowa Непонятный результат компиляция на IARe Apr 25 2007, 12:37 wodya Код if ((pressed_keys == kUp | kDn) ... Apr 25 2007, 12:59 =AVR= Похоже, что не обработался двухстрочный код (кстат... Apr 25 2007, 13:08 Dog Pawlowa Борюсь пока.
Последовательность действительно неп... Apr 25 2007, 13:48  =GM= [DELETED]
Совсем не по теме. Apr 25 2007, 13:54  IgorKossak Цитата(Dog Pawlowa @ Apr 25 2007, 13:48) ... Apr 25 2007, 13:56 IgorKossak Двухстрочные коды, даже с комментариями, в ИАРе об... Apr 25 2007, 13:41 =GM= Цитата(Dog Pawlowa @ Apr 25 2007, 08:37) ... Apr 25 2007, 13:45 Dog Pawlowa Цитата(=GM= @ Apr 25 2007, 13:45) Мне каж... Apr 25 2007, 13:58 Igor26 ЦитатаЗнак продолжения строки
А как он указывается... Apr 25 2007, 13:51 IgorKossak Цитата(Igor26 @ Apr 25 2007, 13:51) А как... Apr 25 2007, 14:02 defunct Сравните также
( (~kbd_status3) & (kUp+kDn) )... Apr 26 2007, 00:40
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|