Цитата(zltigo @ Dec 29 2005, 19:16)

Набрел на новый эффект. 100% повторяемость в моих :-((( условиях.
1. Стоит брекпойнт на UART. Но терминальная программа НЕ запущена.
......
Отменяется! Проблемы НЕТ - просто в попыхах оставил возможность сброса контроллера
от DTR :-( ну а дальше все свелось к неприятному поведению при аппаратном сбросе.....
Цитата(Velund @ Dec 28 2005, 12:50)

Цитата(zltigo @ Dec 27 2005, 23:25)

Укрепили в желании попробовать на чем-нибудь стареньком.
Потратил несколько часов, порылся в хламовнике, нашел материнку SuperMicro P6SBA, проц под нее P3-450, памяти 256 мегов, какое то видео... Собрал машинку, воткнул 2000-е винды, 4.30А со всеми апдейтами... Ситуация один в один.
Тем не менее.. Утром первого дня нового года решил начать новую жизнь и тоже повторить:
- Машина P3-733, WIN2000(со всеми заплатками), 512 RAM. Просто рабочая машинка достаточно
забитая всяким мусором за годы эксплуатации, но ничего от IAR ранее не стояло.
В домашних условиях запасе осталось еще два неопробованных компьютера с Windows :-).
- Добавлен USB 2.0 контроллер от VIA (дабы не заниматься исследованиями USB 1.x);
- Установлен EWARM 3.20A с генерацией лицензии;
- Установлен upgrade ewarm-430a-P051128.zip (без J-link DLL) c иаровского сайта;
- Установлен upgrade jlinkarmdll_v274c.zip c иаровского сайта;
- Установлены остальные (к делу отношения полагаю не имеющие ) upgrade:
iccarm-430a-P050906.zip
Xlink459T.zip
- Ничего от Segger пока _специально_ не ставилось.
Проект (чисто IARовский IDE ) просто взят с ноутбука (Centrino 1.8GHz), на котором ранее в основном все эксперименты и проводились.
- Опция "With runtime control modules" (перехват вывода на терминал и прочее) - ОТКЛЮЧЕНА.
- Опция "Run to main()" - ВКЛЮЧЕНА!
Результаты:
1. Компилится медленнее :-).
2. Добитьсяо сновного неприятного эффекта - потери прерываний на данный момент не удалось.
Все источники прерываний (Timer, UART, SPI, ADC, I2C, и внешние от двух кнопочек) отрабатывают нормально.
4. Ближайшие пару дней буду спокойно работать на данной системе в данной конфигурации.
Теперь ищем и находим грабли (я намеренно описываю последовательность ВСЕХ действий.
минимизация осуществлена позже):
- ВКЛЮЧАЕМ Опцию "With runtime control modules"
- при установленном брейкпойнте на 'main()' и где-нибудь на прерывании (например UART)
получаем вопль по поводу "Run to main()", жалобу на недостаток брейкпойнтов и предложение
либо долго пошагово топать, либо отменить "first instruction" (я понимаю это, как наплевать
на брейпойнт на main())
Рассмотрим оба варианта:
1. Пошли пошагово - виден обмен с MT-Link (мигает зеленый светодиодик) и спустя пару минут,
как и обещано, выходим на main(). При попытке продолжить Debug->Go, продолжаем, но
прерываний уже нет ни одного. Эффект абсолютно стабильный.
2. Выбираем "Stop" - предсказуемо выходим на 0 адрес. При попытке продолжить Debug->Go, продолжаем, но прерываний, как и в предыдущем случае, уже нет ни одного. Эффект абсолютно стабильный.
Продолжаем эксперимент:
- ВЫКЛЮЧАЕМ Опции "With runtime control modules" и "Run to main()" - получаем обратно два брейпойнта.
- Ставим оба - один на main(), второй на прерывание UART. Далее опять 'Debug-Go' ...
и.... все :-( прерывания отсутствуют, на брейкпойнт естественно на выходим, система привычно
циклится в IDDLE Task. Эффект абсолютно стабильный.
Совсем все упрощаем:
- НЕ ставим НИ ОДНОГО бейкпойнта. Предсказуемо выходим на 0 адрес. Далее 'Debug-Go' ...
и.... все...... Стабильная безвариантная, 100% повторяемая у меня ситуация :-( отсутствия прерываний.
Идем дальше:
- возвращаем "Run to main()" - все равно НЕ работает! При всех предыдущих манипуляцих
производилась перезагрузка IDE, тем не менее пререзагружаем IDE еще раз - не работают
прерывания. Выходим из IDE, передергиваем питание MT-Link, загружаемся..
РАБОТАЕТ! Ранее, при всех экспериментах, питание MT-Link не передергивалось,
ибо повода не было (Flash грузил без проблем).
Начинаем все с начала:
- отключаем "Run to main()" - прерывания пропали...
- перезагружаем IDE - прерываний нет
- выгружаем IDE, передргиваем питание MT-Link (при отключении питания MT-Link отлаживаемый
девайс перезапустился и заработал), загружаемся - НЕТ прерываний...
- включаем "Run to main()" - прерываний НЕТ;
- перезагружаем IDE - прерываний НЕТ;
- перезагружаем IDE с передергиваем питания MT-Link - ЗАРАБОТАЛИ!
Последний шанс - попробовать поиграться опциями J-Link 'Hardware Reset', 'Reset Asserts..', 'JTAG Speed', которые при предыдущих попытках ситуации не изменили, но следует попробовать еще раз
в случае более локализованом.
JTAG Speed = Auto, Inital - 10KHz
Hardware Reset = disabled
Reset Asserts = disabled
Неизменно плохой результат.
JTAG Speed = 400KHz
Hardware Reset = disabled
Reset Asserts = disabled
Неизменно плохой результат.
JTAG Speed = 1000KHz
Hardware Reset = disabled
Reset Asserts = disabled
Неизменно плохой результат.
JTAG Speed = 1000KHz
Hardware Reset = enabled, delay=500ms
Reset Asserts = disabled
Неизменно плохой результат.
JTAG Speed = 1000KHz
Hardware Reset = enabled, delay=50ms
Reset Asserts = disabled
OДНАКО! Заработало таймерное прерывание! И одно внешнее на FIQ. Остальные - НЕТ.
JTAG Speed = 1000KHz
Hardware Reset = enabled, delay=0ms
Reset Asserts = disabled
Таймерное и FIQ есть. Остальных - НЕТ.
JTAG Speed = Auto, Inital - 10KHz
Hardware Reset = enabled, delay=0ms
Reset Asserts = disabled
ПРОПАЛИ все прерывания...
JTAG Speed = Auto, Inital - 10KHz
Hardware Reset = enabled, delay=50ms
Reset Asserts = disabled
Опять появилось таймерное и FIQ!
Хаотически подергал Speed/Delay - максимум удалось добиться работы таймерного+FIQ
или полного отсутствия....
Результаты коротко:
1. В моих условиях достаточно при использовании штатной поддержки J-Link IARом отключить опцию
"Run to main()" в 'Debugger->Setup' и, как следствие, начинать жизнь с 0 адреса для получения стабильного эффекта пропадания прерываний. Данный эффект завязан на MT-Link (to: DASM -
я НЕ утверждаю, что J-Link ведет себя иначе :-) и пропадает только после передергивания питания
MT-Link. При этом загрузка во Flash работает и останов на main() отрабатывает.
2. При некоторых установках, например:
JTAG Speed = 1000KHz
Hardware Reset = enabled, delay=0ms
Reset Asserts = disabled
Начинает работать таймерное и внешнее на FIQ. Большей работоспособности добится не удалось.
Если у кого есть идеи - добро пожаловать!
3. При выбранной опции "Run to main()" и описанной выше конфигурации железа и софта
прерывания работают пока без глюков.
Сообщение отредактировал zltigo - Jan 1 2006, 11:49