qq_42048208 2020-03-30 16:15
浏览 170

linux 该如何检测板子掉电

1.板子掉电,系统可检测出掉电,并且可以写入日志,但是检测掉电对应的IO口文件一直是高电平,感觉低电平信息还在缓冲,read读文件读不到,该用什么方法可以读到缓冲内的东西

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <fcntl.h> 
#include <termios.h> 
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/types.h> 
#include <linux/if.h>
#include <syslog.h>

const char GPIO_FILE[] = "/sys/class/gpio/export";

int opengpio(int sum)
{   char ss[10];
    sprintf(ss,"%d",sum);
    int fd1=open(GPIO_FILE, O_WRONLY);
    //O_WRONLY|O_SYNC|O_RSYNC|O_DIRECT
    if(fd1<0)
    {
        perror("open fail");
        return 0;
    } 
    write(fd1,ss,strlen(ss));
    close(fd1);
    return 0;
}


int main(int argc, char const *argv[])
{
    int powser=53;
    char gpio2[50]={0};
    char buffer[5]={0};
    char oldbuffer[5]={0};
    int flag=0;
    FILE * fp;

    sprintf(gpio2,"/sys/class/gpio/gpio%d/value",powser);
    opengpio(powser);
    int fd3;
    while(1)
    {

    sync();
    fd3=open(gpio2, O_RDONLY|O_SYNC|O_RSYNC|O_NOCTTY|O_NONBLOCK); 
    int ret=read(fd3,buffer,sizeof(buffer));
    //  fp=popen("cat /sys/class/gpio/gpio53/value","r");
    //  fgets(buffer,sizeof(buffer),fp);
     printf(" bufffer=%s\n ",buffer);
     // printf(" buf=%s\n ",buf);
      if (strcmp(buffer,oldbuffer)==0)
      {
          continue;
      }
      else
      {
      if(buffer[0]=='1')
       {
         sleep(0.001);
         int ret=read(fd3,buffer,sizeof(buffer));
         if(buffer[0]=='1')
        {
        openlog("power status:",LOG_CONS|LOG_PID,LOG_LOCAL0);
        syslog(LOG_ERR,"Power UP\n");
        printf("Power UP\n");
        }
       }
      else if(buffer[0]=='0')
       {
         printf("Power DOWN\n");
         openlog("power status:",LOG_CONS|LOG_PID,LOG_LOCAL1);
         syslog(LOG_ERR,"Power DOWN\n");
       }
      }

    strcpy(oldbuffer,buffer);
    sleep(0.001);
   // pclose(fp);
     close(fd3);
    }


    return 0;
}


结果读掉电对应的IO口文件,掉电的低电平read一直都不到,用命令cat可以读到对应的低电平,用什么办法可以使read也读到io口的低电平

  • 写回答

0条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 这个程序哪里有问题呢,显示0分
      • ¥15 我想问一下像图片中这种效果怎么实现
      • ¥20 关于#vue.js#的问题:el-tag拖放到 el-input框时无法完成填充(语言-javascript)
      • ¥15 python小游戏飞机大战空格发射子弹报错,添加旋转代码后陨石一直变大,不知道哪里出错了
      • ¥50 QT websocket·
      • ¥15 配置LED用PWM波点亮,但是LED与LCD的引脚复用问题导致PWM无法使能
      • ¥15 Python如何进行分数的求和
      • ¥15 prophet 在进行fit时报错
      • ¥60 共享充电宝程序想要一个
      • ¥15 求:支付宝旧版接口文档