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

 
 
> Прерывания в CodeVisionAVR: как?
Александр К.
сообщение Oct 1 2009, 15:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Прошу помочь найти косяк в программе. В железе не работает , AVRStudio подвисает при попытке выйти из прерывания. Причём, аналогичное происходит и при использовании прерывания от таймера.

Код
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned char adc_data;
// Read the 8 most significant bits
// of the AD conversion result

// Place your code here
  adc_data=ADCH;
  adc_data=(adc_data>>1); // j не больше 127
  if(adc_data==1) adc_data=0;// j==1 исключается - особенность функции poworot
  if(i_adc_buf==2) i_adc_buf=0;
  else ++i_adc_buf;
  j=(adc_buf[0]+adc_buf[1]+adc_buf[2]+adc_data)/4; //рекурсия
  adc_buf[i_adc_buf]=j;

}


Куска хватит или нужно всё?
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Oct 1 2009, 16:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Замените
Код
if(i_adc_buf==2) i_adc_buf=0;
  else ++i_adc_buf;

на
Код
if(i_adc_buf>=2) i_adc_buf=0;
  else ++i_adc_buf;

ИМХО у вас типичная ошибка возникает - выход указателя за границы массива.
Go to the top of the page
 
+Quote Post
Александр К.
сообщение Oct 1 2009, 16:32
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Спасибо. Заменил - симулятору не полегчало. Всё по прежнему.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Александр К.   Прерывания в CodeVisionAVR: как?   Oct 1 2009, 15:30
- - rezident   Делать фильтрацию внутри прерывания это моветон. К...   Oct 1 2009, 16:42
|- - Александр К.   Цитата(rezident @ Oct 1 2009, 20:42) ...А...   Oct 1 2009, 16:54
- - rezident   Это не ко мне. У меня и AVRStudio-то нету   Oct 1 2009, 16:58
- - SysRq   Покажите остальной код, и МК укажите какой у вас. ...   Oct 1 2009, 17:11
|- - Александр К.   Как на этом движке дать вложение? Или дать програм...   Oct 1 2009, 17:21
|- - SysRq   Цитата(Александр К. @ Oct 1 2009, 21:21) ...   Oct 1 2009, 17:26
|- - Александр К.   CODE/*********************************************...   Oct 1 2009, 17:35
- - SysRq   Ну вот: Код#pragma savereg- // Выключить автоматич...   Oct 1 2009, 17:40
|- - Александр К.   Цитата(SysRq @ Oct 1 2009, 21:40) Потому ...   Oct 1 2009, 17:50
|- - rezident   Цитата(Александр К. @ Oct 1 2009, 23:50) ...   Oct 1 2009, 18:20
|- - Александр К.   В регистрах. Но их (регистров) больше, чем перемен...   Oct 1 2009, 18:33
|- - rezident   Цитата(Александр К. @ Oct 2 2009, 00:33) ...   Oct 1 2009, 18:45
|- - Александр К.   Убрал лишнее из прерывания. И при #pragma savereg-...   Oct 1 2009, 19:01
- - SysRq   Регистры общего назначения и SREG. Они используютс...   Oct 1 2009, 18:08


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

 


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


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