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

 
 
> Два вложенных бесконечных цикла вызывают сбой USART
Anub
сообщение Sep 27 2008, 15:24
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 26-05-08
Пользователь №: 37 825



ATTINY2313
8мГц
Код
while(1){
          if (setTimeFunctionEnabled){
              while(1){
                      ;                  
             };
          }
          if (PINB==0b11111011){  
              setTimeFunctionEnabled = 1;
              while(PINB==0b11111011){};
          }        
    };

Вот такая конструкция приводит к тому что USART начинает работать хз как. При отправке одного или двух символов все приходит нормально, при отправке трех приходит битая строка в которой частично или все другие символы, при попытке отправить четыре и более символов не приходит вообще ничего, либо приходит полный бред. При удалении цикла из строки три все приходит в норму. Я подозреваю что происходит нехватка производительности и контроллер не успевает в такт протоколу отправки. Какие мнения, что это еще может быть?

Сообщение отредактировал Anub - Sep 27 2008, 15:26
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Anub
сообщение Sep 27 2008, 16:28
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 26-05-08
Пользователь №: 37 825



Код
USHORT H = 23;
USHORT M = 31;
USHORT S = 40;
USHORT fi, se, th, fo;
bit FuncEnabled = 0;
char SetCountCommand[7] = {':','1','3','4','6','/'};
bit setTimeFunctionEnabled = 0;

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{  
    TCNT1=57723;//57723
    if (S!=59){
        S++;
    } else {
        S=0;
        M++;
    }
    if (M==60){
        M=0;
        H++;
    }
    if (H==24){
        H=0;
    }
    //PAINT(M/10, M%10, S/10, S%10);
    
    if (FuncEnabled!=1){
        SetCountCommand[1]=M/10+48;
        SetCountCommand[2]=M%10+48;
        SetCountCommand[3]=S/10+48;
        SetCountCommand[4]=S%10+48;
        
        puts(SetCountCommand);          
    } else {
       ;
    }
}
void scanCP(void)
{
    USHORT pos = 1;
    while(1){
          if (setTimeFunctionEnabled){
              while(1){                                                       //Программа работает идеально до появления этого цикла
                       if (PINB==0b11110111){   //JoyUp     //Наличие с содержимое кода на ситуацию никак не влияют
                            if (pos==1){
                                fi++;
                                SetCountCommand[1]=fi;
                                puts(SetCountCommand);
                            }
                       }
             };
          }
          if (PINB==0b11111011){  
              FuncEnabled = 1;
              setTimeFunctionEnabled = 1;
              while(PINB==0b11111011){};
          }        
    };
}
Go to the top of the page
 
+Quote Post
aesok
сообщение Sep 27 2008, 16:40
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Что делает фукция 'puts'? Ее код если она ваша, или описание если нет.

Анатолий.
Go to the top of the page
 
+Quote Post



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

 


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


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