J'écris une application générique pour gérer autant de périphériques modbus que ceux définis dans le fichier de configuration JSON. mbus_servers struct utilisé dans my_modbus_init() contenu ip de l'appareil et du port.Comment malloc modbus_t
Initialisation d'un modbus_t dans my_modbus_init() ressemble à ceci:
modbus_t * my_modbus_init(const char * ip_s, int port, int slave_id)
{
modbus_t *ctx;
ctx = modbus_new_tcp(ip_s, port);
if(ctx == NULL)
{
printf("Error");
}
modbus_set_debug(ctx, 0);
if (modbus_connect(ctx) == -1)
{
fprintf(stderr, "Connection failed: %s\n",modbus_strerror(errno));
modbus_free(ctx);
return NULL;
}
modbus_set_slave(ctx, slave_id);
return ctx;
}
Maintenant, j'essaie d'initialiser dynamiclly attribué le numéro de modbus_t:
modbus_t * my_modbus;
int quantity_of_connections_modbus = 3;
my_modbus = (modbus_t *) malloc (quantity_of_connections_modbus * sizeof(modbus_t));
^here I get invalid application of ‘sizeof’ to incomplete type ‘modbus_t' (I know that is because i dont have acces to definition of modbus_t [it is defined in modbus.h as typedef struct _modbus modbus_t; ])
for(i=0; i< quantity_of_connections_modbus; i++)
{
// |> my_modbus[i] = my_modbus_init(mbus_servers[i]->host,mbus_servers[i]->port,MBUS_SLAVE);
// |- And here error: dereferencing pointer to incomplete type ‘modbus_t {aka struct _modbus}’
}
Est-il possible de créer autant de modbus_t au besoin en utilisant malloc?
@SHG alors sizeof fonctionnerait aussi. – tilz0R
@ tilz0R Pas nécessairement. Il pourrait seulement avoir une déclaration avant. Ensuite, le typedef est connu mais pas sa taille, car la structure d'origine n'est pas connue. – SHG