Gettimeofday вычисляет время выполнения со случайными значительными отклонениями?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Gettimeofday вычисляет время выполнения со случайными значительными отклонениями?

Сообщение Anonymous »

Я использую gettimeOfday для расчета времени выполнения кода и считаю, что timer должен быть примерно равен timer1+timer2. Однако во время моего тестирования были случаи, когда timer намного больше, чем timer1+timer2. В чем причина этого?
timer1 = 8242 us
timer2 = 440 us
timer = 95027 us

код:
#include "spidev.h"
#include
#include

int SpiDevFd = 0;

struct _SPI_Settings spi_settings;

uint8_t tx[256] = {0};
uint8_t rx[256] = {0};

int ReadData(int fd)
{
int ret = 0;
char ch = 0;

struct timeval start1;
struct timeval end1;
unsigned long timer1 = 0;
gettimeofday(&start1, NULL);
ret = read(fd, &ch, sizeof(ch));
gettimeofday(&end1, NULL);
timer1 = 1000000 * (end1.tv_sec - start1.tv_sec) + end1.tv_usec - start1.tv_usec;
printf("timer1 = %ld us\n", timer1);

ret = read(fd, &ch, sizeof(ch));
if (ret) {
struct timeval start2;
struct timeval end2;
unsigned long timer2 = 0;
gettimeofday(&start2, NULL);
TransferSpi(SpiDevFd, &spi_settings, tx, sizeof(tx), rx);
gettimeofday(&end2, NULL);
timer2 = 1000000 * (end2.tv_sec - start2.tv_sec) + end2.tv_usec - start2.tv_usec;
printf("timer2 = %ld us\n", timer2);
hex_dump(rx, ARRAY_SIZE(rx), 32, "RX");
return 0;
}
exit(-1);
return 0;
}

int main() {
int fd = open("/dev/spiio0", O_RDONLY);
if (fd < 0) {
perror("Failed to open GPIO value file\n");
return 1;
}

for (int i = 0; i max) {
max = timer;
if (max > 25000) {
printf("max ===%ld\n", max);
exit(-1);
}
}
if (timer < min) {
min = timer;
}
}
printf("max=%ld us,min=%ld us, avg= %ld us\n", max, min, avg/testCnt);

close(fd);
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... deviations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сделать sysctl и gettimeofday потокобезопасными в Swift?
    Anonymous » » в форуме IOS
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Автоматическая верстка таблицы CSS с отклонениями отдельных столбцов
    Гость » » в форуме CSS
    0 Ответы
    8 Просмотры
    Последнее сообщение Гость
  • NSwag создает JSON со случайными именами классов.
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Заполнение начального состояния случайными локациями для «Игры жизни Конвея» [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Шорткод Woocommerce – включить идентификаторы продуктов – заполнить остальные случайными значениями
    Anonymous » » в форуме Php
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»