Armadilloフォーラム

SWを使った処理について

yuutap

2015年8月5日 10時24分

おはようございます。
いつも大変お世話になっております。柿原です。

SW4を押したらLED1~6を2秒間点灯1秒間消灯という動作を行いたいのですが、
SW4を押しているか離してるかを判断させるC言語ソースコードがわかりません。
※他の処理を行っていてもSW4が押されたら最優先で処理をおこないたいです。

どなたか分かる方がいらっしゃいましたらよろしくお願い致します。

コメント

y.nakamura

2015年8月6日 1時10分

中村です。

> SW4を押したらLED1~6を2秒間点灯1秒間消灯という動作を行いたいのですが、
> SW4を押しているか離してるかを判断させるC言語ソースコードがわかりません。

840の拡張ボードのSW1~SW4とLED1~LED6の話ですよね?

マニュアルのここは読みましたか?
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

ここで使っているevtestというコマンドのソースは読みましたか?
atmark-dist-XXXX/user/evtest にあります。

それから、400シリーズになりますが、
atmark-dist-20141215/vendors/AtmarkTechno/Armadillo-4x0.Common/swmgr
のソースも参考になります。

なのですが・・・、どちらのソースもわかりやすいとは言えません。
簡単なサンプルを添付しますので、参考にしてください。
(昔書いて、ちょっとずつ手直ししながら、説明のためにあちこちにばら撒いているソースです)
(840のイベントコードに合わせていますが、イベントコード部分を変えれば400でも動きます)

LEDの説明はここにあります。
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

> ※他の処理を行っていてもSW4が押されたら最優先で処理をおこないたいです。

添付したサンプルプログラムはread()でブロックしますので、
このままでは他の処理と一緒に動かすことはできません。
for()ループの部分を別スレッドにするなどして、
並列処理の工夫をしてください。

それから「2秒間点灯1秒間消灯」というな処理は、
インターバルタイマを使ってやるといいです。

スレッドやインターバルタイマはArmadillo固有のものではなく、
Linuxの一般的な知識でプログラムを作ることができますので、
もしわからなければ、Linuxの参考書で勉強してください。

--
なかむら

ファイル ファイルの説明
gpiokeys_example.c gpiokeyイベント取得の簡単なサンプル

yuutap

2015年8月6日 9時10分

いつも大変お世話になっております。柿原です。

お忙しい中丁寧な回答ありがとうございました。
この回答を参考にSW処理をやっていきたいと考えております。

以上です。

> 中村です。
>
> > SW4を押したらLED1~6を2秒間点灯1秒間消灯という動作を行いたいのですが、
> > SW4を押しているか離してるかを判断させるC言語ソースコードがわかりません。
>
> 840の拡張ボードのSW1~SW4とLED1~LED6の話ですよね?
>
> マニュアルのここは読みましたか?
> http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
>
> ここで使っているevtestというコマンドのソースは読みましたか?
> atmark-dist-XXXX/user/evtest にあります。
>
> それから、400シリーズになりますが、
> atmark-dist-20141215/vendors/AtmarkTechno/Armadillo-4x0.Common/swmgr
> のソースも参考になります。
>
> なのですが・・・、どちらのソースもわかりやすいとは言えません。
> 簡単なサンプルを添付しますので、参考にしてください。
> (昔書いて、ちょっとずつ手直ししながら、説明のためにあちこちにばら撒いているソースです)
> (840のイベントコードに合わせていますが、イベントコード部分を変えれば400でも動きます)
>
> LEDの説明はここにあります。
> http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
>
> > ※他の処理を行っていてもSW4が押されたら最優先で処理をおこないたいです。
>
> 添付したサンプルプログラムはread()でブロックしますので、
> このままでは他の処理と一緒に動かすことはできません。
> for()ループの部分を別スレッドにするなどして、
> 並列処理の工夫をしてください。
>
> それから「2秒間点灯1秒間消灯」というな処理は、
> インターバルタイマを使ってやるといいです。
>
> スレッドやインターバルタイマはArmadillo固有のものではなく、
> Linuxの一般的な知識でプログラムを作ることができますので、
> もしわからなければ、Linuxの参考書で勉強してください。
>
> --
> なかむら
>