Я пытаюсь написать код c, в котором некоторые числовые вычисления, содержащие производные по времени, должны выполняться в режиме динамической системы в реальном времени. Для этой цели мне нужна максимально точная оценка времени от одного цикла к следующему в переменной с именем "dt":
static clock_t prev_time;
prev_time = clock();
while(1){
clock_t current_time = clock();
//do something
double dt = (double)(current_time - prev_time)/CLOCKS_PER_SEC;
prev_time = current_time;
}
Однако, когда я тестирую этот код, интегрируя (непрерывно добавляя) dt
, т.е.
static double elapsed_time = 0;
//the above-mentioned declaration and initialization in done here
while(1){
//the above-mentioned code is executed here
elapsed_time += dt;
printf("elapsed_time : %lf\n", elapsed_time);
}
Я получаю результаты, которые значительно ниже, чем реальность, с коэффициентом, который является постоянным во время выполнения, но, кажется, изменяется, когда я редактирую несвязанные части кода (он колеблется между 1/10 и примерно половиной фактического времени).
Мое текущее предположение состоит в том, что clock()
не учитывает время, необходимое для доступа к памяти (в нескольких местах кода я открываю внешний текстовый файл и сохраняю в нем данные для диагностики).
Но я не уверен, так ли это.
Кроме того, я не мог найти другой способ точно измерить время.
Кто-нибудь, почему это происходит?
РЕДАКТИРОВАТЬ: код компилируется и выполняется на Raspberry Pi 3, и используется для реализации контроллера обратной связи