おいふぉりーのぶろぐ

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

スポンサーサイト

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

[PICマイコン]CCS Cコンパイラの陰謀?

今日の2つ目のネタです。PICマイコンからシリアルEEPROM、24LC256というやつに読み書きしようとしていたときのお話です。
このシリアルROMはI2C(アイ・スクウェア・シーと呼びます)という2線式の通信プロトコルでデータをやり取りするので、CCS Cコンパイラでは、
#use i2c(MASTER, FAST, FORCE_HW, sda = PIN_ER_SDA, scl = PIN_ER_SCL)
といった感じに、I2Cを使用することをコンパイラに指定しました。
ここで、オプションにFORCE_HWというのがありますが、実はこれが曲者だったのです。CCSのマニュアルによると、FORCE_HWオプションはI2Cの通信をハードウェアを使用して行うことを強制するそうです。私は、ピン配置的にハードウェアを使うつもりで接続していたので、このオプションを指定しました。
次に、シリアルROMの制御ルーチンをCCSのサンプルを参考にコーディングしました。最初は、デバッグのために、ソフトウェアによるRS232Cのポートを用意して1バイト書き込むたびに、デバッグ用のポートにもメッセージを出力するようにしました。
ところが、ここでハプニング発生!。ふと、このデバッグ用のメッセージ出力ルーチンをはずして実行すると、なぜか2回目以降の書き込みを失敗する。という現象がおきます。デバッグコードによってちょうど良くウェイトがあったのがなくなり、それが原因かとも思いましたが、ちゃんと書き込み待ちの処理も入れているんですよね。
この後、原因が分からず、なんだかんだと2、3時間ほどコンパイラそして、シリアルROMと死闘を演じることになります。
で、結果だけ言うと、さきほどのFORCE_HWオプションをはずして、I2C機能をソフトウェアで実装するとうまく動作するようになりました。コンパイラの生成しているコードを解析してるわけではないので、正確なことは分かりませんが、とにかくFORCE_HWオプションをつけると何かまずいことをしているようです。FORCE_HWオプションをつけない場合、つまりそのときはデフォルトでソフトウェアによる実装が行われるのですが、なんだか、とっても”デフォルトでソフトウェア”ということにある意味納得がいった気分になりました。
  1. 2006/01/15(日) 23:34:39|
  2. ハードウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<[雑誌]よく付録基板がついてくるようになりましたよね。 | ホーム | [C言語]変数の落とし穴>>

コメント

コメントの投稿


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

トラックバック

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

来客数

プロフィール

Euphorie

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

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

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

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