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

Program with initialised global variables does not run

Experts, I have a 'C' program that contains an array of around 10 unsigned int's. If I initialise it during the declaration, the code never enters main() (I placed a breakpoint on the first instruction inside my main() but it never got hit).
unsigned int array[10]={0,0,0,0,0,0,0,0,0,0}; // does not work.

If I remove the initialisation part, it works. Why?
MCU = C8051F340 (Silabs)
Keil version = C51 COMPILER V7.10
Assembler command line flags: XR GEN DB EP NOMOD51
Compiler command line flags: PW(80) SB LC OT(9,Size) CD DB OE DF(__F340_VER__) Large
Linker command line flags: RS(256) PL(68) PW(78) IX

Thanks.

Regards,
Ganesh

Parents
  • It is always problematic to have a watchdog that runs too fast. For most applications it will be ok to have a watchdog timeout of 1-10 seconds. For a processor that can't decompress all variables within one watchdog cycle, Keil really should consider releasing a version of the library that kicks the watchdog during the startup operations. A watchdog works best if it can be turned on as soon as possible - best is that it is turned on by a fuse, so it is turned on before the first instruction is processed.

Reply
  • It is always problematic to have a watchdog that runs too fast. For most applications it will be ok to have a watchdog timeout of 1-10 seconds. For a processor that can't decompress all variables within one watchdog cycle, Keil really should consider releasing a version of the library that kicks the watchdog during the startup operations. A watchdog works best if it can be turned on as soon as possible - best is that it is turned on by a fuse, so it is turned on before the first instruction is processed.

Children
  • Keil really should consider releasing a version of the library that kicks the watchdog during the startup operations.
    that would require, lots and lots of versions.
    A watchdog works best if it can be turned on as soon as possible - best is that it is turned on by a fuse, so it is turned on before the first instruction is processed.
    I do not have a problem with a WD that can be turned off, if turning it off is complex enough to make the likelyhood of runaway doing so is less then 1/1000000

    Erik

  • "that would require, lots and lots of versions."
    Not at all. All they need is for the RTL to call a helper function for kicking, and expecting you to supply such a function.