- 9680. 12F629 + CCS_PCM [HK-100] 2006/02/21 21:08
- 先日,12f629を使って38kHZのパルスを出す簡単なプログラムをCCS使って書いてみたんですが,プログラムに誤りはなさそうなのに,PICが動かなかったんです。そこで,MPSIMでデバッグした所,突然何の前触れもなくオーバーフローしました。そこで,しょうがなしに ディセンブルリストを見てみると,
000 3000 MOVLW 0
001 008A MOVWF 0xa
002 2804 GOTO 0x4
003 0000 NOP
004 23FF CALL 0x3ff ←!!!
005 1683 BSF 0x3, 0x5
というような感じで 突然004に0x3ffにとぶ命令が加えられているんです。 Cのソース自体ではどうにもこうにも修正しようないですしどうしたらいいもんでしょうか? ちなみにI/Oは fast です。
- 9682. Re: 12F629 + CCS_PCM [PICマスター] 2006/02/21 21:54
- PIC12F629って、オシレータのキャリブレートが出来る(あるいは必要)んじゃないんでしたっけ?。
そのキャリブレート用のステートメントで、コンパイラが勝手に挿入してるような気がするんですけど違うかな?
いずれにしても
>突然004に0x3ffにとぶ命令が加えられているんです
って書かれてますが、Callなので戻ってきますよね?。
- 9685. Re: 12F629 + CCS_PCM [HK-100] 2006/02/21 22:41
- >いずれにしても
>>突然004に0x3ffにとぶ命令が加えられているんです
>って書かれてますが、Callなので戻ってきますよね?。
しかし,デバッグしてみると Outputuウィンドーに"CORE-E0001: Stack over flow error occurred from instruction at 0x000004"と出て どう見ても,オーバーフローしてるんですよ。
- 9686. Re: 12F629 + CCS_PCM [PICマスター] 2006/02/21 22:54
- >しかし,デバッグしてみると Outputuウィンドーに"CORE-E0001: Stack over flow error occurred from instruction at 0x000004"と出て どう見ても,オーバーフローしてるんですよ。
そりゃきっと、とんだ先にRETURNもしくはRETLWが無いからでしょ?。消しちゃった?
- 9688. Re: 12F629 + CCS_PCM [PICマスター] 2006/02/21 22:59
- ウチに12F629は2個あったので覗いてみました。
すると、1個は0x3430、もう1個は0x3448でした。
つまりRETLW H'30'、RETLW H'48'ですな。
あ、もちろんアドレス0x3ffでっせ。
- 9703. Re: 12F629 + CCS_PCM [HK-100] 2006/02/22 23:06
- となりますと,MPLABのSIMでは0x3ffのデータを認識させていないのでオーバーフローしたのですね。
それでは,SIMでそのことを認識させつつデバッグするにはどうしたらいいのでしょうか?
- 9708. Re: 12F629 + CCS_PCM [PICマスター] 2006/02/23 03:50
- >となりますと,MPLABのSIMでは0x3ffのデータを認識させていないのでオーバーフローしたのですね。
> それでは,SIMでそのことを認識させつつデバッグするにはどうしたらいいのでしょうか?
さて、どうなのでしょう?CCSは使ったこと無いので・・・。
まぁ、インラインアセンブラが使えるのなら、0x3ffの番地指定でRETURNでも放り込んでおけば良いのではないですか?。あるいはもっと手前にチップ指定とかオプションでそのような事態を回避するような手順があるかも?
- 9709. Re: 12F629 + CCS_PCM [ゆん] 2006/02/23 04:33
- まず、MPLAB-SIMの >View >ProgramMemory で3FF番地を確認します。
RETLW 0 が生成されていればオーバーフローの原因は別にあります。
生成されていない(ADDLWになっている等)場合は手動で RETLW 0 を入力するか以下のチェックをします。
・プロジェクトは正しく設定されているか(デバイスの設定など)。
・MPLABのバージョンは古くないか。
CCSの場合は不明ですがMPASM使用時はプロジェクトを正しく設定してMake(Build)することによって、
シミュレータ上の 3FF 番地に RETLW 0 が生成されます(HEXファイルには出力されない)。
古いMPLABでは生成されなかったような経験があります(バージョンは忘れました)。
>Debugger >SelectTool >MPLAB SIM を設定後にMake(Build)しないと生成されない場合もあります。
- 9714. Re: 12F629 + CCS_PCM [HK-100] 2006/02/23 21:09
- >・プロジェクトは正しく設定されているか(デバイスの設定など)。
>・MPLABのバージョンは古くないか。
これでは解決できませんでしたが,ディセンブルリストを書き換える事で何とかできましたありがとうございました。