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

Программа под AVR уходит в RUNTIME

13.05.2015, 11:45. Просмотров 938. Ответов 16
Метки нет (Все метки)

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
#include <avr/io.h>
#include <stdio.h>
#include <avr/delay.h>
unsigned int a,c,x,b,data,adres;
 
//-------------Процедуры-----------------
 
void strob(void)
{
    unsigned int a,b;
    a = PINC;
    b=a;
    PORTC = a^0x10; //побитовая операция  или
    _NOP();
    PORTC =b;
    return ;
}
 
//-----------Основная программа---------------
int main()
{
    int e,kof,kof1,rez,rez2,rez3,data,l;
      
    
        
    
    DDRB=0xFF;      //настроить на vuvod линии RB0-RB7
    _NOP();
    PORTA=0x3F;
    _NOP();
    DDRA=0xFF;      //настроить на vuvod линии RA0-RA7
    DDRC=0xFF;      //настроить на vuvod линии RC0-RC7
    _NOP();
    PORTC=0x07;
    _NOP();
    DDRD=0xF0;      //настроить на вывод линии RD4-DR7 и на ввод линии RD0-RD3 порта D
    PORTA=0x0f;     //подготовка адреса для настройки индикатора
    strob();
    PORTA=0x81;     //подготовка  данных разблокировки
    strob();
//отсюда программа уходит на бесконечный цикл
     e = 230;
        kof = 200;
 
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2015, 11:45
Ответы с готовыми решениями:

CAVR против AVR Studio, что не так в программе под AVR Studio
Проблема такая, есть исходник, если его компилировать в CAVR заливаю в МК все...

TCP/IP стек под AVR
Всем доброго времени суток. Не могли бы вы подсказать пожалуйста, где можно...

Сайты с разными библиотеками под AVR
Посоветуйте сайт, где собраны и структурированы &quot;тонны&quot; всяких...

Define в avr-gcc под linux
Для унификации кода создал макросы #define BUTTONPORT PORTC #define...

AVR Doper - работа под Windows XP
Всем привет. Собрал программатор USBASP (ссылка). Работает отменно из под...

16
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
13.05.2015, 11:48 2
вопроса не понял + пользуйтесь тэгами
1
Kserj
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
13.05.2015, 11:57  [ТС] 3
Программ отлаживается в Atmel Studio 6.2.
Тэгов нет.
0
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,189
Завершенные тесты: 1
13.05.2015, 12:05 4
Цитата Сообщение от Kserj Посмотреть сообщение
Тэгов нет.
куда они делись?
там где пишешь сообщение выделяешь листинг и жмешь кнопочку С++ или какую другую
Цитата Сообщение от Kserj Посмотреть сообщение
Программ отлаживается в Atmel Studio 6.2.
причем здесь это?
основы программирования контроллеров изучал?
Цитата Сообщение от Kserj Посмотреть сообщение
C++
1
2
3
//отсюда программа уходит на бесконечный цикл
     e = 230;
        kof = 200;
где он этот бесконечный цикл?
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
13.05.2015, 12:06 5
Цитата Сообщение от Kserj Посмотреть сообщение
Тэгов нет.
тэги на форуме, для наглядности кода.

В чём ваш вопрос вообще? Это весь код?
на мк программа и должна уходить в бесконечный цикл и крутиться в нём, др дело что я его тут не вижу и упорно не понимаю что вы хотите
1
Kserj
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
13.05.2015, 12:29  [ТС] 6
Это программа настройки портов МК Atmega32 для вывода инфы на ЖКИ
Я хорошо программирую на Ассемблере, Паскале. Решил изучить С++.
При отладке проги должны выполнится операторы

e = 230;
kof = 200;

но до них программа не доходит, уходит в рантайм.
Я же написал в коде !!
Уже крыша едет , исключил все процедуры все равно после оператора
PORTA=0x81;
уходит в рантайм.
0
zss
Модератор
Эксперт С++
7754 / 6994 / 4391
Регистрация: 18.12.2011
Сообщений: 18,498
Завершенные тесты: 1
13.05.2015, 12:33 7
Цитата Сообщение от Kserj Посмотреть сообщение
исключил все процедуры
И strob(); тоже?
0
Kserj
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
13.05.2015, 12:39  [ТС] 8
Да.
0
zss
Модератор
Эксперт С++
7754 / 6994 / 4391
Регистрация: 18.12.2011
Сообщений: 18,498
Завершенные тесты: 1
13.05.2015, 12:46 9
Тогда нет завершения операции
C
1
PORTA=0x81;
Насколько я понимаю, это не просто присваивание, а запись в порт.
По-видимому, от порта должен приходить синхронизирующий ответ,
которого компьютер и ожидает.
1
Kserj
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
13.05.2015, 13:12  [ТС] 10
Процесс отладки выполняется в отладчике Атмел.
Данные в порт не посылаются нет отладочной платы, но это не важно.
Самое главное проверка на правильность исполнения написанного кода.
В Ассеблере с кодом таких глюков не было.
Попробую написать код заново без операторов ветвления. Буду искать в чем причина.
Спасибо за содействие.
Сергей.

Добавлено через 10 минут
Написал код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <avr/io.h>
#include <stdio.h>
#include <avr/cpufunc.h>
 
int main(void)
{ int e,kof;
 
  DDRB=0xFF;         
  _NOP();
  PORTA=0x3F;
  _NOP();
  DDRA=0xFF;         
  DDRC=0xFF;         
  _NOP();
  PORTC=0x07;
  _NOP();
  DDRD=0xF0;         
   e = 230;
    kof = 220;
}
Все равно при попытке присвоить
e = 230;
kof = 220;

уходит в рантайм
Спасибо что поддержали.
С уважением Сергей
0
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
13.05.2015, 13:41 11
а так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main(void)
{ 
int e,kof;
 
  DDRB=0xFF;         
  _NOP();
  PORTA=0x3F;
  _NOP();
  DDRA=0xFF;         
  DDRC=0xFF;         
  _NOP();
  PORTC=0x07;
  _NOP();
  DDRD=0xF0;         
   e = 230;
    kof = 220;
while(1)
{}
return 0;
}
1
Kserj
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
13.05.2015, 15:26  [ТС] 12
Спасибо.
Разобрался похоже:
1.Отладчик проходит это присваивание переменных не останавливаясь на них и не показывает математические действия. Я подставил далее операторы

DDRB=0xFF;
_NOP();

и строка выполнения остановилась на них.
Нюанс конечно неприятный и занял много времени для его вычисления.
Спасибо большое коту за помощь.
И с уважением Сайту и с наилучшими пожеланиями.
Сергей
0
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,189
Завершенные тесты: 1
13.05.2015, 15:41 13
Цитата Сообщение от zss Посмотреть сообщение
Насколько я понимаю, это не просто присваивание, а запись в порт.
По-видимому, от порта должен приходить синхронизирующий ответ,
которого компьютер и ожидает.
да нет, все не так страшно
порт с точки зрения программирования, это просто ячейка памяти, в АВРке размером в байт
Цитата Сообщение от Kserj Посмотреть сообщение
Я хорошо программирую на Ассемблере,
ой, ли
C++
1
2
3
4
5
6
7
8
9
10
 void strob(void)
{
    unsigned int a,b;
    a = PINC;
    b=a;
    PORTC = a^0x10; //побитовая операция  или
    _NOP();
    PORTC =b;
    return ;
}
вот это ассеблершик написал?
куча ненужных переменных
размерность не совпадает
полное непонимание железа
вот так это делают
C++
1
2
3
4
5
6
 void strob(void)
{
    PORTC ^= 0x10; //побитовая операция  или
    _NOP();
    PORTC^ =0x10;
}
или так
C++
1
2
3
4
5
6
 void strob(void)
{
    PORTC.4 =!PORTC.4; 
    _NOP();
    PORTC.4 =!PORTC.4;
}
я бы вообще написал так
C++
1
2
3
4
5
6
 void strob(void)
{
    PORTC.4 =1; 
    _NOP();
    PORTC.4 =0;
}
Цитата Сообщение от Kserj Посмотреть сообщение
Все равно при попытке присвоить
e = 230;
kof = 220;
уходит в рантайм
она у тебя выходит из main, сиречь из программы
ассемблершик бы в конце написал
C++
1
m1: goto m1;
хотя по правильному
Цитата Сообщение от dzrkot Посмотреть сообщение
while(1)
{}
Добавлено через 6 минут
Цитата Сообщение от Kserj Посмотреть сообщение
.Отладчик проходит это присваивание переменных не останавливаясь на них и не показывает математические действия.
какие там математиеские действия???
оптимизатор вот это
Цитата Сообщение от Kserj Посмотреть сообщение
e = 230;
kof = 200;
выбросил как ненужное, скорее всего сообщил об этом при компиляции
0
Kserj
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
13.05.2015, 16:24  [ТС] 14
У меня было так :

C++
1
2
3
4
5
6
7
8
9
10
void strob(void)
{
    unsigned int a,b;
    a = PINC;
    b=a;
    PORTC = a^0x10; //побитовая операция  или
    _NOP();
    PORTC =b;
    return ;
}
Вы написали так:

C++
1
2
3
4
5
6
void strob(void)
{
    PORTC ^= 0x10; //побитовая операция  или
    _NOP();
    PORTC^ =0x10;
}
позволю себе указать вам

1. Я читаю порт С
2. сохраняю его
3. Устанавливаю 4 бит
5. Посылаю в порт С
6. Восстанавливаю старое значение (т.е 4 бит =0)
7. И посылаю его в порт , т.е происходит импульс с 0 на 1 и 0.

что у вас не правильно :
как мы знаем при операции ИЛИ 0^1=1 и 1^1=1
так как у нас бит 4 =0 и мы его установили в 1 , то повторное ИЛИ с битом даст 1, т.е сброс этого бита не произойдёт .
0
zss
Модератор
Эксперт С++
7754 / 6994 / 4391
Регистрация: 18.12.2011
Сообщений: 18,498
Завершенные тесты: 1
13.05.2015, 17:05 15
Лучший ответ Сообщение было отмечено Kserj как решение

Решение

^ - это исключающее или.
0^0 =0
1^1 =0
0^1=1
1^0=1
1
Kserj
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
13.05.2015, 18:10  [ТС] 16
Спасибо.
У меня была неверная информация.
На то вы и эксперт
С уважением.
0
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,189
Завершенные тесты: 1
13.05.2015, 18:17 17
Цитата Сообщение от Kserj Посмотреть сообщение
1. Я читаю порт С
с какого перепугу
порт настроен на выход
PINC это состояние ножек актуально когда порт настроен на вход
Цитата Сообщение от Kserj Посмотреть сообщение
unsigned int a,b;
размер у АВРок 16 бит
PINC размер 8 бит, сиречь char
Цитата Сообщение от Kserj Посмотреть сообщение
как мы знаем при операции ИЛИ 0^1=1 и 1^1=1
оперрация ИЛИ |, насчет ^ расписал Сергей Сергеич

Цитата Сообщение от Kserj Посмотреть сообщение
Устанавливаю 4 бит
что такое побитное обращение знаешь?
Цитата Сообщение от Kserj Посмотреть сообщение
что у вас не правильно :
а равно у производителя в даташитах и библиотеках такое сплошь и рядом
0
13.05.2015, 18:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2015, 18:17

Программирование микроконтроллеров AVR, STM под ОС Linux?
Существует ли IDE для программирования микроконтроллеров под ОС Linux?

Аналог AVR studio под мобильные устройства
Здравствуйте, уважаемые форумчане. У меня вопрос такой: есть ли аналоги AVR...

ищу библиотечку под AVR для Samsung VFD 2002
оч лень самому писать. есть чо готовое? я знаю вы их заказывали )) ...


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

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

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