おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

秋月VFDに手間取った・そのワケとか。

ここ、数ヶ月前から秋月で取り扱っている双葉の VFD (GP1022A09AGP1058A02A) を弄る機会があり、PICマイコンを使って色々試していたのですが、大ポカをやらかしてしまい、思ったように動かすのに手間取ってしまいました。

PICマイコンの開発は CCS C コンパイラを使っているのですが、ここでこのコンパイラのフツーじゃないところをいくつか語っておきます。
○void lcd_putc(char c) と宣言した関数は、lcd_putc('a')のように呼び出す以外に、lcd_putc("abc") と呼び出すことが可能で、これは lcd_putc('a'), lcd_putc('b'), lcd_putc('c') と順に呼び出すのと同じ。
※コンパイラは文字列リテラルをプログラムROMにいわゆるテーブル(PICのプログラミングのテクニック)として実装するので、こんな仕様になっているのだと思われます。この例だと"abc¥0"ってデータがプログラムROMにテーブルとして格納されて、順にテーブルから読み出して'¥0'じゃない間 lcd_putc() を呼び出すというコードが生成されます。

ここから、先は mixi のコミュにも書いたことなんですが…それにしても、mixi のこのコミュ人達に感謝です。

私の、VFD 周りのプログラムのソースはこんな感じ↓なんですが、
vfd_send_command2(VFDCMD_IMMEDIATE, 1); // コマンドフレームを送信 
vfd_begin_data(); // データフレームを送信開始
 vfd_send_data( // メッセージ部
  "¥x00¥x89¥x02¥x06¥x04¥x06¥x06"
  "¥x06¥x08¥x06¥x0A¥x06¥xFF¥x89"
 );
vfd_end_data2(); // データフレームの送信終了(足りない部分をFFhで埋めたり、チェックサムを追加したり)

まあ、詳しいことは VFD 仕様書読まないと分からないと思うのでいいとして、このプログラムってまともに動きませんよね?って、自分はこれでここ2,3日悩んだわけですが。

"¥x00"は ¥0(NUL) 値ですものね。ほんと、しょーもないバグでした。vfd_send_data() の定義は void vfd_send_data(char) となっていて、自分で文字列終端とか意識しないで書いてたのでどうも気づくのが遅くなってしまったようです。
  1. 2006/10/12(木) 06:40:24|
  2. ハードウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<Recursion not permitted | ホーム | 色々、ニュースとかネタとか。>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://tm86eublog.blog42.fc2.com/tb.php/149-becc8bb8
この記事にトラックバックする(FC2ブログユーザー)

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

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