youyue858d.cpp.elf: file format elf32-avr
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 3b 00 jmp 0x76 ; 0x76 <_Z18watchdog_off_earlyv>
4: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
8: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
c: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
10: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
14: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
18: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
1c: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
20: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
24: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
28: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
2c: 0c 94 84 02 jmp 0x508 ; 0x508 <__vector_11>
30: 0c 94 0f 02 jmp 0x41e ; 0x41e <__vector_12>
34: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
38: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
3c: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
40: 0c 94 ef 08 jmp 0x11de ; 0x11de <__vector_16>
44: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
48: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
4c: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
50: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
54: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
58: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
5c: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
60: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
64: 0c 94 67 00 jmp 0xce ; 0xce <__bad_interrupt>
68: 40 02 muls r20, r16
6a: 34 02 muls r19, r20
6c: 36 02 muls r19, r22
6e: 38 02 muls r19, r24
70: 3a 02 muls r19, r26
72: 3c 02 muls r19, r28
74: 3e 02 muls r19, r30
00000076 <_Z18watchdog_off_earlyv>:
76: a8 95 wdr
78: 84 b7 in r24, 0x34 ; 52
7a: 80 93 f0 01 sts 0x01F0, r24
7e: 84 b7 in r24, 0x34 ; 52
80: 87 7f andi r24, 0xF7 ; 247
82: 84 bf out 0x34, r24 ; 52
84: 88 e1 ldi r24, 0x18 ; 24
86: 0f b6 in r0, 0x3f ; 63
88: f8 94 cli
8a: 80 93 60 00 sts 0x0060, r24
8e: 10 92 60 00 sts 0x0060, r1
92: 0f be out 0x3f, r0 ; 63
94: 11 24 eor r1, r1
96: 1f be out 0x3f, r1 ; 63
98: cf ef ldi r28, 0xFF ; 255
9a: d8 e0 ldi r29, 0x08 ; 8
9c: de bf out 0x3e, r29 ; 62
9e: cd bf out 0x3d, r28 ; 61
I've compiled and checked the assembler source code. As you can see, the reset vector points to "watchdog_off_early". So the watchdog is automatically turned off, every time the chip resets. Later it is turned on only after the setup stuff is over (unless it has previously fired --> error message).
Yet another option to possibly fix this might be to increase the watchdog timeout to 250MS
WDTO_250MS
There is some DEBUG code in the main loop to find out how long it actually takes. 120ms should suffice.
If we assume that the chips are OK & the power supply is stable and clean, one possibility is oscillator drift. The internal RC oscillators are very temperature dependent. It might be interesting to shoot a good and a bad chip with a hair-dryer and ice-spray to introduce a frequency drift, which might upset the watchdog timeout. This should old matter much, if the main loop takes close to 120ms to run, but I guess it should be much faster.
I might check the timing tomorrow, if I can find an Arduino board ;-)