• ベストアンサー

PICの動作が考えていたものと違う時の解決法について

Cプログラムのコンパイルに成功し、シミュレートによる動作も問題がなく、回路も正しいことを前提に質問します。 このような時にPICが計画していたものと違う動作をする原因として、どのようなケースが考えられますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

>ただ、メモリの参照についての知識がないので、そこの部分が良く分かりませんでした。 >アドレスが間違って参照されるのは、どのようなケースに起こりうるのでしょうか? C言語でしたら、ポインタの使い方の間違いが主です。 (1)ポインタを初期化しないまま使用。 (2)ポインタは初期化したが、ポインタの加算減算のバグで想定外の場所を参照。 (3)ポインタ配列の添え字が範囲外を参照。 (4)ポインタ参照先の構造体が初期化されていない。特に構造体にポインタを含む場合は致命的。 などなど多彩な間違いのバリエーションがあり書ききれません。 ポインタについて、詳しく勉強することをお勧めします。 http://www.nurs.or.jp/~sug/soft/tora/index.htm PICでは、メモリの無い場所や0番地をアクセスしてもCPUが異常を検知しないので何気なく動いてしまいます(WindowsやLinuxでは異常終了します)ので、原因追求が大変なのです。

peace1st
質問者

お礼

回答ありがとうございます。 おかげで問題が解決しそうです。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

>回路も正しいことを前提に これ自体が無理がある気がします。静的に問題が無くても動的には遅延やらノイズやら色々と問題を秘めている可能性があります。 後はシミュレートして問題が無くても、外部とのインターフェイスがある以上は、タイミング問題は付きまといます。タイミングを完全にシミュレートすることは出来ませんので。 あるいは、メモリの参照でアドレスを間違って参照していても値がたまたま大丈夫だったので動いていたとか。これが実際のPICに焼かれるとメモリの値が違ってしまって動かなかったり。 タイマ等の割り込みタイミングもシミュレータと実際のPICでは大きく違いますのでバグが出る可能性がありますね。実際のPICだとRC発信なので温度など状況で常にタイミングか変化しますし。 この手のバグは、機能を削減して行って問題点を突き止めるとか、クロックを下げて再現性を上げるとか、厳しいタイミングの信号を入れて問題再現を試みるとか、色々とありますが万能な方法は無いのでプログラムと回路に合わせて工夫するのが普通です。出来れば機能単位で動作試験をしておくのが最善の方法だと思います。

peace1st
質問者

補足

大変詳しく書いて頂きありがとうございます。 参考になりました。 ただ、メモリの参照についての知識がないので、そこの部分が良く分かりませんでした。 アドレスが間違って参照されるのは、どのようなケースに起こりうるのでしょうか? メモリの参照について載っているサイト等あったら教えていただけると幸いです。

関連するQ&A