ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
29 июня
219953 Топик полностью
mazur (05.11.2010 01:50, просмотров: 183) ответил mazur на Здравствуйте! Помогите разобраться с директивами. Итак, что я хочу получить. Для разных проектов используется один модуль, но в зависимости от идентификаторов компилируется нужный код. Например:
Решил этот вопрос, правда не совсем так, как хотел.  Я разбрасывал по файлам определения, макросы, сам код. Пришлось слеплять все это вместе, чтобы заработали дефайны. #define TYPE_KEYS_BUTTONS 0 #define TYPE_KEYS_MATRIX 1 #define SELECT_TYPE_PORTS_SIZE ONE_PORT #define SELECT_TYPE_PORTS_SIZE MULTI_PORTS #define SCAN_BYTES_1 0 #define SCAN_BYTES_2 1 #define SELECT_TYPE_KEYS TYPE_KEYS_BUTTONS #define SELECT_TYPE_KEYS TYPE_KEYS_MATRIX ;------------------------------------------------------------------------------------------- ; Вот та функция, с которой я парился: #if (SELECT_TYPE_KEYS==TYPE_KEYS_BUTTONS) #define SELECT_SIZE_SCAN_COD SCAN_BYTES_1 #elif (SELECT_TYPE_KEYS==TYPE_KEYS_MATRIX) #define COL_SIZE 5 #define ROW_SIZE 6 #define SCAN_BYTES_1 (COL_SIZE+ROW_SIZE)<=8 #define SCAN_BYTES_2 (COL_SIZE+ROW_SIZE)>=8 #endif ;------------------------------------------------------------------------------------------- .macro Scan_Keys #if (SELECT_TYPE_KEYS==TYPE_KEYS_BUTTONS) Buttons #elif (SELECT_TYPE_KEYS==TYPE_KEYS_MATRIX) Matrix #endif .endmacro .macro Buttons #if (SELECT_TYPE_PORTS_SIZE==ONE_PORT) in r16,Keys_Pin andi r16,Keys_Mask #elif (SELECT_TYPE_PORTS_SIZE==MULTI_PORTS) ser r16 sbis Keys_PIN_Enter,Key_Enter Set_Keys_Scan_Bit Bit_Enter sbis Keys_PIN_Esc,Key_Esc Set_Keys_Scan_Bit Bit_Esc sbis Keys_PIN_Plus,Key_Plus Set_Keys_Scan_Bit Bit_Plus sbis Keys_PIN_Minus,Key_Minus Set_Keys_Scan_Bit Bit_Minus #endif ; sts Keys_Current,r16 ; sts Scan_Cod,RSer sts Keys_Cod,RSer .endmacro .macro Matrix #if (SELECT_TYPE_PORTS_SIZE==ONE_PORT) in r12,Keys_Pin andi r16,Keys_Mask #elif (SELECT_TYPE_PORTS_SIZE==MULTI_PORTS) ser r16 sbis Keys_PIN_Enter,Key_Enter Set_Keys_Scan_Bit Bit_Enter sbis Keys_PIN_Esc,Key_Esc Set_Keys_Scan_Bit Bit_Esc sbis Keys_PIN_Plus,Key_Plus Set_Keys_Scan_Bit Bit_Plus sbis Keys_PIN_Minus,Key_Minus Set_Keys_Scan_Bit Bit_Minus #endif ; sts Keys_Current,r16 ; sts Scan_Cod,RSer sts Keys_Cod,RSer .endmacro #if (SELECT_SIZE_SCAN_COD==SCAN_BYTES_1) #define FUNC(x) (x) #elif (SELECT_SIZE_SCAN_COD==SCAN_BYTES_2) #define FUNC(x) Low(x),High(x) #endif Table_Keys_Cod: .db FUNC(Scan_Cod_Enter), Enter_Cod .db FUNC(Scan_Cod_Esc), Esc_Cod .db FUNC(Scan_Cod_Plus), Plus_Cod .db FUNC(Scan_Cod_Minus), Minus_Cod .db 0xFF,0xFF .dseg ;========================================================================= Process_Keys_State: .byte 1 ;========================================================================= Keys_Cod: .byte 1 ;========================================================================= Period_Repeat: .byte 1 Cnt_Change_Period_Repeat: .byte 1 ;========================================================================= #if (SELECT_SIZE_SCAN_COD==SCAN_BYTES_1) Keys_Prev: .byte 1 #elif (SELECT_SIZE_SCAN_COD==SCAN_BYTES_2) Keys_Prev_H: .byte 1 Keys_Prev_L: .byte 1 #endif ;=========================================================================