Armadilloフォーラム

C言語によるLEDの点灯について

ikeuchi

2014年6月29日 16時47分

お世話になります。
池内です。

Armadillo-840 液晶モデル開発セットを使用して拡張基板のLEDを点灯させようとしており、
コマンドラインからの操作で点灯させることはできるのですが、C言語でアプリケーションプログラム
を作成し、LEDを点灯させる際にプログラムの作り方がわかりません。

これまでは、OSを介さないマイコンのプログラミングを行ってきたので、直接ポートを設定してやれば
良かったのですが、OSが絡むとどういう書き方になるのかイメージができない状況です。

初歩的な質問で恐縮ですが、ご教授いただけますでしょうか?

コメント

izawa

2014年6月29日 17時40分

いつも様子見していると中村さんが回答されるのでたまには私も。

折角コマンドラインから点灯できるようにデバイスドライバができているのですから、
プログラミングも同じ要領でできます。
840のデバイス名は失念しましたが、概ね次のようなコードでいい筈です。
--
// 尚、echo 1 > /sys/class/.../brightness で点灯することを前提としています。
// デバイス名は適当に調整を。
// \param[in] onoff true: 点灯、 false: 消灯
void led(bool onoff)
{
FILE * fp = fopen("/sys/class/.../brightness", "r+");
fputc(onoff ? '1' : '0');
fclose(fp);
}
--
勿論、open/write/closeで書いても問題ないし、その方が効率はいいかもしれません。
パフォーマンスが要求されるのなら別ですが、LEDは見るのが人間なので問題ないかと思います。
要は、echoコマンドならファイル出力、catコマンドならファイル入力に置き換えればいいと言うことです。

y.nakamura

2014年6月29日 20時29分

中村です。

> いつも様子見していると中村さんが回答されるのでたまには私も。

いろんな人に出てきて欲しいです。
様子見をもうちょっと長くしようかなぁ~。

> 840のデバイス名は失念しましたが、概ね次のようなコードでいい筈です。

ですね。

Armadilloのドキュメントとしては、ここに説明があります。
実践ガイド第2部の中。
http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2…

brightnessを使わずにトリガを使ってタイマでON/OFFする
ようなときもやり方は同じ。
デバイスファイルをopen()やfopen()でオープンして、
write(),fwrite()などで値を出力すればOKです。

> パフォーマンスが要求されるのなら別ですが、LEDは見るのが人間なので問題ないかと思います。

私の場合、たまにしかON/OFFしないときは面倒なので、
system()でやってしまうこともあります。
system("echo 1 > /sys/class/leds/xxxx/brightness");
system("echo 0 > /sys/class/leds/xxxx/brightness");

--
なかむら

ikeuchi

2014年7月3日 8時06分

中村様

返信ありがとうございました。
実践ガイドは見ていたつもりでしたが、調べが足りなくお恥ずかしい限りです。

system()は初めて知りました。今後、使ってみたいと思います。

> 中村です。
>
> > いつも様子見していると中村さんが回答されるのでたまには私も。
>
> いろんな人に出てきて欲しいです。
> 様子見をもうちょっと長くしようかなぁ~。
>
> > 840のデバイス名は失念しましたが、概ね次のようなコードでいい筈です。
>
> ですね。
>
> Armadilloのドキュメントとしては、ここに説明があります。
> 実践ガイド第2部の中。
> http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2…
>
> brightnessを使わずにトリガを使ってタイマでON/OFFする
> ようなときもやり方は同じ。
> デバイスファイルをopen()やfopen()でオープンして、
> write(),fwrite()などで値を出力すればOKです。
>
> > パフォーマンスが要求されるのなら別ですが、LEDは見るのが人間なので問題ないかと思います。
>
> 私の場合、たまにしかON/OFFしないときは面倒なので、
> system()でやってしまうこともあります。
> system("echo 1 > /sys/class/leds/xxxx/brightness");
> system("echo 0 > /sys/class/leds/xxxx/brightness");
>
> --
> なかむら
>
>

ikeuchi

2014年7月3日 8時03分

izawa様

ご教授いただきありがとうございます。

無事点灯させることができました。なんとなくですが理解できた気がします。
引き続き勉強していきます。

> いつも様子見していると中村さんが回答されるのでたまには私も。
>
> 折角コマンドラインから点灯できるようにデバイスドライバができているのですから、
> プログラミングも同じ要領でできます。
> 840のデバイス名は失念しましたが、概ね次のようなコードでいい筈です。
> --
> // 尚、echo 1 > /sys/class/.../brightness で点灯することを前提としています。
> // デバイス名は適当に調整を。
> // \param[in] onoff true: 点灯、 false: 消灯
> void led(bool onoff)
> {
> FILE * fp = fopen("/sys/class/.../brightness", "r+");
> fputc(onoff ? '1' : '0');
> fclose(fp);
> }
> --
> 勿論、open/write/closeで書いても問題ないし、その方が効率はいいかもしれません。
> パフォーマンスが要求されるのなら別ですが、LEDは見るのが人間なので問題ないかと思います。
> 要は、echoコマンドならファイル出力、catコマンドならファイル入力に置き換えればいいと言うことです。