ARM9+KEIL = баг отладки SPI - нужна помощь

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Сообщения: 79
Зарегистрирован: Сб май 08, 2010 09:33:42

Сообщение of_silence »

Здравствуйте!
Написал простую программу для SAM9XE512, использую только встроенную память и флэш, инициализация всего под си, кроме вектора прерываний и стэка. Проект выводит данные в SPI1, Проблема в том, что начиная с какого-то момента (не с начала проектирования программы) перестала работать отладка SPI через j-link. Все данные в окне SPI1 отображаются нулями, могут быть редактированы, но при повторной загрузке окна ничего не сохраняется - то есть чтение параметров SPI не работает. Не смотря на это, при пошаговой отладке SPI работает! Он конфигурируется и отправляет данные куда надо. Также Keil нормально отображает другие переферийные устройства - в проекте я также использую SSC, и его конфигурационные данные не вызывают подобных проблем.
Вопрос - что виновато в таком поведении? это бак среды Keil, или я её не правильно настроил каким-то образом? Думаю от самой программы это не зависит - SPI же работает в соответствии с написанным мной кодом. Если не прав, поправьте. Спасибо
Реклама
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

Сообщение FUZZY_ »

of_silence писал(а):Здравствуйте!
Написал простую программу для SAM9XE512, использую только встроенную память и флэш, инициализация всего под си, кроме вектора прерываний и стэка. Проект выводит данные в SPI1, Проблема в том, что начиная с какого-то момента (не с начала проектирования программы) перестала работать отладка SPI через j-link. Все данные в окне SPI1 отображаются нулями, могут быть редактированы, но при повторной загрузке окна ничего не сохраняется - то есть чтение параметров SPI не работает. Не смотря на это, при пошаговой отладке SPI работает! Он конфигурируется и отправляет данные куда надо. Также Keil нормально отображает другие переферийные устройства - в проекте я также использую SSC, и его конфигурационные данные не вызывают подобных проблем.
Вопрос - что виновато в таком поведении? это бак среды Keil, или я её не правильно настроил каким-то образом? Думаю от самой программы это не зависит - SPI же работает в соответствии с написанным мной кодом. Если не прав, поправьте. Спасибо
Если прерывания разрешены но не определены или наобород то в некотором месте программы и возникают подобные глюки
Реклама
Открыл глаза
Сообщения: 79
Зарегистрирован: Сб май 08, 2010 09:33:42

Сообщение of_silence »

А кстати похоже на то, спасибо!
У меня иногда (правда очень редко) программа попадает в undef исключение. Видимо потому, что какое-то прерывание не задано. Буду искать (c ARM я недавно).
Правда я так и не понимаю, как криво заданный вектор прерываний может влиять на процесс отладки, при том, что прерывания я в программе не использую вообще :dont_know:
Открыл глаза
Сообщения: 79
Зарегистрирован: Сб май 08, 2010 09:33:42

Сообщение of_silence »

Так и не разобрался, почему кейл показывает нули. Перевел программу в работу на прерываниях, все работает как часы. Но баг отладки никуда не делся. Еще я обнаружил, что содержимое переферии PIOC для моего ядра тоже не корректное.
В общем я склонен думать, что это именно баг кейла. Если у кого-нибудь такое тоже случится, то можно читать значения регистров с помощью вкладки для отображения содержимого ячеек памяти. Не удобно, но выхода другого нет :dont_know:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 79
Зарегистрирован: Сб май 08, 2010 09:33:42

Сообщение of_silence »

У меня просто фундаментальные новости! :shock:
Баг был потому, что мой код в какой-то части (я не выяснил, какой) пишет в области памяти, помеченные как Reserved. В этих областях по "счастливой" случайности находятся регистры, которые использует Jtag для чтения содержимого памяти.
Повторю как все было. Я не мог прочитать и редактировать содержимое всех регистров SPI и PIOC. Ситуация не исправлялась даже если я начинаю отлаживать на свежестертом чипе. Дело в том, что перед отладкой новая прошивка не только зашивается во флэш, но еще и зачем-то запускается на небольшое время! И к этому моменту все беды уже натворены, поэтому ничего неработает!

Разобраться мне помогла случайно прочитанная статья про обработку исключений по ошибке доступа (data abort), в которой товарищ исследовал чтение - запись всех "запрещенных" областей памяти и пришел к выводу, что далеко не все они вызывают это исключение!
Исходник тут (английский язык):
http://www.embedded.com/192202641?_requestid=6801
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»