Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
vasiaFPV
1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
1

Симуляция прерываний в AVR-AtmelSudio. почему не работает

22.12.2016, 16:31. Просмотров 3848. Ответов 8
Метки нет (Все метки)

Подскажите, как в Atmeltudio 7 (6;5;4 AVR Studio4-6) реализуется симуляция прерываний.
У меня в 7-рке флаги прерываний , при симуляции выставляются но на вектор прерывания и затем на метку переход не происходит.
Это так и должно быть, или все таки отладчик на прерывания должен более адекватно реагировать?
Если можно то любой пример (На любом МК , любое прерывание) чтоб адекватно сиvулировался в среде программирования (AVR-Atmel Studio 4-7)/ но лучше конечно в AtmelStudio 7.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2016, 16:31
Ответы с готовыми решениями:

AVR Studio 6 симуляция прерываний
Не могу в студии попасть на вектор прерываний и его обработку. Пробовал на нескольких примерах. В...

Симуляция в AVR Studio
Помогите, пожалуйста, разобраться. При тестировании кода в AVR Studyo 4.19 для ATMiko48 не могу...

Проблема с симуляцией прерываний в AVR Studio 4
Написал очень простой код, прерывание по совпадению канала А таймеров 0,1 и 2 для Atmega644....

AVR Studio, ATmega64a и непонятки с векторами прерываний
всем привет. что-то непонятное у меня происходит при симуляции в Авр Студии 4.19 мк Атмеги64а...

AVR ATtiny13A Assembler нажатие кнопки без прерываний
Доброго времени суток. Изучаю программирование микроконтроллеров по книге Белова Л.В....

8
VlTag
7 / 7 / 2
Регистрация: 30.04.2012
Сообщений: 130
22.12.2016, 19:47 2
Присоединяюсь к Вашему вопросу.
У меня тоже в AVRStudio4 и в AVRStudio6 не получается проверить в симуляторе код, где используются прерывания по переполнению от таймера T/C0 (микроконтроллер ATmega16). Характерно, что простой код в котором временные задержки организованы без использования прерываний, в симуляторе отображается правильно.
Как я поступил для проверки кода с прерываниями: написал программу в которой ВСЁ было как в технической документации, выполнил компиляцию и получил файл в формате *.hex. Далее взял макетную плату и с помощью программатора (где есть ISP) записал программу в микроконтроллер. Микроконтроллер заработал так, как я и хотел при написании исходного кода.
Итак, надо разобраться как в симуляторе среды AVRStudio проверять код с прерываниями. Ждём ответов от активных посетителей форума!
0
Voland_
1669 / 1057 / 100
Регистрация: 04.01.2010
Сообщений: 3,579
22.12.2016, 21:35 3
Лучший ответ Сообщение было отмечено vasiaFPV как решение

Решение

...посмотрел в Сети - в студии есть какие-то настройки для симуляции прерываний:
в одном месте пишут путь:
"Debug -> Options and Settings -> Tools -> Tool Settings -> Mask Interrupts while stepping -> False"
в другом:
Debug -> Options and Settings -> Debugger -> Mask interrupts while stepping

Поищите в своей менюшке. Скорее всего у вас такой пункт тоже имеется.
5
vasiaFPV
1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
23.12.2016, 06:00  [ТС] 4
Да!!!! Большущее спасибо!!! В Atmel Studio 7 :
"Debug -> Options and Settings -> Tools -> Tool Settings -> Mask Interrupts while stepping -> False"
Меняем Treu на False и прерывания симулируются!
0
23.12.2016, 06:00
Евгений В
887 / 649 / 131
Регистрация: 01.03.2010
Сообщений: 1,236
09.01.2017, 22:59 5
Цитата Сообщение от Voland_ Посмотреть сообщение
Debug -> Options and Settings -> Debugger -> Mask interrupts while stepping
Поищите в своей менюшке. Скорее всего у вас такой пункт тоже имеется.
А, в последствии, нужно будет вернуть обратно True ? Для чего эта маска?

