Вопрос по повторному вызову функций. Есть такой алгоритм:
читается с линии байт и по результатам чтения устанавливается ПРИЗНАК_А и РЕЗУЛЬТАТ_А. В зависимости от ПРИЗНАК_А производятся разные действия, одно из которых теперь уже в зависимости от РЕЗУЛЬТАТ_А может потребовать прием второго байта с линии. Так вот, когда второй байт принимаю, он всегда равен первому принятому байту. Я уже продублировал функцию приема с линии и для приема второго байта использую другую функцию с другими переменными. Но результат тот же. Это же алгоритм отлично работает на ассемблере. Причем когда идут однобайтовые команды, они принимаются нормально, при двухбайтовых происходит этот глюк. Код, к сожалению, выложить не могу, привожу условно. Хотелось бы теоретических рекомендаций, где я криво написал.
Код
РЕЗУЛЬТАТ_А = func_receive(); // тут же формируется через глобальную переменную ПРИЗНАК_А
switch (ПРИЗНАК_А)
{
case 1: func1;
break;
case 2: func2(РЕЗУЛЬТАТ_А);
break;
default: func3;
break;
}
void func2(unsigned char РЕЗУЛЬТАТ_А)
{
switch (РЕЗУЛЬТАТ_А)
{
case 1: func1_1;
break;
case 2: РЕЗУЛЬТАТ_Б = func_receive_2(); // РЕЗУЛЬТАТ_Б = РЕЗУЛЬТАТ_А всегда!
if ((РЕЗУЛЬТАТ_Б & 2) == 0)
PORTD &= 0xBF;
else PORTD |= 0x40;
break;
}
}
Сообщение отредактировал Георгий - Dec 1 2005, 10:24