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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Зависание ATMega328P
Ioann_II
сообщение Mar 12 2017, 03:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 7-06-05
Пользователь №: 5 797



Здравствуйте, Уважаемые коллеги.

Столкнулся со странным зависанием упомянутой микросхемы.
Основной цикл перестаёт выполняться, но вот прерывание продолжает работать.
Не программное, т.к. каждый раз останаливается в разном месте.
Конденсаторы по питанию, на кварце стоят.

Кто сталкивался?

Спасибо.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 12 2017, 13:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 394
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Ну, почему же "не программное"?
Как вариант: Разрешается прерывание на каком-либо устройстве, а процедуры обработки этого прерывания не существует - забыли написать...
Go to the top of the page
 
+Quote Post
Ioann_II
сообщение Mar 12 2017, 14:23
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 7-06-05
Пользователь №: 5 797



Обработчики прерываний на месте и в порядке.
Останавливается именно обработка главного цикла. При чём в разных местах.
Завтра буду осциллографом питание смотреть на предмет иголок....

Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Mar 13 2017, 06:33
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Код покажите.
Если прерывание постоянно куда-то уводит PC, со стеком может быть непорядок.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 14 2017, 00:38
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 933
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Ioann_II @ Mar 12 2017, 17:23) *
Останавливается именно обработка главного цикла. При чём в разных местах.

"Останавливается" - Это просто пи-дец!!!
До тех пор пока Вы будете предполагать что процессор может как-то "ЗАВИСНУТЬ" вы никогда не найдёте ошибку в Вашем коде.
Попробуйте исходить из того что "зависнуть" процессор просто не может НИ-КО-ГДА .
Примите это как аксиому и ищите косяки в своём коде.
А если пишете на СИ - будьте готовы к тому, что придётся искать не только свои но и чужие КОСЯКИ! biggrin.gif
Go to the top of the page
 
+Quote Post
aiwa
сообщение Mar 14 2017, 03:08
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(zombi @ Mar 14 2017, 02:38) *
А если пишете на СИ - будьте готовы к тому, что придётся искать не только свои но и чужие КОСЯКИ! biggrin.gif

Чем же так СИ провинился?
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 14 2017, 05:07
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 235
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(aiwa @ Mar 14 2017, 06:08) *
Чем же так СИ провинился?

Видимо, в сравнении с ASM, где каждая строчка самовыстраданная)
Go to the top of the page
 
+Quote Post
aiwa
сообщение Mar 14 2017, 08:59
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(adnega @ Mar 14 2017, 07:07) *
Видимо, в сравнении с ASM, где каждая строчка самовыстраданная)

Ну для AVR можно и на СИ каждую строку самовыстрадать.
Да и вполне разумно: код небольшой, в дальнейшем дешевле выйдет.
Go to the top of the page
 
+Quote Post
Ioann_II
сообщение Mar 14 2017, 11:52
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 7-06-05
Пользователь №: 5 797



Вот сейчас вывел на LCD содержимое SP. Жду. Пока что светится 2301=0x8fd. При старте программы SP=0x8ff. Вход в main по CALL, так что пока что вроде норм... По наблюдениям отпишусь.
Go to the top of the page
 
+Quote Post
Ioann_II
сообщение Mar 14 2017, 23:44
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 7-06-05
Пользователь №: 5 797



Спустя 6 часов работы зависло. SP=2301.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Mar 15 2017, 00:11
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 483
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Код в студию, весь.
Go to the top of the page
 
+Quote Post
Ioann_II
сообщение Mar 15 2017, 23:39
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 7-06-05
Пользователь №: 5 797



Снова, спустя 11 часов...
Прерывание на приём символа от UART работает - в обработчик вставил код для подсвечивания светодиода на время обработки прерывания.
Средняя загрузка ЦП обработчиком 0,22%, пиковая - 14%.
Передача не происходит в режиме ожидания.
От таймера прерывание тоже происходит (оно генерирует смещение на LCD, без него LCD потухнет).

zombi, насчёт "чужих косяков" - согласен. Уже были "чудеса"
в этой программе, пока не избавился от применения библиотечной ф-ции sprintf.
Пока она применялась в одном только месте - всё работало... как ещё в одно поставил - начались "чудеса".
Избавился от sprintf - и "чудеса" пропали...

сейчас склоняюсь к полному переписыванию библиотечных функций....

Genadi Zawidowski, Код выкладывать смысла нет - слишком большой. Atmega занята на 72%. Всё равно столько смотреть не станете...

Ещё вот с WatchDog проблема... может подскажете...вот тема:
https://electronix.ru/forum/index.php?showtopic=140918


Сообщение отредактировал Ioann_II - Mar 15 2017, 23:41
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Mar 16 2017, 06:32
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1 483
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



По содержанию сообщений было не понятно, что речь о боевом проекте - я, например, думал что есть тестовый проект в котором оставлен минимум для воспроизведения бага.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 16 2017, 06:58
Сообщение #14


Гуру
******

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



QUOTE (Ioann_II @ Mar 16 2017, 01:39) *
Пока она применялась в одном только месте - всё работало... как ещё в одно поставил - начались "чудеса".
Избавился от sprintf - и "чудеса" пропали...
"Еще одно место" - прерывание? Какой компилятор используете? Это я к тому, что IAR использует два стека (один для возвратов и второй для данных), gcc использует один. sprintf() очень охочая до стека функция. Если используете gcc, то стек вам увеличивать уже некуда, возможно стоит пересмотреть алгоритм чтобы уменьшить занимаемую глобальными переменными память или хотя бы посмотреть, не затирается ли память сразу после глобальных переменных - это будет говорить о налезании стека на данные и разрушении содержимого стека. Если используете ИАР - можно попробовать увеличить один из стеков за счет другого.


--------------------
На любой вопрос даю любой ответ
"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
aiwa
сообщение Mar 16 2017, 10:10
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(Ioann_II @ Mar 15 2017, 01:44) *
Спустя 6 часов работы зависло. SP=2301.

Это совершенно бесполезная информация. Зависание произошло после вывода на LCD, и если оно стало результатом порчи стека Вы этого не увидите.
Для проверки целостности лучше заливать стек паттерном и проверять его содержимое.
Как залить - тема тут была ранее.
Если используете WatchDog, посмотрите как часто Вы его передергиваете. Я бы порекомендовал его временно вообще отключить.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th May 2017 - 01:20
Рейтинг@Mail.ru


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