「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



昨日の実験でリモコンFのパルスタイミングが判った
ので、早速プログラムを書いてみる。

ターゲットのチップとしては、部品箱に大量に余っている
pic16f84か、はたまた使い慣れたat-tiny2313か、どっち
にするかでちょっと悩みつつ、使い慣れたほうをチョイス。

マイクロ秒単位の制御が必要なので、そんなときは
アセンブリ言語の方が融通が利くんだけど、ひねくれて
win-avrにしてみることに。

Cなのでロジック部分はサクッと書けたんだけど、第一の
ずっこけはコードサイズ。
コンパイルしたらコードサイズがいきなり4kBを超えちゃった
ので、何が起きたのかと思ったら、どうやら_delay_ms関数
や_delay_us関数の引数に変数を入れると型変換処理で
なんだかライブラリコールが生じるみたい。

気を取り直して、引数は定数にしてループで一定時間
繰り返すように変更。


もう一つの問題。これはあらかじめ予想付いていたこと。
マイクロ秒単位のwait処理はfor文その他のオーバーヘッド
で遅延が生じるだろうということ。

で、当初の作戦→生じた遅延の分を加味してwaitの時間
から引き算する作戦。ソースを書き終えてからPC上の
シミュレータでクロック数を数えてみる。
…駄目だった…。

本来のwait時間とオーバーヘッド時間がほぼ同じ長さ
になっちゃう。引き算で済む問題じゃぁ無いな。
ミリ秒単位の待ち処理はばっちりなんだけどな。

ということで、マイクロ秒の待ち処理の方はやっぱり
インラインアセンブルが入用みたい。


http://www.scienceprog.com/how-to-use-inline-asm-using-winavr/
http://www.stanford.edu/class/ee281/projects/aut2002/yingzong-mouse/media/GCCAVRInlAsmCB.pdf

ちょっと面倒…



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« あらためて赤... 動いた! »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。