ZynqMp Sysmon 记录

cpp 复制代码
#include <cstdint>
#include <fcntl.h>
#include <fstream>
#include <iostream>
#include <regex>
#include <string>
#include <unistd.h>

#define SENSOR_PATH "/sys/bus/iio/devices/iio:device0/"

#define XSysMonPsu_RawToTemperature_OnChip(AdcData)                            \
  ((((float)(AdcData) / 65536.0f) / 0.00196342531f) - 280.2309f)

#define XSysMonPsu_RawToVoltage(AdcData)                                       \
  ((((float)(AdcData)) * (3.0f)) / 65536.0f)

int SysMonPsuFractionToInt(float FloatNum) {
  float Temp;
  Temp = FloatNum;
  if (FloatNum < 0) {
    Temp = -(FloatNum);
  }
  return (((int)((Temp - (float)((int)Temp)) * (1000.0f))));
}
int32_t main(int32_t argc, char *argv[]) {
  if (argc != 2) {
    return -2;
  }
  std::string sensor = std::string(SENSOR_PATH) + std::string(argv[1]);
  if (access(sensor.c_str(), F_OK) != 0) {
    printf("ERR:%s %s\n", strerror(errno), argv[1]);
    return 1;
  }
  std::regex reg1("(.*)temp(.*)");
  std::ifstream ifs;
  char temp[32];
  std::string device;
  float t;
  ifs.open(sensor);
  ifs >> temp;
  if (std::regex_match(temp, reg1)) {
    t = XSysMonPsu_RawToTemperature_OnChip(strtol(temp, NULL, 10));
    printf("%s:%d.%d\n", argv[1], (int)t, SysMonPsuFractionToInt(t));
  } else {
    t = XSysMonPsu_RawToVoltage(strtol(temp, NULL, 10));
    printf("%s:%d.%d\n", argv[1], (int)t, SysMonPsuFractionToInt(t));
  }
  return 0;
}
相关推荐
kaico20182 分钟前
ConcurrentHashMap源码分析
java
虫小宝3 分钟前
企业微信API接口对接中Java后端的模拟测试(Mock)与单元测试实战技巧
java·单元测试·企业微信
Tim_Van6 分钟前
彻底解决:80 端口 GET/POST 正常,PUT 却报 ERR_CONNECTION_RESET?
java·vue.js·spring boot·ruoyi·若依
元媛媛8 分钟前
UiPath |5个基础自动化场景
android·java·自动化
Codeking__10 分钟前
Redis的value类型及编码方式介绍——hash
redis·算法·哈希算法
独自破碎E10 分钟前
Spring AI怎么实现结构化输出?
java·人工智能·spring
h7ml10 分钟前
企业微信API接口对接系统中Java后端的持续集成/持续部署(CI/CD)落地技巧
java·ci/cd·企业微信
星火开发设计11 分钟前
C++ multimap 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
u01040583612 分钟前
企业微信通讯录同步服务的增量更新与冲突解决算法
算法·企业微信
码农水水15 分钟前
阿里Java面试被问:RocketMQ的消息轨迹追踪实现
java·开发语言·windows·算法·面试·rocketmq·java-rocketmq