Например, у меня таймерная служба. На асме я в файле таймерной службы создал макрос автоматического добавления порядкового номера таймера и автоматического добавления блока в ОЗУ. При компиляции создаются порядковые номера и очередь таймеров. Размер очереди зависит от списка таймеров. Что я хочу, на си создавать независимые файлы. Скажем, в модуле у меня 2 таймера, вот и хотелось бы, чтобы таймеры определять в файлах, а не в одном месте, потому как, бывает, забываешь добавлять в список таймеры. И не всегда помнишь, сколько у тебя таймеров. А так, сделал макрос на си и при компиляции все делается автоматом.
На асме я сделал так:
//========================================================================
.equ SYS_TICK = 1 // Период системного таймера 1 мс
//========================================================================
//========================================================================
.equ ST_SIZE = 2
//========================================================================
//========================================================================
//--------------------- Флаги системных таймеров -------------------------
Def_Flag SYS_TICK_FLG
//------------------------------------------------------------------------
//------------------------------------------------------------------------
.equ ST_UNLOCK_FLG = 0 // Флаг активности таймера.
.equ ST_TIME_OUT_FLG = 1 // Время вышло.
//========================================================================
.dseg
//========================================================================
//-------------------- Очередь системных таймеров ------------------------
.set NUM_ST = -1
.set ST_QUANTITY = 0
.macro Def_Sys_Timer
.set NUM_ST = (NUM_ST+1)
.set ST_QUANTITY = (ST_QUANTITY+1)
.set @0 = NUM_ST
.message "System Timer Defined!"
.endmacro
Def_Sys_Timer ST_DRV_LCD
Def_Sys_Timer ST_KBD
Def_Sys_Timer ST_PROC_GAME_1
Def_Sys_Timer ST_PROC_GAME_2
ST_CNT_QUEUE:
.byte ST_QUANTITY*(ST_SIZE+1)
//========================================================================