mirror of https://github.com/ArduPilot/ardupilot
AP_Param: align param info structures to save flash
This commit is contained in:
parent
5c013552ed
commit
dd31742463
|
@ -116,7 +116,7 @@
|
||||||
#define AP_CLASSTYPE(clazz, element) ((uint8_t)(((const clazz *) 1)->element.vtype))
|
#define AP_CLASSTYPE(clazz, element) ((uint8_t)(((const clazz *) 1)->element.vtype))
|
||||||
|
|
||||||
// declare a group var_info line
|
// declare a group var_info line
|
||||||
#define AP_GROUPINFO_FLAGS(name, idx, clazz, element, def, flags) { AP_CLASSTYPE(clazz, element), idx, name, AP_VAROFFSET(clazz, element), {def_value : def}, flags }
|
#define AP_GROUPINFO_FLAGS(name, idx, clazz, element, def, flags) { name, AP_VAROFFSET(clazz, element), {def_value : def}, flags, idx, AP_CLASSTYPE(clazz, element)}
|
||||||
|
|
||||||
// declare a group var_info line with a frame type mask
|
// declare a group var_info line with a frame type mask
|
||||||
#define AP_GROUPINFO_FRAME(name, idx, clazz, element, def, frame_flags) AP_GROUPINFO_FLAGS(name, idx, clazz, element, def, (frame_flags)<<AP_PARAM_FRAME_TYPE_SHIFT )
|
#define AP_GROUPINFO_FRAME(name, idx, clazz, element, def, frame_flags) AP_GROUPINFO_FLAGS(name, idx, clazz, element, def, (frame_flags)<<AP_PARAM_FRAME_TYPE_SHIFT )
|
||||||
|
@ -128,23 +128,23 @@
|
||||||
#define AP_GROUPINFO(name, idx, clazz, element, def) AP_GROUPINFO_FLAGS(name, idx, clazz, element, def, 0)
|
#define AP_GROUPINFO(name, idx, clazz, element, def) AP_GROUPINFO_FLAGS(name, idx, clazz, element, def, 0)
|
||||||
|
|
||||||
// declare a nested group entry in a group var_info
|
// declare a nested group entry in a group var_info
|
||||||
#define AP_NESTEDGROUPINFO(clazz, idx) { AP_PARAM_GROUP, idx, "", 0, { group_info : clazz::var_info }, 0 }
|
#define AP_NESTEDGROUPINFO(clazz, idx) { "", 0, { group_info : clazz::var_info }, 0, idx, AP_PARAM_GROUP }
|
||||||
|
|
||||||
// declare a subgroup entry in a group var_info. This is for having another arbitrary object as a member of the parameter list of
|
// declare a subgroup entry in a group var_info. This is for having another arbitrary object as a member of the parameter list of
|
||||||
// an object
|
// an object
|
||||||
#define AP_SUBGROUPINFO(element, name, idx, thisclazz, elclazz) { AP_PARAM_GROUP, idx, name, AP_VAROFFSET(thisclazz, element), { group_info : elclazz::var_info }, AP_PARAM_FLAG_NESTED_OFFSET }
|
#define AP_SUBGROUPINFO(element, name, idx, thisclazz, elclazz) { name, AP_VAROFFSET(thisclazz, element), { group_info : elclazz::var_info }, AP_PARAM_FLAG_NESTED_OFFSET, idx, AP_PARAM_GROUP }
|
||||||
|
|
||||||
// declare a second parameter table for the same object
|
// declare a second parameter table for the same object
|
||||||
#define AP_SUBGROUPEXTENSION(name, idx, clazz, vinfo) { AP_PARAM_GROUP, idx, name, 0, { group_info : clazz::vinfo }, AP_PARAM_FLAG_NESTED_OFFSET }
|
#define AP_SUBGROUPEXTENSION(name, idx, clazz, vinfo) { name, 0, { group_info : clazz::vinfo }, AP_PARAM_FLAG_NESTED_OFFSET, idx, AP_PARAM_GROUP }
|
||||||
|
|
||||||
// declare a pointer subgroup entry in a group var_info
|
// declare a pointer subgroup entry in a group var_info
|
||||||
#define AP_SUBGROUPPTR(element, name, idx, thisclazz, elclazz) { AP_PARAM_GROUP, idx, name, AP_VAROFFSET(thisclazz, element), { group_info : elclazz::var_info }, AP_PARAM_FLAG_POINTER }
|
#define AP_SUBGROUPPTR(element, name, idx, thisclazz, elclazz) { name, AP_VAROFFSET(thisclazz, element), { group_info : elclazz::var_info }, AP_PARAM_FLAG_POINTER, idx, AP_PARAM_GROUP }
|
||||||
|
|
||||||
// declare a pointer subgroup entry in a group var_info with a pointer var_info
|
// declare a pointer subgroup entry in a group var_info with a pointer var_info
|
||||||
#define AP_SUBGROUPVARPTR(element, name, idx, thisclazz, var_info) { AP_PARAM_GROUP, idx, name, AP_VAROFFSET(thisclazz, element), { group_info_ptr : &var_info }, AP_PARAM_FLAG_POINTER | AP_PARAM_FLAG_INFO_POINTER }
|
#define AP_SUBGROUPVARPTR(element, name, idx, thisclazz, var_info) { name, AP_VAROFFSET(thisclazz, element), { group_info_ptr : &var_info }, AP_PARAM_FLAG_POINTER | AP_PARAM_FLAG_INFO_POINTER, idx, AP_PARAM_GROUP }
|
||||||
|
|
||||||
#define AP_GROUPEND { AP_PARAM_NONE, 0xFF, "", 0, { group_info : nullptr } }
|
#define AP_GROUPEND { "", 0, { group_info : nullptr }, 0, 0xFF, AP_PARAM_NONE }
|
||||||
#define AP_VAREND { AP_PARAM_NONE, "", 0, nullptr, { group_info : nullptr } }
|
#define AP_VAREND { "", nullptr, { group_info : nullptr }, 0, 0, AP_PARAM_NONE }
|
||||||
|
|
||||||
enum ap_var_type {
|
enum ap_var_type {
|
||||||
AP_PARAM_NONE = 0,
|
AP_PARAM_NONE = 0,
|
||||||
|
@ -168,8 +168,6 @@ public:
|
||||||
// program in setup() to give information on how variables are
|
// program in setup() to give information on how variables are
|
||||||
// named and their location in memory
|
// named and their location in memory
|
||||||
struct GroupInfo {
|
struct GroupInfo {
|
||||||
uint8_t type; // AP_PARAM_*
|
|
||||||
uint8_t idx; // identifier within the group
|
|
||||||
const char *name;
|
const char *name;
|
||||||
ptrdiff_t offset; // offset within the object
|
ptrdiff_t offset; // offset within the object
|
||||||
union {
|
union {
|
||||||
|
@ -178,11 +176,11 @@ public:
|
||||||
const float def_value;
|
const float def_value;
|
||||||
};
|
};
|
||||||
uint16_t flags;
|
uint16_t flags;
|
||||||
|
uint8_t idx; // identifier within the group
|
||||||
|
uint8_t type; // AP_PARAM_*
|
||||||
};
|
};
|
||||||
struct Info {
|
struct Info {
|
||||||
uint8_t type; // AP_PARAM_*
|
|
||||||
const char *name;
|
const char *name;
|
||||||
uint16_t key; // k_param_*
|
|
||||||
const void *ptr; // pointer to the variable in memory
|
const void *ptr; // pointer to the variable in memory
|
||||||
union {
|
union {
|
||||||
const struct GroupInfo *group_info;
|
const struct GroupInfo *group_info;
|
||||||
|
@ -190,6 +188,8 @@ public:
|
||||||
const float def_value;
|
const float def_value;
|
||||||
};
|
};
|
||||||
uint16_t flags;
|
uint16_t flags;
|
||||||
|
uint16_t key; // k_param_*
|
||||||
|
uint8_t type; // AP_PARAM_*
|
||||||
};
|
};
|
||||||
struct ConversionInfo {
|
struct ConversionInfo {
|
||||||
uint16_t old_key; // k_param_*
|
uint16_t old_key; // k_param_*
|
||||||
|
|
Loading…
Reference in New Issue