Цитата(Jhohn @ Oct 11 2011, 09:01)

При изменении расположения адреса в таблице (например на 0х1100) таблицу почему-то не удается прочитать. В чем может быть "гвоздь"?
Извините, но не понимаю что именно нужно сделать. Вам нужно считать данные из конкретной ячейки ROM(как они туда попадают- неважно), или из конкретной ячейки массива (какого типа и сложности массив- неважно)? Или что-то третье?
Приведите кусочек таблицы и кусочек кода, где есть нужное вам обращение к таблице. У меня смутное подозрение, что вашу задачу можно решить проще и гибче, если с самого начала правильно описать массив данных, а не пытаться использовать физическую адресацию. То есть заводите нормальный typedef, в котором определяете структуру полей, ну а дальше обращаться по полям, а не по физическим адресам. То есть "table1[24].cfg.Fmax" гораздо предпочтительней чем чтение байта, сдвинутого на 24*36+8 байт относительно адреса 0x1000.
Использовать физическую адресацию при ползании по массиву опасно, упаковка может измениться при изменении опций или версии компилятора. Нужно использовать хотя бы указатель на первый элемент массива и функцию sizeof() для определения длины элемента массива. И это не зависит никак от того, в ОЗУ или в ПЗУ расположен массив. Меняется только определение этих указателей.
Если вам нужно прочесть 24-й (считаем с нулевого) элемент массива table1, то это будет table1[24]. Если вам нужно узнать где в памяти расположен первый байт 24-го элемента массива table1, то это будет &table1[24]. Такой вид обращений к массивам работает на любой версии любого компилятора.