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

 
 
> Повторный вызов функции
Георгий
сообщение Dec 1 2005, 06:40
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Вопрос по повторному вызову функций. Есть такой алгоритм:
читается с линии байт и по результатам чтения устанавливается ПРИЗНАК_А и РЕЗУЛЬТАТ_А. В зависимости от ПРИЗНАК_А производятся разные действия, одно из которых теперь уже в зависимости от РЕЗУЛЬТАТ_А может потребовать прием второго байта с линии. Так вот, когда второй байт принимаю, он всегда равен первому принятому байту. Я уже продублировал функцию приема с линии и для приема второго байта использую другую функцию с другими переменными. Но результат тот же. Это же алгоритм отлично работает на ассемблере. Причем когда идут однобайтовые команды, они принимаются нормально, при двухбайтовых происходит этот глюк. Код, к сожалению, выложить не могу, привожу условно. Хотелось бы теоретических рекомендаций, где я криво написал.
Код
РЕЗУЛЬТАТ_А = 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


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Георгий   Повторный вызов функции   Dec 1 2005, 06:40
- - Alex11   Если это не дурацкая ошибка в строке if (РЕЗУЛЬТАТ...   Dec 1 2005, 10:09
- - Георгий   Это была не ошибка, это я не дописал, сейчас испра...   Dec 1 2005, 10:32
- - rezident   А func_receive_2() как-то опрашивает готовность пр...   Dec 1 2005, 16:46
- - Георгий   Если бы вы внимательно прочитали, то увидели, у ме...   Dec 2 2005, 05:33
- - Георгий   Нашел глюк компилятор, взгляните на куски листинга...   Dec 2 2005, 10:10
- - Георгий   Разнес процедуры в разные модули - глюк исчез. А р...   Dec 5 2005, 06:55
- - KSN   Попробуйте к критичным переменным применить иденти...   Dec 6 2005, 11:58
- - Георгий   А какую роль играет модификатор volatile? Пробую ...   Dec 6 2005, 12:17
- - IgorKossak   Георгий , может вместоКодif ((PIND & 4...   Dec 6 2005, 12:55
- - Георгий   Так, конечно, понятнее и красивее, но конечный код...   Dec 6 2005, 13:08
- - vet   Кстати, в программе так и написано? case 1: func1;...   Dec 6 2005, 13:16
- - Георгий   case 1: func1(); break; Про скобки я по...   Dec 6 2005, 13:25
- - KSN   идентификатор volatile сообщает компилятору, что э...   Dec 7 2005, 07:46
- - Георгий   Посмотрел осцилограммы и убедился, что глюк у меня...   Dec 15 2005, 05:50


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

 


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


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