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

    报告相同问题?

    悬赏问题

    • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥30 用arduino开发esp32控制ps2手柄一直报错
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题
    • ¥15 Visual Studio问题