おいふぉりーのぶろぐ

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

スポンサーサイト

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

[CCS C]ちょっと、てこずったこと。

PICのハードウェアのUSART機能を使ってPCとシリアル通信をするようなものを作っていました。で、USARTはハードウェア上に送受信ともに1byteのバッファしか持っていないので、これでは使いづらいってことで、私はソフトウェアでリングバッファを作りました。いままでは、すべてアセンブラでこれを実装していたんですが、今回は初めてCCSのCコンパイラで実装してみました。ところが、送ろうとする文字列の途中までしか送信されない。なんだか、最後の10文字くらいがちゃんと送信されないのです。割り込みが絡んだデバッグってめんどくさいんですよね。そこで、とりあえずお昼寝をした後、いろいろやってみて原因が分かりました(原因が分からないときは、寝るに限る)。
何が悪かったって、俺の作ったルーチンはどこも悪くなかったのですが、CCSのCコンパイラの仕様では、main()関数を抜けた後、SLEEP命令を実行するので、PICはオネンネしてしまうのです。それが送信のバグにどう関係するかというと、俺の作ったルーチンで文字列を送信するとハードウェアの1byteバッファに入りきらなかったものは、リングバッファに格納されるわけですが、送信しようとする文字の最後のほうはリングバッファに格納されただけで、すぐにSLEEPモードになってしまうので、実際には送信されないという状況になっていました。そこで、main()関数の最後に無限ループを追加したところ、ちゃんと動くようになりました。

追記:カテゴリを分類し忘れていたんですが、ハードウェア開発に分類しました。内容は、プログラミングの話なので、微妙にソフトウェア開発なきもしますが、まあ、ハードウェアに近いプログラミングということで、ハードウェア開発のほうに分類しておきます。
  1. 2006/01/14(土) 20:39:57|
  2. ハードウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<[C言語]変数の落とし穴 | ホーム | 74HC07と74LS07>>

コメント

コメントの投稿


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

トラックバック

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

来客数

プロフィール

Euphorie

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

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

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

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