Also ich habe nun den Reset mit dem Watchdog Timer ausgeführt. Der Reset
funktioniert auch erstmal wunderbar. Aaaber
1 | int main(void)
|
2 | {
|
3 | wdt_reset();
|
4 | wdt_disable();
|
5 |
|
6 | uint8_t Ep2_temp[2] = {0,0};
|
7 |
|
8 | McStart();
|
9 | usb_init_device(); // Unterprogramm der USB-Bibliothek
|
10 | DracoRc_Setup();
|
11 | DracoRc_ChannelReset();
|
12 | McReady();
|
13 |
|
14 | wdt_enable(500);
|
15 | wdt_reset();
|
16 |
|
17 | sei();
|
18 |
|
19 | while (1)
|
20 | {
|
21 | Delay_MS(1);
|
22 |
|
23 | DracoRc_CalcMiddle();
|
24 | Ep1_cnt = NumChannelOutPuts+2;
|
25 |
|
26 | for(uint8_t i=0; i<NumChannelOutPuts;i++)
|
27 | {
|
28 | Ep1_buf[i]= ChannelPerc[i];
|
29 | }
|
30 |
|
31 | // Check USB Input Buffer
|
32 | if(Ep2_flag == 1)
|
33 | {
|
34 | if(Ep2_buf[0] == 0x86)
|
35 | Ep2_temp[1] = 0x01;
|
36 | else if (Ep2_buf[0] == 0x87)
|
37 | Ep2_temp[1] = 0x02;
|
38 |
|
39 | Ep2_flag = 0;
|
40 | }
|
41 |
|
42 | //Watchdog reset
|
43 | if(Ep2_temp[1] == 2)
|
44 | {
|
45 | while(1)
|
46 | {
|
47 | }
|
48 | }
|
49 |
|
50 | wdt_reset();
|
51 | Ep1_buf[4] = Ep2_temp[1];
|
52 | Ep1_buf[5] = NumChannelOutPuts;
|
53 | Ep1_flag = 1;
|
54 | }
|
55 | }
|
Der Reset wird wie erwartet ausgeführt, jedoch kommt der µC nicht mehr
korrekt zurück aus dem Reset. An PortB0 ist eine LED angeschlossen,
diese blinkt nun, warum auch immer. Es hat den Anschein das er es
nichtmal schafft mehr in die Main zurückzuspringen. Ein Bootloader ist
AFAIK nicht auf dem µC, zumindest dürfte er ja mit einem normalen Chip
Erase überschrieben wurden sein.