Dies Aliquanti

スポンサーサイト

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

ビデオラインセレクタ(笑)を作る。その10

 一応、シミュレーション上ではちゃんと動作するようになりました。うまく動作しなかったのは、PIC16F648のI/Oの設定がまずかったり、ソースコードの大半をVerilogからコピペしていたので、代入文が <= のままだったり(orz cでは代入ではないですが、文法上は誤りではないです),LMH1981のモデルにバグがあったり・・・。 

 あと、HI-TECH社のPCCにもちょっと問題を見つけました。いや、正確にはPCCの問題というのは、正しくないかもしれません。たとえば、short形の変数iを使用するとします。メイン・ルーチンとインタラプト・サービス・ルーチン(ISR)の両方で、参照・変更する場合に気をつける必要があります。メインルーチンで代入を行う場合、
   i=0 ;
は、
   CLRF _i
   CLRF _i +1

のように、コンパイルされますが、2つの命令の間で、割り込みが受けつれられ、ISRの中で、iを参照したり、変更したりするとへんてこな値が参照されたり、メインルーチンで値を壊すことになります。
 代入する場合、
   GIE =0 ;
       i = 0 ;
   GIE = 1 ;

とすればよいでしょう。参照の場合も同様ですが、割り込み禁止区間を短くしたいのであれば、
   GIE = 0 ;
       i_snapshot = i ;
      GIE = 1 ;

として、実際の演算は、スナップショットである、i_snapshotに対して行うようにします。
本質的には、マルチスレッド(もしくは並行プログラム)とアトミックな命令の問題ですが・・・
---
[本日の御託]
 とりたてて、「用事」があるわけではなかったのだが、ラゾーナ川崎へ出かけた。謎にすっげぇ混んでた。
 ラゾーナ川崎って、エスカレーターがわかりにくい。中庭に面したエスカレータの場所がまちまちで、ちょっと「イラっ」とする。ついでにいえば、中庭のステージでなにもしていないときも、がんがん音楽をかけているのも×。
 「コールド・ストーン」は、となりの「銀だこ」(決してきらいじゃないけど)のにおいが立ち込めていて、食べる気がせず。



コメント

コメントの投稿


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

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/507-f20268ba
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

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