Добавлено через 6 минут
Цитата Сообщение от vasiaFPV Посмотреть сообщение
Меняем Treu на False и прерывания симулируются!
У меня тоже симулируются, но не всегда. В векторе прерывания по переполнению таймера я поставил счетчик i++.
При шаговом прохождении программы не всегда есть переход в этот вектор прерывания, хотя счетчик i увеличивается как положено. Т.е. программа работает, но заход в вектор вижу не всегда. Почему?
0
vasiaFPV
1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
10.01.2017, 13:00  [ТС] 6
Цитата Сообщение от Евгений В Посмотреть сообщение
У меня тоже симулируются, но не всегда. В векторе прерывания по переполнению таймера я поставил счетчик i++.
При шаговом прохождении программы не всегда есть переход в этот вектор прерывания, хотя счетчик i увеличивается как положено. Т.е. программа работает, но заход в вектор вижу не всегда. Почему?
Значит счетчик у вас стоит не в обработчике прерывания, и считает что то другое.
Ну и поконкретней постановку вопроса : флаги прерываний выставляются или нет, на каком камне , ну и кусок кода в котором происходит вызов прерывание.
0
Евгений В
887 / 649 / 131
Регистрация: 01.03.2010
Сообщений: 1,236
10.01.2017, 13:27 7
Пишу для Atmega16 в Atmel Studio.

Экспериментирую с кодом, т.к. занялся МК недавно.
Вот код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
 * Atmega16.c
 *
 * Created: 05.01.2017 11:35:14
 * Author : Евгений
 */ 
 
//#define F_CPU 8000000UL 
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
 
volatile unsigned char i;
 
ISR (TIMER0_OVF_vect)
{   
    i++;
}
 
int main(void)
{
  i=0;
 
       TCCR0 =0;
       TIMSK|=1<<TOIE0;
       TCNT0=100;
       TIFR |= (1<<TOV0);
       TCCR0 |= (0<<CS02)|(0<<CS01)|(1<<CS00);
      
       DDRC=  0b00000001;
       PORTC= 0b00000001;
       
       sei();
    /* Replace with your application code */
    while (1) 
    {
       if (10 ==i) 
       {
               i=0;
           
           if (0== ( PORTC & (1<<0)) )
              PORTC= 0b00000001;
              else
              PORTC= 0b00000000;
       }           
    }
}
0
зубило
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 1
11.07.2019, 15:52 8
Voland спасибо очень помогли.
0
tatarva87
117 / 36 / 11
Регистрация: 23.03.2018
Сообщений: 144
14.07.2019, 21:22 9
Цитата Сообщение от vasiaFPV Посмотреть сообщение
отладчик на прерывания должен более адекватно реагировать?
Если можно то любой пример (На любом МК , любое прерывание) чтоб адекватно сиvулировался в среде программирования
Я при программировании для проверки прерываний - в том числе частоту их вызова применяю программу протеус.
Выбираю какой нибудь свободный порт, например PORTB.7, настраиваю его на выход
C++
1
DDRB|=0b10000000;
Создаю проверочную функцию:
C++
1
2
3
4
5
6
7
8
9
10
void proverka (void)
{
if (!(PINB&0b00000010))
{
    PORTB|=0b10000000;                  
}
else
{
    PORTB&=~0b10000000;
}
Подключившись виртуальным осциллографом к 7 ножке порта В в протеусе, и вызвав данную функцию внутри прерываний сразу можно анализировать в какие моменты программа заходит внутрь того или иного прерывания, или вообще - вызывается прерывание или нет. Это можно применить и к другим точкам программы, дохождение до которых вы ставите под сомнение.
0
14.07.2019, 21:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2019, 21:22

Не работает симуляция Windows 10
Вот уже несколько месяцев пытаюсь увидеть Hellow World на андроиде, но с ним вечно что то...

Не работает Gate Level симуляция в ModelSim Altera Edition
Не работает временная симуляция проекта в Quartus 15.0 в ModelSim Altera Edition и в обычном...

Какие функции прерываний используются в обработчике прерываний от клавиатуры?
Под функциями же имеется ввиду int ..h?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru