我有一个课程,我有两个功能如下;
// Function to calculate the sum and average temperature
float read_samples(float *data, int num_samples)
{
float sum = 0.0;
float average = 0.0;
for(int i = 1; i < num_samples; i++ ) {
data[i] = temperature.read();
sum = sum + data[i];
wait(1);
}
average = sum / (num_samples - 1);
return average;
}
// Main Function that is called on running the application
int main()
{
int num_samples = 12 / 1;
float data[num_samples];
//sw.fall(read_samples(data, num_samples));
while(1) {
wait(12);
float result = read_samples(data, num_samples);
lcd.printf("%.2f\n", result);
//data[0];
}
}
当我打电话给“等待(12);”在Main中的方法,我希望代码同时在等待时执行“read_samples”方法,并且当“read_samples”完成时返回计算的值,然后继续在Main函数中显示计算结果。计算应该在12秒内等待。
但是,现在发生的事情是在等待的12秒内没有执行任何执行,因此在等待12秒之后它会调用“read_samples”方法并执行另外11秒。因此,显示下一个结果所花费的总时间是(12 + 11)23秒。请问,在12秒等待期间,如何编写代码来执行“read_samples”方法?
您可以在单独的线程中运行read_samples
。例如。:
static float average = 0.0f;
// Function to calculate the sum and average temperature
void read_samples()
{
int num_samples = 12 / 1;
float data[num_samples];
float sum = 0.0;
for(int i = 1; i < num_samples; i++ ) {
data[i] = temperature.read();
sum = sum + data[i];
wait(1);
}
average = sum / (num_samples - 1);
}
// Main Function that is called on running the application
int main()
{
//sw.fall(read_samples(data, num_samples));
while(1) {
Thread sampleThread;
sampleThread.start(&read_samples);
wait(12);
lcd.printf("%.2f\n", result);
//data[0];
}
}
你想要通过average
保护访问Mutex。