問題タブ [gpio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - c ++クラスのコンストラクターは、オブジェクトをイベントハンドラーに自動的にマッピングします
私は現在、ビーグルボーンの小さなプロジェクトに取り組んでいます。基本的な目標は、ビーグルボーンのストックjavaScriptフレームワークとは対照的に、c ++のフルパワーを提供するフレームワークを作成することですが、arduinoフレームワークと同じように開発者にとっても使いやすいものです。
私が構築したものの1つは、ボタンやロータリーエンコーダーなどのさまざまなタイプの単純なGPIO割り込み用の事前に作成されたクラスです。したがって、開発者はボタンを定義し、接続されているビーグルボーンのどのGPIOピンも指定する必要があります。
今のところ、割り込みオブジェクトのpollInterupt()関数をメインループに手動で追加して、プログラムが突然発生したGPIOピンの状態を繰り返しチェックできるようにする必要があります。
問題は次のとおりです。ボタンのクラスコンストラクター関数にコードを追加します。このコードを定義すると、バックグラウンドで割り込みハンドラーに自動的に渡され、新しいオブジェクトのpollInterupt()関数が繰り返し実行されるため、開発者はこれを行う必要がありません。ボタンを定義するよりも複雑なもの。
でもレンガの壁にぶつかっているようです。エンドユーザーにとってフレームワークをシンプルにしようとすることは、舞台裏のコードがばかげて複雑になっていることを意味します。定義された割り込みオブジェクトを自動的に処理することを考えることができる最良の方法は、リンクリストです。これは、現在のプロトタイプコードの外観です。
システムは機能しているようで、interuptButtonコンストラクターは新しく作成されたオブジェクトをinteruptHandlerのリンクリストに正常に渡します。このリンクリストは、run()関数のメモリアドレスを出力とともに出力できます。
問題は、run()の他の行のコメントを外すと、ポインタオブジェクトの変数または関数にアクセスしようとすると、g++がエラーをスローし始めることです。
最初の2行は次のようになります。
3行目は次のようになります。
それらのオブジェクトの変数と関数にそれらのポインターを介してアクセスする方法についてのアドバイスをいただければ幸いです。
さらに良いことに、舞台裏のイベントハンドラーにオブジェクトを自動的に送信するためのより良い方法があれば、私はすべての耳です。
linux - GPIO 信号を介してスリープ モードからのウェイクアップを有効にする
Angstrom OS を実行している BeagleBone デバイスを GPIO 信号でスリープ モードから復帰させる必要があります。
私はそれを使用することが方法であることを読みました/sys/class/gpio/gpioXX/power/wakeup
。問題は、power ディレクトリの下に「wakeup」ファイルがないことです。では、どのようにアクティベートすればよいのでしょうか? カーネルを再コンパイルせずに解決策はありますか?
GPIO 値から正常に読み取ることができるので、GPIO sysfs は機能しています。
microcontroller - UART ブレークを送信
RXD ピン (私の TXD) で 1 秒間 UART ブレークを必要とするチップと通信する必要があります。
ZW0301 コントローラーを使用していますが、その UART コントローラーはブレーク コマンドをサポートしていません。break コマンドをエミュレートすることはできますか? UARTコントローラーを無効にして(ピンをGPIOモードにする)、TXDを低くするだけで十分かもしれません。または、これは機能しませんか?
適切な説明へのリンクを歓迎します。
embedded - クレーンボードで GPIO を使用して LED を光らせる
GPIO を使用して、クレーンボード (ARM プロセッサ) の LED を点灯させたいと考えています。私は組み込みプログラミングに非常に慣れていません。しかし、私はCがかなり得意です。いくつかのWebサイトを参照し、GPIO関連のコマンドについて学びました。コードを書きましたが、それをクレーンボードの u-boot コーディングに統合する方法がよくわかりません。どこから始めればよいかわかりません。よろしくお願いします。
c - エラー:構造体が正しく定義されていません
私はビーグルボーンでいくつかのGPIOを実行しており、現在コードにこれが含まれています。
ここで、gpio#はすべて整数として定義されます。GPIOF_DIR_OUTとGPIOF_DIR_LOWは、「linux/gpio.h」内の関数です。
構造体は関数内で宣言されていません。これが私の問題だと思いますが、どのように間違っていると宣言されているのかわかりません。私はこれについて他のスレッドを見たことがありますが、私の問題を本当に助けたものは何もありません。問題は、構造内から関数を呼び出しているという事実だと思います。誰かがこれを確認するか、私がこれを修正するのを手伝ってくれるなら、それは素晴らしいことです。
linux-kernel - サスペンド/レジューム用のGPIO?
GPIOに関するドキュメントはほとんど読んでいませんが、 GPIOの最上位レベルの多重化をまだ理解できていません。
コードから、専用デバイスのいくつかのGPIO ( Int、Reset Pinsなど) が、その特定のドライバーのsuspend /*resume* コールバック中に多重化されていることがわかります。このgpio多重化が正確に何を行い、システムのサスペンド/*再開*にどのように影響するかを知りたいですか?
linux - プルアップ GPIO を有効にする
最大 32 のプログラム可能な I/O ラインを管理する 4 つの PIO コントローラーを備えた AT91SAM9G25 ボードを使用しています。各ピンは、汎用 I/O ラインのみとして、または最大 2 つのペリフェラル I/O を多重化した I/O ラインとして構成可能です。したがって、たとえば、ドキュメント ( SAM9G25、14 ページ) によると、信号 PC0 は、汎用 I/O ラインまたは VIDEO_ATMEL_ISI (イメージ センサー インターフェイスの ISI) の ISI_D0 ラインとして多重化できます。
すべての GPIO ラインのリセット状態は、IN 方向とプルアップが有効になっています。sysfs 経由で GPIOLIB を使用すると、プルアップが原因でいくつかの GPIO の INPUT として「1」の値が読み取られます。これは、複数のボードが他のペリフェラルと多重化できる場合、リセット時の GPIO (プルアップ抵抗付きの入力) の通常の安全な状態ですか? GPIOLIB を使用してユーザー空間を介してプルアップを無効にする方法がわかりません。たとえば、カーネルの起動時に、イメージ センサー ペリフェラルがカーネルまたはモジュールとして有効になっているかどうかを確認し、有効な場合は PC0 をペリフェラル B に設定します。これは /arch/arm/mach のカーネル ソースにあります。 -at91/at91sam9x5_devices.c
次に、カーネルで ISI サポートを有効にしない場合、PC0 信号を GPIO ラインとして使用できます。これは /sys/kernel/debug/gpio です。
これは /sys/kernel/debug/at91_gpio です
上記の出力は、PIOA0 がペリフェラル A (TXD0 UART ライン) に多重化されており、たとえば PIOC20 がクリアされていることを示していますが、ドキュメントによると、リセット状態のすべての GPIO ラインはプルアップ付きの入力であり、カーネルまたは u-boot が無効になっている場所が見つかりません。この GPIO のプルアップ (おそらく GPIO は、誰も彼のレジスターに触れない場合、その状態を維持しますか?)
しかし、彼の主な質問は、GPIO ラインのプルアップ レジスタをクリアするにはどうすればよいかということです。カーネル ソースで、 /arch/arm/mach-at91/at91sam9x5_devices.c が linux-2.6.39/arch/arm/mach-at91/gpio.c に実装されているこの関数を使用していることがわかりました。
ヘッダー arch/arm/mach-at91/include/mach/gpio.h
ツールチェーンでこの関数を使用するにはどうすればよいですか? またはカーネル モジュールを作成する必要がありますか?
ありがとう
PD: 私の英語に誤りがありましたら申し訳ありません。改善する必要があることは承知しています。
linux-kernel - Beaglebone の do_gettimeofday() で時刻が間違っている
Angstrom OS を実行している Beaglebone で方形波の期間を測定しようとしています。パルスのタイミングを計る ISR を登録するためのカーネル ドライバーを作成しました。すべて正常に動作していますが、測定されている時間間隔は完全に間違っています。do_gettimeofday() 関数を使用して時間を測定しています。poll() 関数を使用してユーザー空間プログラムで同じことを行うと、正しい値を得ることができます (1000us の波で約 1007us を示します) が、ドライバーを使用してパルスを測定すると、次のように間隔が得られます。 1923年。カーネルの時間間隔がユーザー空間の時間間隔よりも長い理由がわかりません。以下にコードを添付しました。誰かが私のプログラムの間違いを見つけてくれたら幸いです。
カーネル ISR:
ユーザー空間プログラム:
python - Python を使用してログ ファイルを解析し、Raspberry Pi で GPIO を使用して LCD に出力する
私はPythonが初めてなので、事前に許してください;-)既知の単語の後に常に発生する名前のログファイルを解析し、GPIOライブラリを使用してその名前をLCDに出力しようとしています。LCD が動作していて、特定のメッセージを出力できますが、Python を使用してログ ファイルを grep し、その情報を LCD に出力する方法がわかりません。どんな助けでも素晴らしいでしょう、ありがとう...
python - tkinter で遅延を使用する Python のアドバイス
tkinter を使用して RaspberryPi 上で実行され、LED の点灯などのさまざまなアクションを実行する GUI を作成しました。私が抱えている問題は、ルートを使用して LED のオンとオフを切り替えることです。time.sleep() を使用するかのようにスケジューリングした後、このスリープ中に GUI がフリーズします。これが私のコードです。以下では、time.sleep() を約 500 ミリ秒の遅延に置き換えたいと考えています。
ありがとう
これは1つの解決策ですが、非常に面倒です: