lib/accessor.h
changeset 221 c6aed7e5f070
parent 219 9bb38736f126
child 222 8b1757417a54
equal deleted inserted replaced
220:f332b62cd2c1 221:c6aed7e5f070
     1 #ifndef __ACCESSOR_H
     1 #ifndef __ACCESSOR_H
     2 #define __ACCESSOR_H
     2 #define __ACCESSOR_H
     3 
     3 
       
     4 
     4 // variable declaration macros
     5 // variable declaration macros
     5 #define __DECLARE_VAR(type, name)\
     6 #define __DECLARE_VAR(type, name)\
     6 	type name;
     7 	__IEC_##type##_t name;
     7 #define __DECLARE_GLOBAL(type, resource, name)\
     8 #define __DECLARE_GLOBAL(type, resource, name)\
     8 	type resource##__##name;\
     9 	__IEC_##type##_t resource##__##name;\
     9 	static type *GLOBAL__##name = &resource##__##name;\
    10 	static __IEC_##type##_t *GLOBAL__##name = &resource##__##name;
    10 	type __GET_GLOBAL_##name(void) {return *GLOBAL__##name;}\
       
    11 	void __SET_GLOBAL_##name(type value) {*GLOBAL__##name = value;}
       
    12 #define __DECLARE_GLOBAL_LOCATION(type, location)\
    11 #define __DECLARE_GLOBAL_LOCATION(type, location)\
    13 	extern type *location;
    12 	extern type *location;
    14 #define __DECLARE_GLOBAL_LOCATED(type, resource, name)\
    13 #define __DECLARE_GLOBAL_LOCATED(type, resource, name)\
    15 	type *resource##__##name;\
    14 	__IEC_##type##_p resource##__##name;\
    16 	static type *GLOBAL__##name;\
    15 	static __IEC_##type##_p *GLOBAL__##name;
    17 	type __GET_GLOBAL_##name(void) {return *GLOBAL__##name;}\
       
    18 	void __SET_GLOBAL_##name(type value) {*GLOBAL__##name = value;}
       
    19 #define __DECLARE_EXTERNAL(type, name)\
    16 #define __DECLARE_EXTERNAL(type, name)\
    20 	type *name;
    17 	__IEC_##type##_p name;
    21 #define __DECLARE_LOCATED(type, name)\
    18 #define __DECLARE_LOCATED(type, name)\
    22 	type *name;
    19 	__IEC_##type##_p name;
    23 
    20 
    24 
    21 
    25 // variable initialization macros
    22 // variable initialization macros
    26 #define __INIT_VAR(name, initial)\
    23 #define __INIT_STRUCT(name, initial, retained)\
    27 	name = initial;
    24     name.value = initial;\
    28 #define __INIT_GLOBAL(name, initial)\
    25 	name.flags |= retained?4:0;
    29 	*GLOBAL__##name = initial;
    26 #define __INIT_VAR(name, initial, retained)\
    30 #define __INIT_GLOBAL_LOCATED(resource, name, location)\
    27 	__INIT_STRUCT(name, initial, retained)
    31 	resource##__##name = location;\
    28 #define __INIT_GLOBAL(name, initial, retained)\
    32     GLOBAL__##name = location;
    29 	__INIT_STRUCT((*GLOBAL__##name), initial, retained)
    33 #define __INIT_EXTERNAL(type, global, name)\
    30 #define __INIT_GLOBAL_LOCATED(resource, name, location, retained)\
    34 	{extern type *GLOBAL__##global;\
    31 	__INIT_STRUCT(resource##__##name, location, retained)
    35 	 name = GLOBAL__##global;}
    32 #define __INIT_EXTERNAL(type, global, name, retained)\
    36 #define __INIT_LOCATED(type, location, name)\
    33 	{extern __IEC_##type##_t *GLOBAL__##global;\
       
    34 	 __INIT_STRUCT(name, &((*GLOBAL__##global).value), retained)}
       
    35 #define __INIT_LOCATED(type, location, name, retained)\
    37 	{extern type *location;\
    36 	{extern type *location;\
    38 	 name = location;}
    37 	 __INIT_STRUCT(name, location, retained)}
    39 #define __INIT_LOCATED_VALUE(name, initial)\
    38 #define __INIT_LOCATED_VALUE(name, initial)\
    40 	*name = initial;
    39 	*(name.value) = initial;
    41 
    40 
    42 
    41 
    43 // variable getting macros
    42 // variable getting macros
    44 #define __GET_VAR(name)\
    43 #define __GET_VAR(name, ...)\
    45 	name
    44 	name.value __VA_ARGS__
    46 #define __GET_EXTERNAL(name)\
    45 #define __GET_EXTERNAL(name)\
    47 	__GET_GLOBAL_##name()
    46 	name.flags & 2 ? name.fvalue : *(name.value)
    48 #define __GET_LOCATED(name)\
    47 #define __GET_LOCATED(name)\
    49 	*(name)
    48 	name.flags & 2 ? name.fvalue : *(name.value)
    50 #define __GET_VAR_BY_REF(name)\
    49 #define __GET_VAR_BY_REF(name)\
    51 	&(name)
    50 	&(name)
    52 #define __GET_EXTERNAL_BY_REF(name)\
    51 #define __GET_EXTERNAL_BY_REF(name)\
    53 	GLOBAL__##name
    52 	name.value
    54 #define __GET_LOCATED_BY_REF(name)\
    53 #define __GET_LOCATED_BY_REF(name)\
    55 	name
    54 	name.value
    56 
    55 
    57 // variable setting macros
    56 // variable setting macros
    58 #define __SET_VAR(name, new_value)\
    57 #define __SET_VAR(name, new_value, ...)\
    59 	name = new_value
    58 	if (!(name.flags & 2)) name.value __VA_ARGS__ = new_value
    60 #define __SET_EXTERNAL(name, new_value)\
    59 #define __SET_EXTERNAL(name, new_value)\
    61 	__SET_GLOBAL_##name(value)
    60 	if (!(name.flags & 2)) *(name.value) = new_value
    62 #define __SET_LOCATED(name, new_value)\
    61 #define __SET_LOCATED(name, new_value)\
    63 	*(name) = value
    62 	if (!(name.flags & 2)) *(name.value) = new_value
    64 
    63 
    65 #endif //__ACCESSOR_H
    64 #endif //__ACCESSOR_H