2009-03-23 7 views
3

Архитектура ARM9. Язык программирования C.Какое обходное решение для исключенного исключения доступа к памяти на ARM9 с использованием C?

У нас есть сторонний стек, и один из вызовов принимает указатель (pBuffer) в ячейку памяти. Внутри стека они могут свободно перемещаться по пройденному указателю и получать доступ к нему по своему усмотрению. К сожалению, они компенсированы переданные в указателе и передали его в другой функцию, которая пыталась сделать это от места нечетной/unalighed памяти

  ((uint16 *)pBuffer)[index] = value; 

где value имеет типа uint16 и index это граница проверяются и индексы pBuffer , Это приводит к исключению незанятого доступа к памяти. pBuffer указывает на char * на кучу.

Как уже упоминалось, хотя мы можем заглянуть в сторонний стек, мы не можем официально обновить код. Поэтому мы уведомляем поставщика, и они предоставляют обновление в следующей версии.

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

ответ

6

Скопировать байт по байтам. Передайте его в (без знака) указатель на символ, а затем скопируйте байт за раз.

Это некрасиво, но звучит не так, как будто у вас много вариантов.

1

Есть три возможности, и я не могу определить из вашего вопроса до сих пор, что имеет место.

Дело 1: индекс всегда нечетный. Решение: memmove() pBuffer более 1 байта Случай 2: Индекс иногда нечетный, и вы можете прогнозировать фронт, когда он будет. Решение: memmove() pBuffer более 1 байт, когда вы знаете, что индекс будет нечетным. Случай 3: индекс иногда нечетный, и вы не можете предсказать, когда он будет. Это печально, потому что код будет ошибка.

+0

Спасибо, MSalters. Это фактически случай 3, поэтому он не может многое сделать в вызывающем. Настоящая процедура, которая выполняет эти операции, предоставляет нам. Поэтому им придется обновлять, но мы можем неофициально обновлять информацию и указывать поставщику, где проблема заключается в том, чтобы исправить и предоставить обновленный стек. – dubnde