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

 
 
> не работает банально простой фрагмент, scmRtos / Mega128 / AVR-GCC
nanorobot
сообщение Jun 7 2017, 09:08
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



На вход Input Capture поступат импульсы от детектора перехода через ноль сетевого напряжения. Цель - определть момен пропадания этого нпряжения. в процессе с наименьшим приоритетом выполняется
следующий фрагмент. Print() выводит на LCD значение счетчика. Счет в плюс выполняется с правильной частотой. Если перемыкаю выход оптрона детектора, счет останавливается, но счетчик не сбрасывается в 0,
как ожидалось. Частота системного тика близка к 1000 Гц. То есть wait() c ненулевым таймаутом ждет event бесконечно... ev_psync - поле класса, но полагаю, это не имеет значения...

Код
  
  bool ok;
  TIMSK= (1 << TICIE1);            // разрешим прерывания PSYNC

  while(1){
      ok = ev_psync.wait(10);
      if(ok){
        psync_cnt++;
        ev_psync.clear();                               // добавил на всякий случай, не помогло
      }
      else  psync_cnt = 0;
      Print();
  }


обработчик прерывания:

Код
OS_INTERRUPT void TIMER1_CAPT_vect()
{
  OS::TISRW_SS ISRW;
  ENABLE_NESTED_INTERRUPTS();
  cc.ev_psync.signal_isr();
}


переделал так:
Код
OS::sleep(10);
      ok = ev_psync.is_signaled();
      if(ok){
          ev_psync.clear();
          psync_cnt++;}
      else{
          psync_cnt = 0;}
      Print();


счета нет совсем. то есть опять таки ненулевой таймаут не отоабатывает


Сообщение отредактировал nanorobot - Jun 7 2017, 09:44
Go to the top of the page
 
+Quote Post



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

 


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


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