реклама на сайте
подробности

 
 
> Отладка АRMv7 (Cortex-A9), Нужна помощь, советы, идеи в поиске неординарной ошибки
Gehar
сообщение Feb 8 2017, 12:36
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 6-08-12
Пользователь №: 73 031



Добрый день.
Имеется прибор, внутри которого стоит 2х-ядерный Cortex-A9 (производства Xilinx, семейство Zynq). Система работает в AMP режиме: cpu0 - Linux, cpu1 - standalone, то есть без ОС. Второе ядро (cpu1) выполняет программу реального времени, управляющую блоком в FPGA. Обнаружено, что при определенных условиях процессор "помирает", да так помирает, что не возможно подключиться даже отладчиком (через JTAG) к нему и посмотреть состояние памяти, регистры, на каком месте остановилось управление, отладчик выдает ошибку таймаута. Никаких следов, что случилось, после этого не остается.
Что сделано:
1. Определены условия, при которых процессор зависает ("помирает") и написана программа управления прибором, способная за 30-60 секунд повесить процессор (именно процессор, а не программу);
2. Приблизительно установлено место в программе, в котором происходит зависание;
3. Проверено, что программа не пишет ничего в наиболее важные системные регистры процессора (во всяком случае отладчик не зарегистрировал обращений по этим регистрам перед зависанием): DDR Memory Controller, L2 Cache Controller, System Level Control Registers (slcr).

Занимаюсь этой ошибкой (активно) уже около месяца и никак не могу понять, что происходит. Может быть кто-то сталкивался с подобной ситуацией?
Сегодня появилась мысль попробовать аппаратный трассировщик, может быть с его помощью удастся зарегистрировать что происходит с системой перед смертью? Только его пока у нас нет, нужно покупать... И какой брать тоже не известно пока, у нас никто с ними не сталкивался.

Так же есть другой прибор (с другим назначением, кодом, но идентично помирающий), тоже требуется понять, в чем причина...
Есть ли у кого-либо идеи, как отловить ошибку?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Feb 8 2017, 14:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Gehar @ Feb 8 2017, 14:36) *
программа не пишет ничего в наиболее важные системные регистры процессора (во всяком случае отладчик не зарегистрировал обращений по этим регистрам перед зависанием):

Вот в этом есть сомнения.
Цитата(Gehar @ Feb 8 2017, 14:36) *
Есть ли у кого-либо идеи, как отловить ошибку?

Если нет функции обратной трассировки в отладчике/МК (типа ETB) можно попробовать эмулировать какое-то её подобие.
Я уже описывал здесь на форуме как:
Запустить высокочастотное периодическое прерывание и в его ISR записывать состояния процессора (регистры, несколько слов стека) в кольцевой буфер. Если частота прерывания достаточно высока, то так можно получить точки записи через каждые неск. команд и локализовать место.
И полезно поставить ловушки на все исключения процессора.
Да и MMU поди есть в МК? А значит надо с его помощью разрешить доступ только в нужные регионы памяти. Остальные - на исключение и ловушку.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 17:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016