c++ - C++ 程序问题:在抛出 'std::invalid_argument' 的实例后调用终止
问题描述
我开发了一个代码,我试图用它来通过我的 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);
您的 Rasberry Pi 没有 29 作为密码。检查 Rasberry Pi 版本的文档。它不是引脚编号,而是 GPIO 编号。
推荐阅读
- java - 在 java 中通过 FileWriter 分隔新行
- apache-spark - 如何从 Apache Spark 写入 HDF5 文件?
- sql - 从多个用户到 sql 数据库的 Outlook 日历数据(交换服务器)
- elasticsearch - 无法在 Filebeat 中为 Elasticsearch 索引设置模板
- python - 为什么我的 tweepy 机器人喜欢我自己的推文而不喜欢指定的用户 ID?
- javascript - 必须根据改变 js 变量的 props 渲染一个反应组件
- c++ - ulimit -c unlimited 在c++分段错误中不生成核心文件
- maven - 当我们将空手道项目与 docker 映像一起使用时,有没有办法避免一次又一次地重新下载 maven 依赖项?
- javascript - 是否可以扩展 typescript 类以访问 GraphQL 中 InputType 和 ObjectType 的相同属性?
- javascript - ReferenceError:使用 Mocha 时未定义 $