Странный баг RVDS - PullRequest
       8

Странный баг RVDS

0 голосов
/ 22 ноября 2008

У меня есть проект RVDS для определенного видеодекодера (все это код C), созданный для цели ARM926EJ-S, выполненный с использованием симулятора RVDS 2.2. Я не использую никакой scatterload / <файл конфигурации> / <файл карты> для упомянуть различные сегменты памяти в коде, такие как сегмент стека, Куча, сегмент данных, сегмент кода для среды RVDS Simulator.

  • Когда я добавляю или комментирую некоторый код (избыточный / мертвый код), затем компилирую проект и выполняю его, декодер грациозно завершает работу после упоминания о том, что возникла ошибка, чего не должно быть, как прокомментировал / добавленный код является избыточным и никак не влияет на функциональность.
  • Теперь, если я выполню операцию, противоположную той, что была сделана в 1.), т. Е. Раскомментируем код, который был закомментирован в шаге 1.), скомпилируем и выполним, декодер работает отлично до его логического завершения.
  • Те же файлы исходного кода / заголовка C прекрасно работают в рабочей области MSVC.

Я пытался много отлаживать с помощью этого поведения, но я не могу точно определить причину и способ ее устранения.

  • Это случай повреждения стека при добавлении / удалении кода?
  • Перезаписывается ли какой-либо сегмент, например, сегмент стека, переполняющийся в сегмент данных, или сегмент кода, переполняющийся в сегмент данных?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2009

Вы инициализируете раздел ZI с нуля. Я думаю, что код scatterload во время выполнения инициализировал раздел ZI (может быть, это ненадолго). У нас была проблема с инициализацией секции ZI с некоторыми данными, оставшимися от нашего загрузчика программы.

В результате изменение любой строки в коде приведет к сбою в том же месте. Даже удаление кода может привести к сбою. Я бы подтвердил, что в начале вашей программы раздел ZI равен нулю.

0 голосов
/ 22 ноября 2008

У меня было что-то подобное с проектом, над которым я работал. В результате возникла проблема со ссылкой на неинициализированный указатель в стеке. Обычно он указывает на неиспользуемую программную память и перезаписывает код, который не использовался.

Когда я удалял неиспользуемый код, он внезапно указывал на память, которую я не мог изменить, и выходил из рук вон.

Дважды проверьте ваши mallocs и убедитесь в правильности указателей на переменные функции!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...