私はmbedプラットフォームにrtosライブラリを使用しています。スレッドにジャンプして、一定の速度で特定の値をインクリメントし、終了したらスレッドを閉じることができるようにしたいと思います。問題は、mbedRTOSライブラリからスレッドを実装するメソッドがconst void *
引数を取ることしかできないことです。これは、float値の配列を送信する必要があることを除いて、大したことではありません。これらの値の1つは、インクリメントする必要のある値へのポインター(*joint
)であり、他の値は、単純にconst
範囲と速度を制御するものです。インクリメント。私はそれを制御していると思い、適切にキャストするためのコードをここに見つけましたが、それでも0の値を考え続けています://float (*vals)[4] = (float (*)[4])args;
これがコードで、スレッド作業に関与する2つの関数だけに切り詰められています。
void increment( void const *args ) { //float *joint, float inc, float target, int speed )
//float (*vals)[4] = (float (*)[4])args;
float *vals = (float* )args;
// joint is the outside value I want to increment
float *joint = &vals[0];
float inc = vals[1];
float target = vals[2];
int speed = (int)vals[3];
float start = 0.5;
if( inc < 0 )
for( *joint = start; *joint > target; *joint+=inc ) {
wait( 0.1 / speed );
}
}
void thread_inc( float *joint, float inc, float target, int speed ){
float args[4] = { *joint, inc, target, (float)speed };
//Thread move( increment, args );
Thread move( increment, &args );
return;
}
私を正しい方向に向ける何かを前もってありがとう!