Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 07.08.2017, 12:43   #1
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 94
Вес репутации: 100/37
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Чего не так-то? PIC16F1847

Всем доброго здравия.

Сделал я тут простецкую железяку типа генератора. Запрограммировал три ШИМа, значения для периода передаются с другого устройства по последовательному интерфейсу. Все работало замечательно...
Дальше программа стала обрастать доп возможностями, короче проект стал подходить к своему логическому завершению. И тут БАЦ, в какой-то момент все перестает работать. Я, не долго думая, возвращаюсь к работоспособной версии и начинаю добавлять в текст по 1-2 команде, постоянно проверяя работоспособность устройства и пытаясь найти касяк. Как и предполагал, добавив очередную команду контроллер уходит в небытие. Я обратно, опять работает, я ему вставляю NOP ради прикола - программа перестает работать. В голове крутятся не добрые мысли, лезу в файл листинга и мои предположения подтвердились - раньше у меня программа умещалась в 256 байтный блок и все работало, при добавлении очередной команды программа переваливает за этот рубеж и привет...
У меня кусок программы где я считываю данные по последовательному интерфейсу очень большой, я его оформил в отдельную процедуру и убрал в конец программы. Вот RETURN этой процедуры и попадает в адрес h100 ну или выше, результат - не работающая программа.

Что это может быть? Ведь в пределах 2к страницы таких проблем возникать не должно.
Lexus вне форума   Ответить с цитированием
Старый 07.08.2017, 13:26   #2
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 382
Вес репутации: 612/37
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: Чего не так-то? PIC16F1847

пишешь, как понимаю на ассемблере?
резать прогу на куски и использовать длинный переход.

Код:
; длинный переход
		movlw	high main_loop
		movwf	PCLATH
		goto	main_loop
у меня только так заработало.
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 07.08.2017, 15:11   #3
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 94
Вес репутации: 100/37
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Re: Чего не так-то? PIC16F1847

Спасибо, чуть позже попробую.
Lexus вне форума   Ответить с цитированием
Старый 07.08.2017, 19:36   #4
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 45
Сообщений: 656
Вес репутации: 1416/36
Guaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud of
По умолчанию Re: Чего не так-то? PIC16F1847

Цитата:
Сообщение от Lexus Посмотреть сообщение
...Ведь в пределах 2к страницы таких проблем возникать не должно.
Согласен, не должно. Странная ситуация, хотя и я сам как-то сталкивался с подобным бредом, вот только уже не припомню, какая конкретно была причина. Пробуйте смотреть в симуляторе, там всё видно будет. Это раз. И второе - есть ли обработчик прерываний в программе? И есть ли вычисляемые переходы?
Guaho вне форума   Ответить с цитированием
Старый 08.08.2017, 12:14   #5
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 725
Вес репутации: 1200/47
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: Чего не так-то? PIC16F1847

Цитата:
Сообщение от Lexus Посмотреть сообщение
Вот RETURN этой процедуры и попадает в адрес h100 ну или выше, результат - не работающая программа.
return не может попадать на другой адрес по определению, он адрес возврата берет из стека , а вот команды условного и безусловного перехода вполне себе могут записывать в стек неправильный адрес , если не учитывается регистр PCLATH, ну или кто-то не посчитал количество вложенных переходов и переполнил стек.
DmitrijVDN вне форума   Ответить с цитированием
Старый 08.08.2017, 17:43   #6
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 94
Вес репутации: 100/37
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Re: Чего не так-то? PIC16F1847

Ну вот, блин, совсем зарылся.

Целый день ковырялся по всякому.

У меня ж ICD3, вспомнил, что могу его как дебагер использовать.
Подключил, попробовал так сяк.

Итог: если я запускаю через дебагер, то все работает. Без дебагера не работает.

Все... мысли кончились. Мож кому чего в голову придет, делитесь, буду пробовать.

Заранее спасибо.
Lexus вне форума   Ответить с цитированием
Старый 08.08.2017, 18:06   #7
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,437
Вес репутации: 2927/63
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Чего не так-то? PIC16F1847

Lexus
если я запускаю через дебагер, то все работает - Вы на чем пишете?
Вполне может быть что Ваши проблемы совсем не там, где Вы думаете.

У Вас обработчик немаскируемых прерываний делает проверку на то, где, как и почему был ресет? Если не делает, добавьте ему такое.
besogon вне форума   Ответить с цитированием
Старый 08.08.2017, 19:48   #8
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 55
Сообщений: 2,720
Вес репутации: 3742/99
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: Чего не так-то? PIC16F1847

А в PIC16F1847 разве есть "немаскируемые прерывания"???
__________________
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA вне форума   Ответить с цитированием
Старый 08.08.2017, 21:00   #9
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,437
Вес репутации: 2927/63
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Чего не так-то? PIC16F1847

HHIMERA
увы, уже не помню подробностей.
в PCON можно выяснить причину попадания на старт.
иначе говоря отследить проблемы сторожевого таймера, стека возвратов и.т.д. в случае переполненного/истощенного стека возвратов, скорее прочего нельзя восстановить состояние системы.

насколько я помню, я не делал полностью восстанавливающих состояние реализаций вот этого вот всего.
скорее просто в начале работы проверял, что все в порядке, а если старт произошел по ненормальным причинам, то делал отладочные действия, для установления того, что конкретно произошло.

Последний раз редактировалось besogon; 08.08.2017 в 21:05.
besogon вне форума   Ответить с цитированием
Старый 09.08.2017, 00:34   #10
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 45
Сообщений: 656
Вес репутации: 1416/36
Guaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud of
По умолчанию Re: Чего не так-то? PIC16F1847

На чём пишете - вот в чём вопрос... Если на Асме, симулятор в помощь.
Guaho вне форума   Ответить с цитированием
Старый 11.08.2017, 11:47   #11
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 94
Вес репутации: 100/37
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Re: Чего не так-то? PIC16F1847

Доброго времени суток.

Извините, что не отвечал, был в творческом кризисе, решил отвлечься, занимался другими делами.
Вчера засел опять, опять пробовал по разному, в итоге я так и не понял, что я сделал, но все заработало. Старой программы не осталось, сверить не могу. Но на первый взгляд, ничего в программе не изменилось.
Я когда ICD3 использовал в режиме дебагера и запускал с него программу, все работало, а когда отключал дебагер и включал устройство не работало. Я так понимаю, что она и не должна была заработать, потому что контроллер думал, что подключен к дебагеру (бит DEBUG в бите конфигурации) и скорее всего просто не запускался. Надо было хоть светодиод какой на свободную ножку повесить. Ну да ладно...
Так вот, когда я ICDку перевел в режим программатора и прошил контроллер, все замечательно заработало.
Как я уже говорил, старой программы не осталось, свериться не получится. Короче, загадка...
Но могу сказать, что никаких манипуляций с PCLATH, в итоге, я не делаю, даже проверку флага TMR0IF в прерывании убрал (использую TMR0). Процедура считывания данных, про которую я писал, так же оставил в конце программы.

Ну, всем спасибо, позвольте откланяться. Тему можно считать закрытой.
Lexus вне форума   Ответить с цитированием
Старый 11.08.2017, 12:11   #12
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: M.O.
Возраст: 58
Сообщений: 2,092
Вес репутации: 2636/84
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Чего не так-то? PIC16F1847

Цитата:
Сообщение от Lexus Посмотреть сообщение
контроллер думал, что подключен к дебагеру (бит DEBUG в бите конфигурации) и скорее всего просто не запускался.
Никогда не трогайте DEBUG в конфиге. При подключении дебаггера этот бит АВТОМАТИЧЕСКИ будет переведен средой (IDE) в состояние отладки. И так же автоматически выключен при выходе из дебага.
Марк вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парогенератор dimitriy Вопросы начинающих 89 19.06.2014 19:32
Не идет зарядка ноута, а напряжение в порядке :( dr_Sash Источники питания и силовая электроника 13 12.10.2009 21:18
Нужна прошивка на PIC16F877 для бегущей строки!!! VanoMC Продукция MICROCHIP 12 13.04.2007 11:06


Часовой пояс GMT +3, время: 10:27.


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