質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

1378閲覧

Raspberry Pi Pico のC++コードに std::cin を入れると認識しなくなる

iFQ7Vj

総合スコア52

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2023/01/13 05:04

編集2023/01/13 05:33

前提

Raspberry Pi Pico でUSBシリアル通信をしたいのですが、
std::cin を入れてビルドしたuf2ファイルを書き込むと Raspberry Pi Pico が認識できなくなりました。
具体的には、BOOTSELを押しながらpcと接続するとUSBデバイスとして検出され、正常に動作します。
ただ、上記のuf2ファイルを書き込むと、接続をしても一切の反応がありません。

実現したいこと

入力した内容をそのまま返す

該当のソースコード

C++

1#include <iostream> 2#include <string> 3#include "pico/stdlib.h" 4 5int main() { 6 stdio_init_all(); 7 while (1) { 8 std::string str; 9 std::cin >> str; // 問題箇所 10 std::cout << str << std::endl; 11 } 12 return 0; 13}

試したこと

ソースコード内の問題箇所を消すと正しく認識されました。

補足情報(FW/ツールのバージョンなど)

Chromebook Linux仮想環境
Pico SDK
CMake 3.18.4
g++ 10.2.1 (Debian 10.2.1-6)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/01/13 05:15

認識できなくなる、ってのが意味不明です 具体的に何がどうなるのか説明しましょう
dameo

2023/01/13 05:20

ArduinoではなくPico SDKを使用されていると仮定して、CMakefileが pico_enable_stdio_usb(xxxxxx 1) と記述されている場合、標準出力はUSBシリアル経由になります。 なので、標準出力を使うとホスト側からはUSBシリアル(CDC)として認識されるかと思います。
iFQ7Vj

2023/01/13 05:25 編集

>> 認識できなくなる、ってのが意味不明です 説明不足でした、申し訳ありません。 具体的には、BOOTSELを押しながらpcと接続するとUSBデバイスとして検出され、正常に動作します。 ただ、上記のuf2ファイルを書き込むと、接続をしても一切の反応がありません。
y_waiwai

2023/01/13 05:26

質問文は編集できるので、そっちの方に追記しましょう
iFQ7Vj

2023/01/13 05:30

Pico SDK を使用しています。 また、CMakeLists.txtは pico_enable_stdio_usb(project_name 1) pico_enable_stdio_uart(project_name 0) のように記述しています >> 標準出力を使うとホスト側からはUSBシリアル(CDC)として認識されるかと思います。 標準出力のみの場合正しく認識され、シリアル通信ができていますが、標準入力(std::cin)を含むものだと認識しなくなります
iFQ7Vj

2023/01/13 09:14 編集

なるほど、、 ドキュメント読んでCでも試して来ます。 ありがとうございます。
guest

回答1

0

自己解決

Pico SDK の getchar_timeout_us 関数を用いて stdin 用の関数を自作して解決しました
コメントしてくださった方々、ありがとうございました

投稿2023/01/30 14:37

編集2023/01/30 14:37
iFQ7Vj

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問