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

 
 
> Зависание программы в alt_tick()
Unfog
сообщение Aug 12 2015, 06:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 20-05-12
Из: Санкт-Петербург
Пользователь №: 71 932



Приветствую всех!
Подскажите, пожалуйста, в чем может быть беда..

Собрана система NIOS:
Прикрепленное изображение


При запуске программы в режиме отладке при пошаговом выполнении выполняется только alt_sys_init();, после чего курсор пропадает, при нажатии на паузу появляется в alt_tick(), в которой при пошаговом выполнении из нее не выходит.

Вылетает на второй строчке main:
Код
int main()
{
    alt_sys_init();
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_OUT_BASE, 0);
    Delay(0xFFFF);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_OUT_BASE, 1);
...
...


Что я делаю не так / куда копать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
serjj
сообщение Aug 14 2015, 06:07
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Что за функция
Код
Delay(0xFFFF);
?
Смотрите, что делается в функции alt_tick(). Есть подозрение, что у вас таймер не до конца настроен.
Go to the top of the page
 
+Quote Post
Unfog
сообщение Aug 14 2015, 06:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 20-05-12
Из: Санкт-Петербург
Пользователь №: 71 932



Код
void Delay(int _d)
{
    volatile int i = 0;
    for(i =0; i < _d; i++);
}


Но он до нее не доходит.

В alt_tick ходит внутри цикла:
Код
/* process the registered callbacks */

  while (alarm != (alt_alarm*) &alt_alarm_list)
  {
    next = (alt_alarm*) alarm->llist.next;

    /*
     * Upon the tick-counter rolling over it is safe to clear the
     * roll-over flag; once the flag is cleared this (or subsequnt)
     * tick events are enabled to generate an alarm event.
     */
    if ((alarm->rollover) && (_alt_nticks == 0))
    {
      alarm->rollover = 0;
    }
    
    /* if the alarm period has expired, make the callback */    
    if ((alarm->time <= _alt_nticks) && (alarm->rollover == 0))
    {
      next_callback = alarm->callback (alarm->context);

      /* deactivate the alarm if the return value is zero */

      if (next_callback == 0)
      {
        alt_alarm_stop (alarm);
      }
      else
      {
        alarm->time += next_callback;
        
        /*
         * If the desired alarm time causes a roll-over, set the rollover
         * flag. This will prevent the subsequent tick event from causing
         * an alarm too early.
         */
        if(alarm->time < _alt_nticks)
        {
          alarm->rollover = 1;
        }
      }
    }
    alarm = next;
  }


При этом next все на один адрес указывает.

Никогда раньше такой проблемы не был до этого...
А как нужно настраивать таймер?
Go to the top of the page
 
+Quote Post

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

 


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


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