я ,s мог засунуть указатель в структуру принятой команды
typedef struct COMMAND_S
{
char *name; //command name
uint32_t command_type;
uint32_t minargs;
uint32_t maxargs;
uint32_t (*fp)(unsigned int, char **); //fuction poiner
//это я добавляю
uint32_t *vp; //variable pointer
}COMMAND;
я все равно инициализирую структуру команд. так я добавил бы указатель на переменную
COMMAND commands[] =
{
[0] = { "stop", 0, 1, MAX_ARGS, .fp = OneGlobFunc, .vp = NULL },
[1] = { "start", 0, 1, MAX_ARGS, .fp = OneGlobFunc, .vp = NULL },
[2] = { "fwd", 0, 1, MAX_ARGS, .fp = OneGlobFunc, .vp = NULL},
[3] = { "rev", 0, 1, MAX_ARGS, .fp = OneGlobFunc, .vp = NULL},
[4] = { "mot", 0, 1, MAX_ARGS, .fp = OneGlobFunc, .vp = NULL },
[5] = { "pfb", 0, 1, MAX_ARGS, .fp = OneGlobFunc, .vp = &mot_data.pfb},
[6] = { "ifb", 0, 1, MAX_ARGS, .fp = OneGlobFunc, .vp = &mot_data.ifb},
[7] = { "ftop", 0, 1, MAX_ARGS, .fp = OneGlobFunc .vp = &mot_data.fwd_max_pos },
[8] = { "rtop", 0, 1, MAX_ARGS, .fp = OneGlobFunc .vp = &mot_data.rev_max_pos}
};
ситуация несколько усложнилась. у меня мултиаксис поэтому массив структур mot_data[AXIS_NUM] . то есть мне надо инициализировать так
.vp = &mot_data[AXIS].pfb
проблема что AXIS передается аргументом в команде.
абсолютный адрес mot_data+(sizeof(mot_data)*array_index) + struct_member
то есть uint8_t *base_ptr = mot_data+(sizeof(mot_data)*array_index) - как мне динамически передать struct_member - base_ptr->struct_member