функция invite();
Цитата:
void invite(){ //ïðèãëàøåíèå â ìåíþ íàñòðîåê
volatile uint8_t countdown = 5; //ñ÷¸ò÷èê îáðàòíîãî îòñ÷¸òà
lcd_clrscr();
lcd_home();
if ((eeprom_read_byte(&eeprom_tm_serial_num.device_code)==0)||(eeprom_read_byte(&eeprom_tm_serial_num.device_code)==0xFF))
/* åñëè êëþ÷ åù¸ íå çàïèñàí*/
{//[if]
joystick_event = no_pressing;
lcd_puts("Çàïèñü êëþ÷à ÒÌ");
lcd_gotoxy(0, 1);
lcd_puts("Öåíòð.êí.-îòìåíà");
//timer1 = 0;
while ((joystick_event!=key_central_pressing)&&(eeprom_read_byte(&eeprom_tm_serial_num.device_code)==0)||(eeprom_read_byte(&eeprom_tm_serial_num.device_code)==0xFF)) //ïîêà íå íàæàòà öåíòðàëüíàÿ êíîïêà èëè íå çàïèñàí êëþ÷
{//[while]
]while ((cr_received==false)&&(joystick_event==no_pressing)&&(tm_event == no_tm_event)){};
if (cr_received)
{
parsing_command();
}
switch(tm_event)
{//[switch]
case no_tm_event:
{
}
break;
case tm_crc_error:
{
lcd_clrscr();
lcd_home();
lcd_puts("Îøèáêà CRC");
timer2 = 0;
while (timer2 < 6000){};
lcd_clrscr();
lcd_home();
lcd_puts("Çàïèñü êëþ÷à ÒÌ");
lcd_gotoxy(0, 1);
lcd_puts("Öåíòð.êí.-îòìåíà");
tm_event=no_tm_event;
}
break;
case tm_crc_ok:
{
eeprom_write_byte(&eeprom_tm_serial_num.device_code,device_code);
for (int i = 0; i<6; i++ )
{
eeprom_write_byte(&eeprom_tm_serial_num.serial[i],tm_code[i]);
}
lcd_clrscr();
lcd_home();
lcd_puts("Êëþ÷ ÒÌ çàïèñàí!");
timer2 = 0;
while (timer2 < 6000){};
tm_event=no_tm_event;
}
break;
}//[/switch]
if (joystick_event==key_central_pressing)
break;
if (joystick_event!=key_central_pressing) joystick_event = no_pressing;
};//[/while]
if (joystick_event==key_central_pressing)
/*åñëè âûøëè ïî íàæàòèþ öåíòðàëüíîé êíîïêè*/
{
joystick_event = no_pressing;
lcd_clrscr();
lcd_home();
lcd_puts("Äëÿ íàñòðîåê æìè\nöåíòð. êíîïêó 5");
//lcd_puts("Âïðàâî");
while ((countdown > 0)&&(joystick_event==no_pressing))//ïîêà íå êîí÷èòüñÿ îáðàòíûé îòñ÷¸ò èëè íå íàæìóí êíîïêó äæîéñòèêà
{
timer2 = 0;
while ((timer2 < 6000)&&(joystick_event==no_pressing)){};
if (joystick_event!=no_pressing) break; //åñëè íàæàòà êíîïêà, âûõîäèì èç öèêëà
lcd_gotoxy(14, 1);
countdown--;
lcd_puts(int_to_str(countdown,0));
}
if (joystick_event==key_central_pressing)
{
get_all_setings();
/*
get_int_settings("Èäåíò. èãðîêà:", &eeprom_player_id, 127); //íàæàòà öåíòðàëüíàÿ êíîïêà
set_player_id(eeprom_read_byte(&eeprom_player_id)); //Óñòàíàâëèâàåì èäåíòèôèêàòîð èãðîêà
get_int_settings("Èäåíò. êîìàíäû:", &eeprom_team_id, 3); //íàæàòà öåíòðàëüíàÿ êíîïêà
set_team_color(team_id()); //Óñòàíàâëèâàåì èäåíòèôèêàòîð (öâåò) êîìàíäû
get_enum_settings("Íàíîñèìûé óðîí:", &eeprom_damage, &damage_value, Damage_100);
set_gun_damage(gun_damage()); //Óñòàíàâëèâàåì ìîùüíîñòü îðóæèÿ (óðîí)
get_int_settings("Åìêîñòü ìàãàçèíà:", &eeprom_bullets_in_clip, 90); //íàæàòà öåíòðàëüíàÿ êíîïêà
get_int_settings("Ìàãàçèíîâ:", &eeprom_clips, 90);
get_int_settings("Âðåìÿ ïåðåçàðÿäà:", &eeprom_reload_duration, 8);
*/
// return;
}
}
// bullets = eeprom_read_byte(&eeprom_bullets_in_clip);
// BULLETS_OUT_LED_OFF;
bullets = 0;
BULLETS_OUT_LED_ON;
clips = eeprom_read_byte(&eeprom_clips);
joystick_event=no_pressing;
keyboard_event=no_key_pressing;
tm_event=no_tm_event;
Вот
while ((joystick_event!=key_central_pressing)&&(eeprom_read_byte(&eeprom_tm_serial_num.device_code)==0)||(eeprom_read_byte(&eeprom_tm_serial_num.device_code)==0xFF))
Ждем нажатия центральной кнопки
А тут
while ((cr_received==false)&&(joystick_event==no_pressing)&&(tm_event == no_tm_event))
Программа тут остановиться и не пойдет дальше, пока выполняются условия в скобках
То есть пока не принята строка в UART либо не нажата кнопка джойстика либо тачмемори не присоединен.
А дальше выясняем - какое из перечисленных условий нарушено, то есть какое из событий наступило и соответственно реагируем
Надо добавить еще - пока сообщение (команда пульта) не получено