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

C++ program issue : terminate called after throwing an instance of 'std::invalid_argument'

本文关键字:实例 argument 终止 调用 invalid 问题 程序 C++ std 抛出      更新时间:2023-10-16

我开发了一个代码,我试图用它来通过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"实例后终止调用

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

中止

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

可能这一行有问题:

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

您的树莓派没有 29 作为引脚编号。查看树莓派版本的文档。它不是引脚编号,而是 GPIO 编号。