私は2つの配列を持っています。そして、他の配列の値のいくつかに従って、配列の1つを更新しているmain内の関数を呼び出しています。
volatile float32_t raw_data[3]; //this is being updated by an interrupt handler
void get_acc(int32_t* acc_data, float32_t* raw_data)
{
acc_data[0] = (raw_data[0] - OFFSETX)/SENSX; //OFFSETX and SENSX defined as a macro
acc_data[1] = (raw_data[1] - OFFSETY)/SENSY;
acc_data[2] = (raw_data[2] - OFFSETZ)/SENSZ;
}
int main()
{
int32_t acc_data[3];
int32_t data_ready = 0; //being updated by interrupt handler
while(1)
{
if(data_ready)
get_acc(acc_data,raw_data);
}
}
私の絶対的なショックに、ブレークポイントを使用して get_acc をステップスルーする変数を見ると、最初の acc_data[0] のみが更新され、他のすべては実行されても 0 に設定されます。今私の最初の疑惑は、おそらくアドレスが適切に更新されていないポインタに関連するものです。手動ではなく、 for ループ内で配列インデックスを更新した場合と同じように、配列を渡すことを使用したためです。誰が何が間違っているのか洞察を与えることができますか?