This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Different behaviour in debugging and stand-alone

Hello!
I've got the problem that the same code works different in debugging mode and in "normal" stand-alone mode.
In debug mode - with or without any breakpoints - all works nice, but when I disconnect and run the program stand alone it doesn't work.
I use the F020 with µVision2 V2.37 and C51 V7.05.
Thanks for any hint!

Astrid

Parents
  • You really will have to be more specific. "It doesn't work" has not ever been a useful description of any malfunction, and probably never will be.

    So:

    0) What does "it works" mean to you? I.e. what does your program do?

    1) How exactly does it fail?

    2) What "debug mode" are you talking about? MON51?

Reply
  • You really will have to be more specific. "It doesn't work" has not ever been a useful description of any malfunction, and probably never will be.

    So:

    0) What does "it works" mean to you? I.e. what does your program do?

    1) How exactly does it fail?

    2) What "debug mode" are you talking about? MON51?

Children
  • Ok, I see, my desciption is poor ;-)

    I use for debugging the Cygnal C8051F Driver, newest version.

    This is my code:

    main()
    {
      if ( RSTSRC == 0x08 )
      {
        WDTErrorFlag = 1;
        Initialize();
        ShowError( E_WD );
        Wait1Min();
        WDTErrorFlag = 0;
        RSTSRC = 0x10;
      }
      else
      {
        WDTErrorFlag = 0;
        DoSomething();
      }
    }
    

    RSTSRC.3 indicates, if the prior reset was a WDT timeout.
    While debugging, the code is being executed correctly after a timeout of the WDT. Without debugging, the device is being resetted once and after a few seconds twice. After the second reset it enters the else-loop.
    After the first reset, when the WDT-reset flag is set, neither the if- nor the else-part is entered (tests have shown that).

  • I don't know that particular chip. But this:

    	RSTSRC == 0x08

    is not the way you should be testing whether bit three in this register is set. This rather tests whether bit 3 is set and all others cleared. You want

    	(RSTSRC & 0x08) == 0x08

    or something similar, instead.

  • There is nothing in your code that prevents the program from exiting the main function.

    Perhaps that is the cause of the second "reset".

    Typically, the main C function for embedded programs is implemented as follows:

    void main (void)
    {
    whilw (1)
      {
      /*** do something ***/
      }
    }

    Jon

  • Hello!

    The while(1)-loop is within the else-part.
    The problem was the test indeed! Thanks very much!!