我正在为 mbed 平台使用 rtos 库。我希望能够跳入线程,以恒定速率递增某个值,然后在结束时关闭线程。问题是从 mbed RTOS 库中实现 Thread 的方法只能接受一个const void *
参数。这没什么大不了的,除非我需要向它发送一个浮点值数组,其中一个值是指向我需要递增的值的指针(*joint
),而其他值可以简单地const
控制范围和速度增量。我以为我已经控制住了,并在这里找到了一些可以正确转换的简洁代码,但我仍然不断提出 0 值://float (*vals)[4] = (float (*)[4])args;
下面是代码,只剩下参与线程工作的两个函数。
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;
}
提前感谢您为我指明正确方向的任何事情!