2016-10-02 19 views
0

リリースコードを実行すると、MicroChip PICコードプログラムがRESET命令を実行すると、プロセッサはリセットされ、明確な状態になり、実行されます最初から始まります。デバッグモードのソフトウェアRESET命令の後にMPLABをリセットして実行します。

デバッグモードで実行すると、MPLABは完全に停止します。私は手動でそれを再度実行するように命令する必要があります。代わりに、リリースモードと同じように動作するようにします。最初からリセットして実行を開始します。

私はGOTO 0命令でRESET命令を置き換えようとしましたが、PICプロセッサは奇妙な状態にあり、CAN2ポートは機能しません(CAN1はうまく動作します)。真のハードウェアリセットだけが正常な動作に戻ります。

私はMPLAB 8.2を使用しています。ターゲットにはPIC30F ICがあります。

答えて

0

私の解決方法は、ソフトウェアをリセットするたびに呼び出されるルーチンを次のように宣言することです。 NOPにブレークポイントが設定されているので、vReset()が呼び出されると、デバッガは停止し、MPLABXのリセット機能(Debug | Reset)を使用してプロセッサを自分で再起動できます。このルーチンは、リリースビルドのために正常に実行されます。

void vReset(void) 
    // This routine resets the CPU 
    { 
    // Perform any other cleanup tasks before resetting... 

    // If in debug mode, hang here before the reset (a reset locks up the debugger) 
    #ifdef __DEBUG // Defined by MPLABX when building project for debugging 
     for(;;) 
     { 
      __asm__ volatile ("nop"); // In case a breakpoint is placed here, will not get optimized away 
     }; 
    #endif 

    // Reset CPU 
    __asm__ volatile ("reset"); 
    } 

私はMPLAB8を使用していないので、おそらくあなたは__DEBUG以外の何かのためにテストする必要があり、そしてあなたが古いコンパイラ(例えばC30)を使用している場合は、ASM構築物は異なってフォーマットされる可能性があります。

+0

ありがとう、私の質問にのみ接線的に関連しています。そのような誤解を引き起こさないように、私が自分の質問をどのように表現することができたかを提案することができますか? –

+0

私が知っているところでは、あなたが求めていることを達成する方法がありません.MPLABXの私の経験では、ソフトウェアリセットはデバッグモードをリセットし、デバッグ環境を完全に再起動する必要があります。同様のことがMPLAB8の下で起こっているようです。私の回避策は理想的ではありませんが(手動で再起動する必要があります)、少なくともソフトウェアリセットの自動トラップがデバッグモードで得られます。 – EBlake

+0

>私の知る限り、あなたが求めていることを達成する方法はありません。 \t \t ダング!ありがとう。 –

関連する問題