Ну не только 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
-
- Интересная идея со множественным включением. Спасибо, при случае возьму на вооружение. - vmp(17.07.2009 08:59)
- Тьху, промахнулся. Читать выше - ReAl(16.07.2009 23:18, ссылка)