Подумаешь, Линукс... Мне студент на практике вот такое написал. Все очень красиво и элегантно :) Но если ошибешься где ... ( . ) #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
-
- Каюсь, долго смотрел, смысла не догнал. Слаб моском. - Evgeny_CD(02.06.2009 20:00)