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

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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥200 uniapp长期运行卡死问题解决
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
    • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
    • ¥15 乘性高斯噪声在深度学习网络中的应用
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集