Я использую программное обеспечение C на ARM IP (имя модуля ARM926EJS), предоставленном Synopsis, и весь инструмент, который я использую, - это Platform Architect, также Synopsis (на основе симулятора TLM, аппаратная часть реализована в SystemC) ,
Я получил от моего аппаратного модуля адрес, к которому у программного обеспечения нет доступа. Аппаратные модули не могут видеть информацию о программном обеспечении (или я просто не знаю), поэтому я обычно присоединяю arm-none-eabi-gdb к IP ARM во время симуляции для отладки программного обеспечения.
Я должен проверить, но я считаю, что IP ARM, который я использую, не поддерживает аппаратную точку наблюдения (при использовании только одной аппаратной точки наблюдения возвращается «слишком много аппаратных точек наблюдения»). Я пытаюсь установить точку наблюдения, набрав
set can-use-hw-watchpoints 0
Я пытался увидеть, когда программа обращается к странному адресу, набрав
watch *(int*)(0x2056604+0xd0000000)
номер которого является адресом, который я получаю на оборудовании. Однако программа зависает, и прерывание на GDB даже не работает, мне нужно остановить симуляцию и удалить точку наблюдения, чтобы продолжить.
Как ни странно, rwatch работает правильно (хотя проблема сохраняется, поскольку к адресу обращаются как «write»). Было бы действительно полезно увидеть, какая точка в программном обеспечении вызвала доступ к адресу 0x2056604 + 0xd0000000, но, поскольку у меня не работают контрольные точки, есть ли альтернативные способы прервать такой доступ? Или есть способ решить проблему зависания программных точек наблюдения?
Дополнительное примечание) Я также попытался приостановить симуляцию при доступе к памяти, а затем просмотреть кадр стека программного обеспечения. У программного обеспечения странный стек, и GDB говорит мне, что стек может быть поврежден. Вывод следующий ..
#0 0x00002bf0 in ?? ()
#1 0x00001b94 in ?? ()
#2 0x00001b94 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)