16+
Среда
20 сентября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
vllv  (05.09.2017 08:49) , в ответ на По показанным фрагментам непонятна идея/как_это_работает. X-MACRO видел, читал, понимаю (хоть и не прозрачно). А с вашими фрагментами нет. автор: Dingo
Файл приложил, но имейте ввиду - X-MACRO бьет по мозгам, как табак в самогонке, я просто беспокоюсь, что по этой причине вы отметете что-то хорошее (мое или не мое, неважно). 
// names definitions

#undef IMPL_GET
#undef IMPL_SET
#undef IMPL_PROLOG
#undef IMPL_EPILOG
#undef IMPL_VARIABLE

// name of property
#define IMPL_PROLOG(obj)
#define IMPL_EPILOG()
#define IMPL_VARIABLE(obj, i, name, get, set) const NAME_TYPE obj##i##_name = name;
#include objects_file
#undef IMPL_PROLOG
#undef IMPL_EPILOG
#undef IMPL_VARIABLE

// pointers to properties names of one object
#define IMPL_PROLOG(obj) NAME_TYPE const * const obj##_names[] = {
#define IMPL_EPILOG()   										 };
#define IMPL_VARIABLE(obj, i, name, get, set) 	&obj##i##_name,
#include objects_file
#undef IMPL_PROLOG
#undef IMPL_EPILOG
#undef IMPL_VARIABLE

//name

// get name function
#define IMPL_PROLOG(obj) void obj##GetName(DompParserResultType * dpr) 				\
							{	if (COUNT_ELEMENTS(obj##_names) <= PN) AbsentP(); 	\
								else												\
								{													\
										dpr->name = obj##_names[PN]; 				\
								} 													\
							}
#define IMPL_EPILOG()
#define IMPL_VARIABLE(obj, i, name, get, set)
#include objects_file
#undef IMPL_PROLOG
#undef IMPL_EPILOG
#undef IMPL_VARIABLE

// get var function
#define IMPL_PROLOG(obj) void obj##GetVar(DompParserResultType * dpr) { switch (PN) {
#define IMPL_EPILOG() default: AbsentP(); } }
#define IMPL_VARIABLE(obj, i, name, get, set) case i: get;
#include objects_file
#undef IMPL_PROLOG
#undef IMPL_EPILOG
#undef IMPL_VARIABLE

// set var function
#define IMPL_PROLOG(obj) void obj##SetVar(DompParserResultType * dpr) { switch (PN) {
#define IMPL_EPILOG() default: AbsentP(); } }
#define IMPL_VARIABLE(obj, i, name, get, set) case i: set;
#include objects_file
#undef IMPL_PROLOG
#undef IMPL_EPILOG
#undef IMPL_VARIABLE

#define DECLARE_METHODS(dummy, obj_name) { obj_name##GetName, obj_name##GetVar, obj_name##SetVar }

const VOID_METHOD object_methods[][3] =
{
#ifdef _LAMP_
 	DECLARE_METHODS	(A, system),
	DECLARE_METHODS	(B, control_temp),
	DECLARE_METHODS	(C, reserved),
	DECLARE_METHODS	(D, service),
	DECLARE_METHODS	(E, boot),
#endif

#ifdef _SENSOR_
 	DECLARE_METHODS	(A, system),
	DECLARE_METHODS	(B, local_compare),
	DECLARE_METHODS	(C, illumination),
	DECLARE_METHODS	(D, service),
	DECLARE_METHODS	(E, boot),
#endif

#ifdef _CU_
#ifdef _APPLICATION_

 	DECLARE_METHODS	(A, system),
	DECLARE_METHODS	(B, ports),
	DECLARE_METHODS	(C, mode),
	DECLARE_METHODS	(D, group),
	DECLARE_METHODS	(E, setup),
#endif
#ifdef _BOOT_
 	DECLARE_METHODS	(A, system),
#endif


#endif


};

const u16 OBJECTS_QUANTITY = COUNT_ELEMENTS(object_methods);

void GetName(DompParserResultType * dpr)
{
 	if (OBJECTS_QUANTITY > ON)
	{	object_methods[ON][0](dpr);
		dpr->tx_op_code=UniGetName;
	}
	else
		AbsentO();
}

void GetVar(DompParserResultType * dpr)
{
	if (OBJECTS_QUANTITY > ON)
	{	dpr->tx_op_code=UniGetValue;
		object_methods[ON][1](dpr);
	}
	else
		AbsentO();
}

void SetVar(DompParserResultType * dpr)
{
	if (OBJECTS_QUANTITY > ON)
	{
		object_methods[ON][2](dpr);
		dpr->tx_op_code=dpr->rx_op_code;
	}
	else
		AbsentO();
}
 [x][x][x][x][x][x] [x][x][x][x][x][x][x][x]

Тема выделяется по переводу строки или автоматом

 

Имя


Регистрация позволит вам редактировать и перемещать ваши сообщения и прикреплять к ним файлы.
 
Символы: á é ó ú ý « »
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7526 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVII