问答
直播中

jackeyt

10年用户 283经验值
擅长:EMC/EMI设计 嵌入式技术 控制/MCU MEMS/传感技术 嵌入式技术
私信 关注

【MYS-6ULX-IOT试用体验】3、Linux C编程之查询CPU温度

本帖最后由 jackeyt 于 2017-7-20 09:52 编辑

【MYS-6ULX-IOT试用体验】试用目录:
1、【MYS-6ULX-IOT试用体验】1、开箱上电

2、【MYS-6ULX-IOT试用体验】2、加载WIFI驱动并连接网络


0 前言
    本文通过文件操作读取MYS-6ULX-IOT开发板CPU温度,在linux系统中任何设备的操作都被抽象成为文件读写,通过读取/sys/class/thermal/thermal_zone0/temp文件中的内容便获得MYS-6ULX-IOT开发板的CPU温度。
   本文通过以下几个部分说明如何读取和应用该温度参数——1、shell脚本操作;2、linux文件IO操作


1、shell操作
    先通过shell操作热身一下。登录MYS-6ULX-IOT开发板之后使用指令查看CPU温度,依次输入以下指令:
    # 进入目录
    cd /sys/class/thermal/thermal_zone0
    # 查看温度
    cat temp
    # MYS-6ULX-IOT开发板返回
    48692
    从以上操作可以获得以下几点
    【1】CPU温度信息位于文件 /sys/class/thermal/thermal_zone0/temp中,该文件为一个只读文件。
    【2】根据网上的资料和实际情况,返回的温度参数应该除以1000,单位为摄氏度。

2、C语言文件IO操作
    新建一个名为temp.c文件,文件的具体内容如下:
  1. #include   
  2. #include    
  3.   
  4. #include   
  5. #include   
  6. #include   
  7.   
  8. #define TEMP_PATH "/sys/class/thermal/thermal_zone0/temp"  
  9. #define MAX_SIZE 32  
  10. int main(void)   
  11. {  
  12.     int fd;  
  13.     double temp = 0;  
  14.     char buf[MAX_SIZE];  
  15.       
  16.     // 打开/sys/class/thermal/thermal_zone0/temp  
  17.     fd = open(TEMP_PATH, O_RDONLY);  
  18.     if (fd < 0) {  
  19.         fprintf(stderr, "failed to open thermal_zone0/tempn");  
  20.         return -1;  
  21.     }  
  22.       
  23.     // 读取内容  
  24.     if (read(fd, buf, MAX_SIZE) < 0) {  
  25.         fprintf(stderr, "failed to read tempn");  
  26.         return -1;  
  27.     }  
  28.       
  29.     // 转换为浮点数打印  
  30.     temp = atoi(buf) / 1000.0;  
  31.     printf("当前温度: %.2fn", temp);  
  32.       
  33.     // 关闭文件  
  34.     close(fd);  
  35. }


2.1、编译
  1. arm-linux-gnueabifh-gcc -o temp temp.c


2.1、效果图       实际效果如下图所示:
temp.png




更多回帖

发帖
×
20
完善资料,
赚取积分