Gast
#4355326
Guten Tag! Ich arbeite hier gerade mit einem Bootloader auf einem Automotive Atmega64C1. Leider konnte ich bisher beim Schreiben in den Flash keine Erfolge verzeichnen. Da der ursprüngliche Code eher komplex ist, habe ich ein einfaches Projekt aufgesetzt, das einfach nur eine Seite des Flashspeichers mit einem Text beschreiben soll. Auch da zeigt sich leider kein Erfolg. Den Code der Funktion boot_program_page habe ich direkt dem Beispiel in der boot.h entnommen. Eigentlich hätte ich angenommen, dass dieser Beispielcode anstandslos das tut, was er verspricht. Aber wenn ich den Flash nach Durchlaufen des Codes auslese, findet sich von den zu schreibenden Daten keine Spur. Die Fuses sollten korrekt gesetzt sein. Das Textsegment habe ich in den Linkereinstellungen an die Adresse 0x3800 verschoben, wo der Bootloader entprechend der Fuses (Byteadresse 0x7000) liegen sollte. Als Entwicklungsumgebung nutze ich Atmel Studio 7 mit GCC. Hier der Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
Angehängt habe ich einen Screenshot der Einstellungen der Fuse Bits und einen Screenshot eines Disassemblys, das zeigt, dass der Code tatsächlich im angestrebten Adressbereich ausgeführt wird. Für kompetente Hilfe wäre ich gerade sehr dankbar :)

