2

我正在尝试在 Raspberry Pi 中为 RCSwitch 实现一个 java 包装器。它工作正常,直到抓取方法达到第 80 次迭代。然后它变慢了,我不知道为什么。返回值需要 5 分钟以上。我试图找出问题所在,但我并没有内存不足,覆盆子仍然有超过 300 兆。尽管如此,我还是尝试使用以下参数运行 JVM:-Xms5m -Xmx5m但程序在第 80 次迭代时仍然变慢,所以我认为这不是内存问题。我的发件人仍然发送该值,因为如果我重新启动程序,它会再次工作,直到第 80 次迭代,所以这不是缺少输入数据。

这是代码的java部分:

public class RCSwitchWrapper {
    public native int recievedValue(int PIN);
    static{System.loadLibrary("RCSwitchWrapper");}

    public static void main(String[] args){
        RCSwitchWrapper wrapper = new RCSwitchWrapper();
        int counter=0;
        while(true){
            counter++;
            int grabbedData = wrapper.recievedValue(2);
            System.out.println(counter+" grabbed data: "+grabbedData);
        }
    }
}

代码的 C++ 部分:

#include "RCSwitch.h"
#include "RCSwitchWrapper.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

RCSwitch mySwitch;
JNIEXPORT jint JNICALL Java_RCSwitchWrapper_recieveValue(JNIEnv *env, jobject obj,jint PIN){
    if(wiringPiSetup()==-1){
        printf("wiringpi error \n");
        return 0;
    }
    mySwitch = RCSwitch();
    mySwitch.enableReceive(PIN);
    while(1){
        if(mySwitch.available()){
            int value = mySwitch.getReceivedValue();
            return value;
        }
        mySwitch.resetAvailable();
        return(-1);        
    }
} 

现在我很困惑,想不出解决办法。

提前致谢。

4

0 回答 0