реклама на сайте
подробности

 
 
> Как "красиво" написать этот кусочек?, Хочется писать красиво...
Pyku_He_oTTyda
сообщение Mar 22 2007, 21:44
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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;
};
}


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Mar 23 2007, 00:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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)
{
....
}
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 23 2007, 14:34
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
_sR_
сообщение Mar 23 2007, 21:19
Сообщение #4


Участник
*

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



Цитата(Сергей Борщ @ Mar 23 2007, 14:34) *
Присваивание целого структуре и наоборот недопустимо. Тогда уж
Код
union...


поддерживаю
кроме того, не помню, чтобы стандарт гарантировал прямое соответствие битов значения целого и битов
поля.
хотя признаю, что отклонения не встречал, но ведь вопрос был в красоте smile.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 24 2007, 15:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(_sR_ @ Mar 23 2007, 22:19) *
поддерживаю
кроме того, не помню, чтобы стандарт гарантировал прямое соответствие битов значения целого и битов
поля.
хотя признаю, что отклонения не встречал, но ведь вопрос был в красоте smile.gif


А помоему это красивое решение (хотя понятие субъективное). И что ещё важнее - точно отражает суть. То есть у вас признаки нажатия. Очень читабелен текст.

Код
if(Key.Up)
{
   MotorVert(On);
}


Что тут написано вспомнишь ч/з год. smile.gif
Go to the top of the page
 
+Quote Post
_sR_
сообщение Mar 25 2007, 19:54
Сообщение #6


Участник
*

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



Цитата(SasaVitebsk @ Mar 24 2007, 15:54) *
А помоему это красивое решение...


Никто не сказал, что Ваше решение не красиво.
Более того, оно мне тоже нравится и в одном из проектов сделал точно так как Вы. Человек, который в последствии поддерживал этот код, понял все сразу.
Сергей Борщ просто показал как это записать "по циркулю" smile.gif.
Я же предупредил, что такое присваивание, может содержать сюрприз, т.к. стандарт не определяет явно соответствие битовых полей и битов слова в котором они хранятся. К счастью для нас, все разработчики компиляторов думают в этом случии одинаково и надо просто не забывать о возможных граблях.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016