C ++程序问题:抛出'std :: invalid_argument'实例后终止调用

时间:2019-09-24 13:53:07

标签: c++

我开发了一个代码,试图通过我的SAMA5D27嵌入式板上的用户按钮(PIN 29)来操纵红色led(PIN 10)。

这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include "/home/gaston/linux4sam/poky/build-microchip/tmp/sysroots-components/cortexa5hf-neon/mraa/usr/include/mraa.hpp"

#define red 10
#define USER 29

bool running = true;
bool led_state = false;
int last_touch;
void sig_handler(int signo)
{
    if (signo == SIGINT)
        running = false;
}

int main(int argc, char* argv[])
{
    mraa::Result ret;
    int touch;

    mraa::Gpio* touch_gpio = new mraa::Gpio(USER);
    if (touch_gpio == NULL){
        return mraa::ERROR_UNSPECIFIED;
    }
    mraa::Gpio* led_gpio = new mraa::Gpio(red);
    if (led_gpio == NULL){
        return mraa::ERROR_UNSPECIFIED;
    }

    signal(SIGINT, sig_handler);

    if ((ret = touch_gpio->dir(mraa::DIR_IN))!= mraa::SUCCESS){
        return ret;
    }
    if ((ret = led_gpio->dir(mraa::DIR_OUT))!= mraa::SUCCESS){
        return ret;
    }

    led_gpio->write(led_state);

    while (running) {
        touch = touch_gpio->read();
        if (touch == 1 && last_touch == 0) {
            led_state = !led_state;
            ret = led_gpio->write(led_state);
            usleep(100000);
        }
        last_touch = touch;
        usleep(1);
    }
    delete led_gpio;
    delete touch_gpio;
    return ret;
}

编译后,我尝试执行代码,但它显示了以下消息:

  在抛出'std :: invalid_argument'实例后调用

terminate

     

what():指定了无效的GPIO引脚

     

中止

这是怎么回事,我该如何解决该问题?

1 个答案:

答案 0 :(得分:-1)

此行可能存在问题:

mraa::Gpio* touch_gpio = new mraa::Gpio(USER);

您的Rasberry Pi的密码为29。检查Rasberry Pi版本的文档。不是引脚号,而是GPIO号。