Привет коллегам.
Имеется ARM MDK 4.х от KEIL. В различных ассемблерных файлах одного проекта происходит вызов макро, которое размещает в предопределенной секции кода некоторое слово (адрес процедуры):
MACRO DEFINE_MAIN_ENTRY $USER_MAIN
AREA DSP_MAIN_TABLE ; "open" section
EXTERN $USER_MAIN DCD $USER_MAIN ; allocate a word
MEND
В главном модуле идет один раз объявление:
AREA DSP_MAIN_TABLE, DATA, READONLY EXPORT DSP_MAIN_TABLE
А по проекту раскиданы:
DEFINE_MAIN_ENTRY PROC1
... DEFINE_MAIN_ENTRY PROC2
и т.д.
В итоге после компиляции и сборки появляется таблица в секции с именем DSP_MAIN_TABLE, причем количество элементов в таблице (размер) определяется количеством вызовов макро. Начальный адрес таблицы есть само имя секции DSP_MAIN_TABLE. В С коде конструкцией вроде extern void * DSP_MAIN_TABLE можно заполучить адрес таблицы в памяти. Внимание - вопрос: как в С коде узнать еще, какой размер имеет таблица, то есть, каков размер секции?
|