Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 29.04.2008, 15:39   #1
an-sver
Прописка
 
Регистрация: 22.08.2006
Сообщений: 168
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 11 сообщении(ях)
an-sver на пути к лучшему
По умолчанию Вопрос по 16F877A

Господа. Прошу Вашей помощи. Сделал девайс на PIC 16F877А. Программа используетс в общей сложности не более 30% ресурсов процессора. Но при работе данный девайс зависает через различные промежутки времени 10 -30 минут. Подключение ICD2 помогло установить место где стопроится программа- она скачет между 3-мя командами RETURN - RETURN - RETFIE и обратно. Кто сталкивался с подобным подскажите -это указывает на переполнение стека или может какой еще баг возможен?
Реклама:
an-sver вне форума  
Непрочитано 29.04.2008, 15:41   #2
an-sver
Прописка
 
Регистрация: 22.08.2006
Сообщений: 168
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 11 сообщении(ях)
an-sver на пути к лучшему
По умолчанию

Вроде нашел проблему. Обработчик прерывания не сбрасывал GIE и похоже оно забивало стек адресам возврата...
an-sver вне форума  
Непрочитано 29.04.2008, 17:39   #3
an-sver
Прописка
 
Регистрация: 22.08.2006
Сообщений: 168
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 11 сообщении(ях)
an-sver на пути к лучшему
По умолчанию

похоже проблема не ушла....Не до конца ясно что происходит. команда очистить бит GIE есть, она выполняется, но в watch - окне бит не меняется.
мало того, таймер ТМР0 считает после каждого такта и увеличивает значение на разную величину....
сброс битов в INTCON не всегда происходит... Хотя по шагам команда формально выполняется
Может контроллер глюкавый? или ICD2 или MPLAB?
an-sver вне форума  
Непрочитано 29.04.2008, 18:31   #4
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Без исходника тебе никто не поможет.
dosikus вне форума  
Непрочитано 29.04.2008, 18:48   #5
urry1
Временная регистрация
 
Регистрация: 11.12.2007
Сообщений: 79
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
urry1 на пути к лучшему
По умолчанию

A gie чистить зачем ??? При возникновении прерывания он автоматом сбрасывается в 0, затем через retfie возвращается обратно...
контекст сохранили ?
urry1 вне форума  
Непрочитано 29.04.2008, 18:57   #6
berg95
Прохожий
 
Регистрация: 28.06.2006
Сообщений: 9
Сказал спасибо: 36
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
berg95 на пути к лучшему
По умолчанию

Может АН576 поможет

Прикрепленный файл: 7643426.pdf
berg95 вне форума  
Непрочитано 29.04.2008, 21:28   #7
an-sver
Прописка
 
Регистрация: 22.08.2006
Сообщений: 168
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 11 сообщении(ях)
an-sver на пути к лучшему
По умолчанию

Спасибо за ответы. Буду пробовать разбираться. С исходником напрягать не хочется. все- таки более 2-х кило ассеблера, скомпилированного из басика. Вкратце ситуация вырисовалась такая. Программа прерывания вызывает подпрограмму 1, по ее RETURN следом вызывается подпрограмма восстановления контекста (это басик ее откомпилил как подпрограмму, хот можно было и просто восстанавливать)-по ее RETURN идет выход на выход RETFIE . Вот между этими-то метками и мечется курсор MPLAB IDE после зависания), иногда игнорируя промежуточные команды, иногда нет....
Для меня пока кажется странным отображение регистров в MPLAB при работе с ICD2. Вызывают опасение следующие странности: если в пошаговом режиме курсор проходит команду bcf intcon,tmr0 в окне watch этот бит не сбрасывается!!!!, так-же остается стоять бит GIE! хотя формально процессор в мечется в обработке прерывания.
С каждым шагом ТМR0, увеличивается не на 1 а, на 25, 75, 45 (в общем любое случайное число). Если -бы раньше не пользовался ICD2, то наверное подумал, что не так что-то делаю...Поменял версию 7.64 на 8.10, но ничего не поменялось - та-же шняга. Единственное что остается проверить - сам ПИК (его перешивали уже раз 100), но это-же никак не должно влиять...
an-sver вне форума  
Непрочитано 29.04.2008, 22:37   #8
Simbr
Прописка
 
Аватар для Simbr
 
Регистрация: 15.03.2008
Сообщений: 115
Сказал спасибо: 29
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Simbr на пути к лучшему
По умолчанию

Похожую замуту как-то наблюдал. Возможно нет начальной инициализации какого-нибудь регистра SFR. Кстати уровень вложенности подпрограмм не более 8. Не превышаешь? Да, и ты писал что-то про Бейсик, может компилятор некорректно местами работает. 16f877 не такая сложная штука, по моему лет 10.выпускается. Их, конечно, на.асме надо программировать.
Simbr вне форума  
Непрочитано 30.04.2008, 12:54   #9
an-sver
Прописка
 
Регистрация: 22.08.2006
Сообщений: 168
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 11 сообщении(ях)
an-sver на пути к лучшему
По умолчанию

an-sver вне форума  
Непрочитано 30.04.2008, 13:34   #10
an-sver
Прописка
 
Регистрация: 22.08.2006
Сообщений: 168
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 11 сообщении(ях)
an-sver на пути к лучшему
По умолчанию

Похоже нашел бяку в программе. Подпрограмма клавиатуры вызывалась по прерыванию TMR0 и в целях экономии написана на асме. Возврат значения идет через RETLW. Но компилятор требует установки родного
REturn. Формально он не должен был влиять никак (до него подпрограмма просто не доходила)..Но видно она как-то изредка проходила через команду RETLW (хотя выхода из подпрограммы не происходило) и выходила на return - из стека при этом почему-то выпихивало оба значения возврата и программа вылетала совсем не туда..

стек не переполнялся, а наоборот опустошался... и усе - оставались работать только команды RETURN

Получается RETLW не всегда корректно работает что-ли?

в программах табличной конвертации почему-то таких засад не происходит....

В общем заменил RETLW на movlw 0xXX и GOTO exit и вот уже больше часа работает без сбоев....
an-sver вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по си Gladkih Микроконтроллеры, АЦП, память и т.д 4 12.02.2009 22:21
ВОПРОС ПО СИ Gladkih Микроконтроллеры, АЦП, память и т.д 5 04.12.2008 16:30
Модель компараторов 16F877A Alexandergb Микроконтроллеры, АЦП, память и т.д 1 29.08.2008 19:01
16F877A ток потребления по 12в. GREGORI_DEMCHUK Микроконтроллеры, АЦП, память и т.д 3 30.04.2008 10:21
Вопрос по ОУ Slava_shp Автоматика и аппаратура связи 1 02.04.2007 10:47


Часовой пояс GMT +4, время: 03:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot