Цитата(DenisIV @ Apr 13 2009, 18:43)

Можно поподробнее? Есть ли доступ к таблице переходов?
PRO 9.65
Тут все не очень просто. В ПРО-версиях (кажется с версии 9.60pl4) есть внутренняя константа
fpbase (не доступная через Си, по крайней мере, я не добрался до нее). К ней можно обратиться только через asm:
Код
int i;
...
asm(" movlw low(fpbase)");
asm(" movwf _i + 0");
asm(" movlw high(fpbase)");
asm(" movwf _i + 1");
Переменная существует и доступна только тогда, когда в программе есть обращение к адресу функции. Сами понимаете, что это не выход, т.к., во-первых, по-любому получается использование асма, а во-вторых, это всего лишь адрес таблицы переходов.
Но также доступой становится константа с префиксом
fp__ (опять же через ассемблер). Если функция называется MyArray, то адрес перехода на эту функцию в таблице переходов будет доступен через константу
fp__MyArray.
Цитата
даже если сместится, можно хоть как-нибудь не прибегая к асму вытащить адрес функции и засунуть в какую-нибудь переменную?
Я пока не находил таких механизмов.
Цитата
на AVR и x51.
ну в AVR с dw нормально, только точка перед ней нужна, с 51 проблем никаких вроде.
dw не самая большая проблема.
Я про разные платформы спросил вот к чему: учитывая, что в трех перечисленных платформах dw описывается по-разному, то все равно придется делать какие-то платформозависимые куски кода и выбирать их директивами препроцессора #ifdef. А раз так, то совершенно спокойно можно использовать встроенный asm по той схеме, которую я привел в функции GetMyTable() (тремя-четырьмя постами выше). Вот эту функцию и нужно будет сделать платформозависимой. Весь остальной код будет переносимым, т.к. будет содержать только вызов этой функции.