Я использую 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
Gettimeofday вычисляет время выполнения со случайными значительными отклонениями? ⇐ Linux
1710473935
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78164530/gettimeofday-calculates-the-runtime-with-occasional-significant-deviations[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия