ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
161553 Топик полностью
Vladimir Ljaschko (16.07.2009 20:13, просмотров: 197) ответил ReAl на Вот так:
Ну не только COG-ом. Вот так генерируется описание переменных для доступа по протоколу - путем множественного включения файла описания при действии различных условий.  #define USE_OBJECTS_IMPL #include "bm_objects_impl.c" #define IMPLEMENTATION #undef IMPL_GET #undef IMPL_SET #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE #define IMPL_GET #define IMPL_SET #define IMPL_PROLOG(obj) #define IMPL_EPILOG() #define IMPL_VARIABLE(obj, i, name, get, set) __flash char obj##i##_name[] = name; #include "bm_objects_impl.c" #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE #define IMPL_PROLOG(obj) __flash char __flash *obj##_names[] = { #define IMPL_EPILOG() }; #define IMPL_VARIABLE(obj, i, name, get, set) obj##i##_name, #include "bm_objects_impl.c" #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE #define IMPL_PROLOG(obj) void obj##GetName(void) { if (COUNT_ELEMENTS(obj##_names) <= var) Absent(); else name = obj##_names[var]; } #define IMPL_EPILOG() #define IMPL_VARIABLE(obj, i, name, get, set) #include "bm_objects_impl.c" #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE #define IMPL_PROLOG(obj) void obj##GetVar(void) { switch (var) { #define IMPL_EPILOG() default: Absent(); } } #define IMPL_VARIABLE(obj, i, name, get, set) case i: get; #include "bm_objects_impl.c" #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE #define IMPL_PROLOG(obj) void obj##SetVar(void) { switch (var) { #define IMPL_EPILOG() default: Absent(); } } #define IMPL_VARIABLE(obj, i, name, get, set) case i: set; #include "bm_objects_impl.c" #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE #undef IMPL_GET #undef IMPL_SET #undef IMPLEMENTATION #undef USE_OBJECTS_IMPL