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

 
 
 
Reply to this topicStart new topic
> не работает банально простой фрагмент, 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
Сергей Борщ
сообщение Jun 7 2017, 09:56
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



А прерывание системного таймера вызывается?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jun 7 2017, 10:04
Сообщение #3


Местный
***

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



Цитата(Сергей Борщ @ Jun 7 2017, 14:56) *
А прерывание системного таймера вызывается?

похоже я его запретил, когда разрешал прерывание от IC. посыпаю голову пеплом (надо было TIMSK |= (1 << TICIE1)wink.gif

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

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 14:55
Рейтинг@Mail.ru


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