問題は、別の (主要な) 構造体のメンバーである構造体があることです。最初の構造体をクリアする関数を作成しました (構造体へのポインターが必要です)。
その関数を使用して主要な構造内の構造体をクリアしたいのですが、どちらが正しい方法なのか正確にはわかりません。
それをよりよく説明するために、ここにいくつかのコードがあります:
次のように定義された構造があります。
typedef struct
{
unsigned char next;
unsigned char first;
unsigned long data[TCP_RX_BUFFER+1];
}struct_circ_buff;
そしてそれをクリアする関数:
void clearCircularBuffer(volatile struct_circ_buff *circular_buffer)
{
int i=0;
for(i=0;i<TCP_RX_BUFFER+1;i++)
circular_buffer->data[i]=0;
circular_buffer->first=0;
circular_buffer->next=0;
}
次に、次を含む別の構造体がありますstruct_circ_buff
。
typedef struct
{
volatile unsigned char sensorType;
volatile uint16_t sensorFlag;
volatile struct_circ_buff st_circular_buffer;
}struct_sens;
上記の関数を使用して、この構造体をきれいにする関数を書きたいと思いclearCircularBuffer
ます。どうすればそれができますか?
void clear_sensors_struc (volatile struct_sens *sensors_struct)
{
sensors_struct->sensorFlag=0;
sensors_struct->tipoSensor=0;
//NOW, HOW CAN I USE clearCircularBuffer to clean sensors_struct->
//st_circular_buffer??
//this way compiles fine, but i don´t think it´s correct
clearCircularBuffer(&(sensors_struct->st_circular_buffer));
//this way wouldn´t even compile
clearCircularBuffer(sensors_struct->st_circular_buffer));
}
最後に、次のように宣言された変数があります。
struct_sens struct_sensores[MAX_NUMBER_OF_SENSORS];
その構造体の配列を消去する関数を書きたいと思います...
clear_sensors_struc
では、どのように関数を使用してそれを行うことができますか?
void clear_sensors_struc_array(struct_sens *sensors_struct)
{
struct_sens aux_str[MAX_NUMBER_OF_SENSORS];
int i=0;
for(i=0;i<MAX_NUMBER_OF_SENSORS;i++)
{
clear_sensors_struc(&aux_str[i]);
*(sensors_struct+i)=aux_str[i];
}
}
内部 struct_sens aux_str を定義せずにそれを行う方法はありますか?