内存泄漏?接线pi

时间:2016-10-03 22:00:10

标签: c linux raspberry-pi wiringpi

我试图在Raspberry PI B +的gpio上使用CNY70和其他一些组件(包括比较器)读出我的水表。我这样做是使用接线pi中断并在上升和下降之间切换来处理错误的中断。我的程序包含一个奇怪的解决方法,但似乎工作。唯一的问题是它需要更多的vmem并在大约10个小时后停止工作。这很奇怪,因为我不在任何地方进行直接内存管理,整个事情包含69行代码。这是一个接线pi错误还是还有其他事情发生?

以下是整个计划:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <limits.h>
#include <sys/time.h>

void myInterrupt1(void);

void printtime(){
    char buffer[30];
    struct timeval tv;

    time_t curtime;

    gettimeofday(&tv, NULL); 
    curtime=tv.tv_sec;

    strftime(buffer,30,"%m-%d-%Y  %T.",localtime(&curtime));
    printf("%s%ld\n",buffer,tv.tv_usec);
    fflush(stdout);
}

void callJson(void){
    struct timeval tv;
    gettimeofday(&tv, NULL);
    int time = tv.tv_sec;
    static int timeprev = 0;

    if (time - timeprev > 1){
        timeprev = time;
        system("./watermeter.sh");
        printf("SEND!!!!\n");
        fflush(stdout);
    }
}


void myInterrupt0(void){
    if (digitalRead(1)==1){
        wiringPiISR(1, INT_EDGE_FALLING, &myInterrupt1);
        printf("rising\n");
        printtime();
        callJson();
    }
}

void myInterrupt1(void){
    if (digitalRead(1)==0){
        wiringPiISR(1, INT_EDGE_RISING, &myInterrupt0);
        printf("falling\n");
        printtime();
    }
}

int main (void){
    wiringPiSetup();
    if (digitalRead(1)==0){
        wiringPiISR(1, INT_EDGE_RISING, &myInterrupt0);
    }
    else{
        wiringPiISR(1, INT_EDGE_FALLING, &myInterrupt1);
    }
//  printtime();
    for(;;){
        sleep(UINT_MAX);
    }   
    return 0;
}

.watermeter.sh是一个bash脚本,用于处理调用Domoticz API。整个打印时间函数最初是为了研究双重和错误中断的问题,但这是一个已知的布线问题。

0 个答案:

没有答案