首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jetson Nano温度C

Jetson Nano温度C
EN

Stack Overflow用户
提问于 2020-06-27 01:47:49
回答 1查看 1.7K关注 0票数 0

关于这段在jetson nano上运行的代码,我有几个问题:

代码语言:javascript
运行
复制
#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"

float gputemp = 0;
float cputemp = 0;
int count = 0;

int main() {
    char* cpu;
    char* gpu;
    cpu = (char*)malloc(sizeof(char)*6);
    gpu = (char*)malloc(sizeof(char)*6);
    

    while (1) {
        FILE* fcputemp = fopen("/sys/devices/virtual/thermal/thermal_zone1/temp", "r");
        FILE* fgputemp = fopen("/sys/devices/virtual/thermal/thermal_zone2/temp","r");
        if (!fcputemp || !fgputemp ) {
            printf("Something went wrong\n");
            exit(EXIT_FAILURE);
        }
        
        cputemp = atoi(fgets(cpu, 6, fcputemp))/1000;
        gputemp = atoi(fgets(gpu, 6, fgputemp))/1000;
        
        printf("\rCpu : %.2f, Gpu : %.2f. Elapsed time : %d", cputemp, gputemp, count);
        fflush(stdout);
        
        fclose(fcputemp);
        fclose(fgputemp);
        
        count++;
        sleep(1);
    }
}

在这里,我必须打开,获取温度,然后在每次循环迭代时关闭文件,以便获得有效数据(而不是段错误)。这里我关心的是执行此操作所需的(昂贵的)内核开关的数量。

我知道过早优化是不好的,但是有另一种方法(或者可能是正确的方法)来做到这一点,只打开文件一次?

如果我打开了传感器接口(文件),为什么它不能自动更新?

附言:是的,我知道,我没有释放cpu或gpu变量,这只是一个“演示”代码(看看我是如何测量时间的)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-27 02:40:01

我不确定你能不能只打开文件一次。你可以试着倒带,但是sysfs不是一个“真正的”文件系统,那些也不是真正的文件。如果倒带,可能会一次又一次地获得相同的数据,特别是在使用像fopen()这样的缓冲调用时。

open操作是为读取数据做准备的操作。因为这一切都是由内核管理的,所以它的开销应该很小,并且没有实际的磁盘活动。考虑到像top这样的程序每秒读取数千个这样的内容,这并不是什么大问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62600243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档