フォト
2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
無料ブログはココログ

« SPI接続のカラー液晶モジュールの動作確認 | トップページ | Aliexpressの買い物で久々に紛争を起こしました »

2016年2月17日 (水)

Propeller始めました(21) ポータブルゲーム機の実装 6

注文していたmicroSDカードもージュールが到着したので早速使ってみました。
基板上に抵抗やコンデンサが乗っているので、3.3V系のマイコンではSPI接続で
簡単に利用することが出来ます。5個で$2.98は非常に安いです。

01

到着した製品はこんな感じです。SDカード入れてみるとプッシュして飛び出す形式ではなく
取り出し時は引っ張って取り出します。

Dscn4892

5品をSPI接続にて動作確認して特に問題無し。
早速、LameStationの拡張端子に直接差し込んで利用するための基板を作成しました。

Dscn4897

SDカードだけでSPIを利用するのはもったいないのでSPI接続 16Mバイトフラッシュメモリ
も一緒に乗せました。

Dscn4900

片面基板をピン端子に接続するために、秋月電子で購入した基板用リードフレームを
利用しました。

02

若干、ピンが細くてピンソケットに挿すと緩いので、ハンダでコーティングして厚さを
増強しました。

基板用リードフレームは材質はICのピンと同じ感じなので強度的に心配がありますが、
ピンヘッダが取り付け出来ない片面基板には重宝します。

次に動作確認です。
問題無し。良かった、一発で動作しました。
これでブレッドボードによる外部回路が無くなりすっきりしました。

Dscn4902

せっかく、ここまでやったので以前作成したランチャープログラムの異常系の実装に
着手しました。

異常系として、
  SDカードリーダが無し
  SDカードが刺さっていない状態、
  SDカードがFAT形式でないケース
  SDカード内にあるべきファイルが無い
  液晶モジュールが接続されていない
等です。

これらの異常環境をわざと起こして、実験していたのですが、
本日初めてspin言語に異常等の例外を捕まえる機構があることを発見しました。

今まで、異常発生時にフリーズしてしまうことがあったのですが、
これは異常発生におけるabort状態だったのでした。

このabort状態をキャッチして異常発生の対応が可能です。しかも実に簡単です。

LameLCD液晶表示ドライバの例
  if false == \lcd.Start(gfx.Start)
        cm.Str (String("LCD devie error.",13))

メソッドの前に’\’(半角バックスラッシュ)を付けることでそのメソッドまたは、
その下位のメソッド内のメソッド終了命令abortをキャッチできます。
逆に’\’を付けないとabort命令によりabort状態となり次の処理も実行できません。
見た目上はフリーズした感じになります。

通常はメソッドの実行を終了する場合はreturnを使います。この場合は呼び出し元に
戻りますがabortを使って終了する場合はabort状態となり’\’を使った呼び出し
レベルまで戻ります。’\’を使っていない場合はメインの処理も終了となります。

この機構をもう少し早く知っていれば、異常系の実装の他にデバッグやテストで
もう少し楽が出来ていました。
abortをキャッチしないのでフリーズしたと勘違いしていたケースもあります。

以前作成したライブラリは全くこの機構を使っていないので、見直しと修正が必要です。

標準ライブラリもこの機構を意識して作られています。
SDカード用のライブラリはメソッド内で異常が発生した場合、エラーコードとエラーメッセージを
セットしてabortしてくれています。最上位の一か所でabortをキャッチしてセットされた
エラーメッセージの表示するだけで異常の状況が分かります。

試し異常系として
異常系として、
  SDカードリーダが無し
  SDカードが刺さっていない状態、
  SDカードがFAT形式でないケース
  SDカード内にあるべきファイルが無い
をやってみると、その状況と分かるエラーメッセージが表示出来ました。

SDカードリーダ部(今回作成したモジュール)を取り外してプログラムを実行すると
次のようなメッセージ(2行目の内容)が表示れれました。

Dscn4908

この機構、異常系の状況検出において非常に強力な機能です。
メソッドやライブラリを自作する場合、returnとabortを使い分けることで異常系の
実装もきちんと行えます。

そういえば、arduinoで例外処理(Try Catch Exception)を利用したことがないなぁ
今度使う時は意識してプログラミングをしてみよう。

« SPI接続のカラー液晶モジュールの動作確認 | トップページ | Aliexpressの買い物で久々に紛争を起こしました »

Propeller」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/63227396

この記事へのトラックバック一覧です: Propeller始めました(21) ポータブルゲーム機の実装 6:

« SPI接続のカラー液晶モジュールの動作確認 | トップページ | Aliexpressの買い物で久々に紛争を起こしました »