Adept (02.09.2015 15:51 - 16:10, просмотров: 221) ответил PlainUser на Таки нечистое значит.Чудес не бывает , бывают паразитные емкостные связи.Реже (зато неприятнее) индуктивные.Кроме питания влиянию помех сильно подвержены цепи сброса и кварца.
Есть подозрение, что иголки пролезают по IO линиям через ёмкостные связи по плате (плата четырёхслойка, один из внутренних - сплошная "земля"). Сдуру не поставил ограничительные резисторы на IO, а надо было тотально на все линии связи влепить 33-100 Ом у самого проца :(
Ёмкостями , где надо зашунтировано (и керамика и танталы и электролиты), в достаточно большом количестве. Но вот IO линии бывает тянутся через всю плату, самая длинная - около 20см.
Кварц также у самого проца (5мм) надо было пока глюки наблюдались попробовать завестиcь от внутреннего RC Однако непонятно осталось состояние процессора, когда у него отказывался работать таймер, а потом всё "починилось" :(
По программным косякам - исклюено, - там нечему глючить. простейший таск-менеджер в майн-цикле (очередь задач). пока пустая, системный таймер на прерываниях, на другом же таймере (тот, который глючил) драйвер сегментного LED-дисплея, и клавиатуры, ну и хэндлеры UART. По структуре - программы всё крутится себе потихонечку в главном цикле, просматривается буфер команд, заполняемый хэндлером UARTa или любой другой процедурой, например обработчиком юзер-меню, при наличии там команды оная забирается передаётся интерпретатору команд, которые делает все нужные действия. В фоне работает таймер драйвера дисплея (10-разрядный 17-сегментный) с рефрешрейтом порядка килогерца. В фоне же по таймеру 10mS молотит драйвер клавиатуры с подавлением дребезга. Пока всё вокруг спокойно, по сути, крутится главный цикл в режиме ожидания. Как только какое действие - начинаются ветвления. Главное, что эта структура уже просто отполирована до блеска и испытана не на одном проекте, и глюки проявлялись уже со старта программы (потом, как я говорил, всё "починилось") Пока экспериментировал, чтобы исключить маловероятное программные косяки вообще ставил вместо всех хэндлеров заглушки, и обходил таскменеджер. Фактически оставлял только пустой майн-цикл с одном "нопом", системный таймер, и злополучный таймер D0 сдрайвером дисплея.
Природу чудес никак не пойму. Что это было и почему починилось - загадка :((
Да, методика починки была странная:
1) ничего не работает.
2) поставил в майн цикл принудительный вызов хэндлера таймера D0 (call IntDISPLAYdriver)
3) прошил - всё заработало
4) убрал явный "call" из майн цикла, т.е. вернул всё в состояние 1)
5) прошил. - Работает!
%( ???
...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)