[an error occurred while processing this directive] [an error occurred while processing this directive]
Тыкать пальцем в небо очень просто, но, к сожалению, совершенно бессмыслено...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено з.а.С 01 июня 2002 г. 10:02
В ответ на: прерывания у PIC 16F877 отправлено AlCost 01 июня 2002 г. 05:19

... без изходного текста, особенно когда речь идет о програмной ошибке. Поэтому, только несколько рекомендаций:

// # Part 1:
Внимательно просмотреть процедуры сохранения/восстановления контекста в процедуре ISR.
// # Part 2:
Обратить особое внимание на то, по какому признаку обрабатываются каждое конкретное прерывание. По условию
if (ZZZ-interrupt flag set ONLY); // bad metode
или
if (ZZZ-interrupt enable flag set && ZZZ-interrupt flag set); // good metode
// # Part 3:
Уж и не знаю, в первую или в последнюю очередь, внимательно просмотреть последовательность сброса/установки флагов GIE, ADIF, ADIE ну и т.п. имея ввиду тот факт, что манипуляции с этими флагами не должны приводить к 'неоднозначностям'. Имеется в виду установка флага GIE в процедуре ISR (это не криминал, но программист должен быть уверен, что ни чего другого в этот момент не должно произойти), запись/чтение регистров CCP и TMR1.
Ну и особе внимание - переключению банков всех этих регистров. Это ж - "The PIC!", ёлы палы ...

Успехов ...
__САмай_Злостный_Анонимус_Сергей

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru