Archive
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
こんにちは!
今日は車の1年点検で、近所のホンダさんへ来ているゆってぃです。
点検には3時間程度かかるということなので、今はお店の中からブログを更新しています^ ^

ついに10万PVを達成させていただきました><
皆様、本っっっ当にありがとうございます!!
これからも多くの方にご覧いただけるよう、頑張って書き続けていきたいと思います!

さて、仕事で新規の組み込みソフトウェアを開発することになりました。
新規ですので、最初にしっかりとした設計を行わないと、あとあと苦労することになってしまいます…。
ですので、自分への復習の意味もこめて、組み込みソフトウェアにおけるオブジェクト指向の考え方について、ここで記載したいと思います。

なお、ここで記載する内容は独学+ゆってぃの思い込みによる部分が大きいので、一般的に正しいのかどうか定かではありません。。。
ご参考程度でお願いいたします。m(_ _)m

個人的に、組み込みとオブジェクト指向は、比較的相性がよいと思っています。
なぜなら、組み込みではソフトウェアを利用して、最終的にモーターやLED、センサーといったデバイスを動かすことが多いので、そのデバイスをそのままクラスとして定義することができるからです。

例えば、LEDをPWMで制御する場合を考えましょう。
現実世界にLEDというオブジェクトが存在するので、プログラム中にもLEDクラスが現れます。
なお、僕は「LEDクラス」というクラスは作成せず、これを2つのクラスに分割するようにしています。
具体的には、「LED情報クラス」と「PWM制御クラス」に分割します。

なぜ、LEDクラスをわざわざ2種類のクラスに分割するのでしょうか?
これは組み込みに限定した話ではないですが、ソフトを開発するときには「移植性」という部分を考慮しなければなりません。
特に組み込みにおいては、プロジェクト終了後に、モーターやセンサーといったデバイスが変更になったり、マイコンそのものが変更になる場合があります。
マイコンが変更になった場合、特にベンダーやコアの変更を伴う全く新規のマイコンへの移植となった場合、ハードウェア制御部分が大きく変更になります。
言うまでも無く、レジスタの種類やアドレスは、全く異なるものになるでしょう。

組み込みソフトウェアの開発時には
ハードウェア制御部分(レジスタ制御部分)と制御情報の管理部分を分離
しておけば、そういった変更があってもハードウェア制御部分のみの修正だけで移植が済みます。

んなこと当たり前だろ!オブジェクト指向うんぬん関係なしにやってるわ!
ですよね・・・。すみませんでした・・・。


さて、気を取り直して先ほどのLEDの例に戻りましょう。
先述の通り、レジスタの操作や輝度調整を行うLEDクラスというクラスを作成しても良いのですが、ここではLED情報クラスPWM制御クラスというように、2つのクラスに分けて考えます。

(1)LED情報クラス・・・現在のRGBの輝度情報を持つ。また、上位クラスからLEDを操作するためのメソッドを持つ。
(2)PWM制御クラス・・・レジスタ操作関連のメソッドを持つ。

LED情報クラスは、さらに上位のアプリケーション層(あるいは割り込みハンドラなど)からメッセージを受け取り、それに応じてPWM制御クラスへメッセージを渡します
本クラスのメソッドでは、レジスタ操作は行いません。

PWM制御クラスでは、PWM関連のレジスタの初期化や、オン/オフ。および、周期・DUTY比などのレジスタ操作を行うメソッドを有しています。その代わり、現在の輝度など、LEDの制御情報に関するパラメータ(メンバ)は持ちません。
せいぜい、RGBそれぞれのLEDに対して波形を出力中か否かのフラグを持っている程度です。

こうすることで、移植の時はPWM制御クラスのみ書き換えれば良いことになります。

まぁ、当たり前っちゃ当たり前のことなのですけど、復習の意味も含めて書かせていただきました。

次回は、FM3マイコンを用いて具体的なコードを記述しながら、より詳細な内容をお話したいと思います。

最後までお読みいただいて、ありがとうございました!(感謝)

関連記事
スポンサーサイト
こんばんは!
無事にXBee Wifiが動くようになってご機嫌のゆってぃです^ ^
上手く動かなくて泣きそうになった時の記事

せっかく動くようになったので、さっそくパソコンと通信をさせます。
そのためには、XBee Wifiをパソコンと同じサブネットに追加します。
(パソコンと同じルーターにぶら下げます)

なお、今回はATモードでの説明になります。
PCからリモートでXBeeのポート制御などをしたい場合は、下記の記事をご覧下さい^^
PCやスマホからXBee Wifiのポートを制御したい!

--

(1)X-CTUで「Active Scan」を実行します。
   この時、十分な電流を供給できないと、上手くスキャンできない時があるようです。
   スキャンしてもアクセスポイントが見つからない場合などは、電源を疑ってみてください。

(2)接続したいアクセスポイントのSSIDを選択し、必要に応じてパスキーを入力後、「Select AP」ボタンを押します。

--

たったこれだけ(笑)

なお、今回のXBeeのネットワーク設定は、下記の通りです。

AH = 2 (INFRASTRUCTURE)
CE = 2 (STA MODE)
IP = 1 (TCP)
MA = 0 (DHCP)

Source Port = 2626(10進数では9750)
IP Address = 192.168.111.105

パソコン側は、C言語で書くとややこしいので、今回はRubyでチェックしました。

#--ここから

require "socket"

skt = TCPSocket.open("192.168.111.105", 9750)

skt.write("hello")
skt.close

#--ここまで

無事、XBeeと接続しているCOMポートからは、"hello"の文字が出力されました^ ^

う~ん、なんて簡単なんだろう!!

XBee Wifiは(当然ながら)スマートフォンとも通信できるので、色々面白い事が出来そうです。
関連記事
こんばんわ~。
今日はアロマ検定1級を受けてきました。

あまり勉強をする時間が取れなかったので不安でしたが、やるだけのことはやってきました。

香りテストは、
(1)ベルガモット
(2)イランイラン
かな・・・?


結果は1ヵ月後とのことですので、返却されたらまたご報告したいと思います^ ^
関連記事
こんにちは!
明後日にアロマ検定1級を受験するのに、全然勉強が進んでいないゆってぃです(涙)

さて、実は以前、ゆってぃはXBee Wifi(S6B)をこっそり購入していました。
ですが、同時期に買ったRaspberry Piが楽しくてすっかり没頭してしまい、可哀想なXBeeは引き出しの中で封印されていたのです。

でも、4000円くらいした製品ですし、3連休を利用して遊んでみようと思い、封印を解除(笑)
X-CTUでF/Wを書こうとした時、事件は発生しました。。。

F/Wが書き込めない…。

書き込み終了時に、下記のエラーが出てしまいます。

---------------

Getting modem type....Programming modem...OK
Failed to enter command mode
Found bootloader active reprogramming firmware.
Write Parameters...Failed

---------------

何度writeしてもこの表示が出ます。
たま~~~にうまく行くこともありますが、結局その後の動作が不安定です。
(scan出来ない)

ネットで調べてみると、どうやら同じ症状が出ている人は少なくない様子。

もうね、はまりましたよ…。
たぶん、累計で4~5時間は悩みました(涙)
でも、まさか意外なところに落とし穴があったなんて…

実は、僕はXBee ZB用に秋月で買ったAE-XBee-REG-DIP(ピッチ変換基板)を、そのままXBee Wifiでも流用していました。
(もうこの時点で「あ、こいつバカだわwwwwww」とお気づきになられた方もいらっしゃるかもしれませんね…)

でも、全然うまくいかない。
WBee ZBに差し替えると動くのに、WBee Wifiは動かない。
電源ラインにコンデンサを入れても効果無し・・・。

うまくいかないから、しょぼくれながらAE-XBee-REG-DIPをまじまじと見ていたんですよ。
ゆ「この基板、レギュレータが実装されてるんだよなぁ…。でも、ずいぶん小さいなぁ」

・・・ん?レギュレータが小さい?

あれ、もしかして・・・

レギュレータの電流容量が足りてねーんじゃね??

説明書にレギュレータの仕様が書かれていないので定かではないですが、この大きさではせいぜい150mA~200mAが良いところでしょう。
でも、僕の買ったXBee Wifi(S6B)は、最大で309mAも食う大飯食らい。
予想ですが、書き込み時にも結構電流を使うんじゃないかな…

ためしに、AE-XBee-REG-DIPのレギュレータをはずして、XBeeのVCCにはVBUS 5Vから別のレギュレータ(3.3V出力。500mAまで出力可能)を経由して電源を供給(念のため、100uの電解コンと、1uのセラコンを付けました)しました。
その上で、おかしくなっちゃったF/Wを書き戻すため、F/Wの書き戻し方を参考にF/Wを書き戻し・・・無事に動くようになりました^ ^

(因みに、この方法を試しても、1回でうまく行くとは限らないようです。僕は3回目でようやく書き戻せました。この方法でも確実に復活する保証は無いようですので、自己責任でお願いいたします)


いやぁ、安心しました(笑)
けど、電源は回路で一番重要なのに、まだまだ勉強不足ですね(涙)
もし、同じ症状でお悩みの方がいらっしゃいましたら、ご参考にして頂ければ幸いです。
(結構いると思うんだけどなぁ…。いや、僕だけかな…)

ゆ「世間の大人どもが本当のことを言わないなら、オレが言ってやるっ・・・・・・・・!」
ゆ「金(電源)は、命(F/W)より重い・・・・・!」
ゆ「AE-XBee-REG-DIPでは、XBee Wifi(S6B)は動かないっ・・・・・!」
(なお、S6は消費電流が少ないので、コンデンサさえ付ければギリギリ動くこともある模様っ・・・・・!)


最後までお読みいただいて、ありがとうございました!(感謝)
関連記事
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。