JSON設定ファイルで定義されている多くのmodbusデバイスを扱うための汎用アプリケーションを作成します。 mbus_servers my_modbus_init()の内容で使用されるstructは、デバイスとポートのipです。mallocの使い方
my_modbus_initで1 modbus_tの初期化()次のようになります。
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;
}
今私はmodbus_tのdynamiclly割り当てられた数を初期化しよう:
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}’
}
をできるだけ多くmodbus_tを作成する方法はあります必要に応じてmallocを使用しますか?代わりmodbus_t
オブジェクトの配列を有する
@SHG、その後のsizeofは、あまりにも動作します。 – tilz0R
@ tilz0R必ずしもそうではありません。それは前方宣言しか持たないかもしれない。 typedefは知られていますが、元の構造体が分かっていないためサイズがわかりません。 – SHG