|
Как "красиво" написать этот кусочек?, Хочется писать красиво... |
|
|
|
Mar 22 2007, 21:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Вот такой кусочек кода, как написать его покрасивее? Заранее благодарен за внимание! Код void read_key(void) { if(PINA==0xFE) { up_press=1; } else { up_press=0; };
if(PINA==0xFD) { down_press=1; } else { down_press=0; };
if(PINA==0xFB) { left_press=1; } else { left_press=0; };
if(PINA==0xF7) { right_press=1; } else { right_press=0; };
if(PINA==0xEF) { mode_press=1; } else { mode_press=0; };
if(PINA==0xDF) { set_press=1; } else { set_press=0; }; }
--------------------
Андрей Смирнов
|
|
|
|
|
 |
Ответов
|
Mar 23 2007, 00:30
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
А если так??? Код #define CNT_KEY 6 // Число кнопок __no_init struct { uint8_t Up : 1, // Вверх Down : 1, // Вниз Left : 1, // Влево Right : 1, // Вправо Mode : 1, // Мода Set : 1; // Установить } Key;
void read_key() { uint8_t i,j,k; Key = ~PINA; i = ~Key; k=0; for(j=0;j<CNT_KEY;j++) {k += i & 1; i >>= 1}; if(k>1) Key = 0; }
// А анализировать так
if(Key.Up) { .... }
|
|
|
|
|
Mar 23 2007, 14:34
|

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

|
Цитата(SasaVitebsk @ Mar 22 2007, 23:30)  А если так??? Код Key = ~PINA; i = ~Key; Присваивание целого структуре и наоборот недопустимо. Тогда уж Код union { struct { uint8_t Up : 1, // Вверх uint8_t Down : 1, // Вниз .......... }, uint8_t raw; } Key;
Key.raw = ~PINA; i = ~Key.raw;
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 23 2007, 21:19
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 25-07-05
Из: Екатеринбург
Пользователь №: 7 077

|
Цитата(Сергей Борщ @ Mar 23 2007, 14:34)  Присваивание целого структуре и наоборот недопустимо. Тогда уж Код union... поддерживаю кроме того, не помню, чтобы стандарт гарантировал прямое соответствие битов значения целого и битов поля. хотя признаю, что отклонения не встречал, но ведь вопрос был в красоте
|
|
|
|
|
Mar 24 2007, 15:54
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(_sR_ @ Mar 23 2007, 22:19)  поддерживаю кроме того, не помню, чтобы стандарт гарантировал прямое соответствие битов значения целого и битов поля. хотя признаю, что отклонения не встречал, но ведь вопрос был в красоте  А помоему это красивое решение (хотя понятие субъективное). И что ещё важнее - точно отражает суть. То есть у вас признаки нажатия. Очень читабелен текст. Код if(Key.Up) { MotorVert(On); } Что тут написано вспомнишь ч/з год.
|
|
|
|
|
Mar 25 2007, 19:54
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 25-07-05
Из: Екатеринбург
Пользователь №: 7 077

|
Цитата(SasaVitebsk @ Mar 24 2007, 15:54)  А помоему это красивое решение... Никто не сказал, что Ваше решение не красиво. Более того, оно мне тоже нравится и в одном из проектов сделал точно так как Вы. Человек, который в последствии поддерживал этот код, понял все сразу. Сергей Борщ просто показал как это записать "по циркулю"  . Я же предупредил, что такое присваивание, может содержать сюрприз, т.к. стандарт не определяет явно соответствие битовых полей и битов слова в котором они хранятся. К счастью для нас, все разработчики компиляторов думают в этом случии одинаково и надо просто не забывать о возможных граблях.
|
|
|
|
Сообщений в этой теме
Pyku_He_oTTyda Как "красиво" написать этот кусочек? Mar 22 2007, 21:44 _sR_ Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:4... Mar 22 2007, 22:06 singlskv Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:4... Mar 22 2007, 22:08 Сергей Борщ Цитата(Pyku_He_oTTyda @ Mar 22 2007, 20:4... Mar 22 2007, 22:09 Pyku_He_oTTyda Спасибо!
Несколько кнопок не могут быть нажаты... Mar 22 2007, 22:26 Сергей Борщ Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:2... Mar 22 2007, 22:37  singlskv Цитата(Сергей Борщ @ Mar 22 2007, 22:37) ... Mar 22 2007, 22:48   Сергей Борщ Цитата(singlskv @ Mar 22 2007, 21:48) так... Mar 22 2007, 22:57    singlskv Цитата(Сергей Борщ @ Mar 22 2007, 22:57) ... Mar 22 2007, 23:41 singlskv А значения up_press, down_press , .....
нельзя объ... Mar 22 2007, 22:40 Pyku_He_oTTyda Цитатато есть если несколько нажато, то считаем чт... Mar 22 2007, 22:44 SasaVitebsk Ну ты у нас с первого взгляда ....
Я бы ч/з ... Mar 23 2007, 20:57 smk switch () {
case :
break;
defa... Mar 23 2007, 22:30 kamedi_clab Цитата(smk @ Mar 23 2007, 22:30) switch (... Mar 23 2007, 23:44 Pyku_He_oTTyda Спасибо всем
Закончу прогу, перепишу кусочек, восп... Mar 24 2007, 09:58 kamedi_clab Надеюсь покажешь как кусочек реализован ? Mar 24 2007, 10:11 Pyku_He_oTTyda Покажу Mar 24 2007, 21:21 proba Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:4... Mar 25 2007, 10:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|