ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
6 мая
158143 Топик полностью
Vladimir Ljaschko (02.06.2009 10:31, просмотров: 279) ответил Evgeny_CD на Тайна Linux'а частично разгадана: жрецы 21 века.
Подумаешь, Линукс... Мне студент на практике вот такое написал. Все очень красиво и элегантно :) Но если ошибешься где ... ( . ) #define USE_OBJECTS_IMPL #include "k_globals.h" #include "k_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 "k_objects_impl.c" #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE // take cure about type : "const char * const" for MSP430 #define IMPL_PROLOG(obj) const char * const obj##_names[] = { #define IMPL_EPILOG() }; #define IMPL_VARIABLE(obj, i, name, get, set) obj##i##_name, #include "k_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 "k_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 "k_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 "k_objects_impl.c" #undef IMPL_PROLOG #undef IMPL_EPILOG #undef IMPL_VARIABLE #undef IMPL_GET #undef IMPL_SET #undef IMPLEMENTATION #undef USE_OBJECTS_IMPL // пример описания объекта в протоколе //****************************************************************************** // System //****************************************************************************** #ifndef IMPLEMENTATION __flash unsigned int firmware_version = 203; #define CONTACT_PERSON_LENGTH 30 //60 char contact_person[CONTACT_PERSON_LENGTH] = "Developed by VL"; #else IMPL_PROLOG(system) IMPL_VARIABLE(system, 0, "Schulz Hygiene, Type F ", IMPL_GET UcharDecimal(COUNT_ELEMENTS(system_names)); return;, IMPL_SET ReadOnly();return; ) IMPL_VARIABLE(system, 1, "Firmware version", IMPL_GET UcharDecimal(firmware_version); return;, IMPL_SET ReadOnly();return; ) IMPL_VARIABLE(system, 2, "Objects quantity", IMPL_GET UcharDecimal(OBJECTS_QUANTITY); return;, IMPL_SET ReadOnly(); return; ) IMPL_VARIABLE(system, 3, "Contact info", IMPL_GET GetText(contact_person); return;, IMPL_SET SetText(contact_person, CONTACT_PERSON_LENGTH); return; ) IMPL_VARIABLE(system, 4, "Device type", IMPL_GET GetText((char*)type); return;, IMPL_SET ReadOnly();return; ) IMPL_VARIABLE(system, 5, "Device number", IMPL_GET UintDecimal(device_number); return;, IMPL_SET ReadOnly();return; ) IMPL_EPILOG() #endif