Für den LPC2132 erstelle ich mittels dem GCC meine Applikation; dabei habe ich das Problem, dass der "SpecialVector" $00000014 eine Checksumme über die restlichen Vektoren enthalten muss. Mit dem Debugger (Lauterbach) kann ich diese nachträglich erzeugen, aber dies ist nur eine Zwischenlösung, denn ich muss automatisiert die Checksumme generieren lassen, denn ich benötige ein BinaryFile, um dieses in der Serie zu verwenden, denn dort steht kein Debugger zur Verfügung. Gibt es eine entsprechende Linker-Anweisung dazu? Gruß Dirk
Leider setzen wir keinen Programmer / Flash-Uploader ein. Wir haben ein seit Jahren ein für die verschiedenen Systeme selbst entwickeltes Programmiersystem welches auf Binärdateien aufsetzt; beim LPC21.. nutzt dieses Programmiersystem den ISP-Mode. Ich kann natürlich ein Tool schreiben, was in der Binärdatei den Vektor generiert, aber eigentlich erwarte ich dies vom GCC-Linker bzw. von einem andern Entwicklungswerkzeug (z.B. objcopy.exe).
Die Checksum-Funktion des Vektors ist eine Spezialität der LPC2000 Reihe. Die Binutils hingegen sind herstellerunabhängig.
Hallo, ich bin mir jetzt zwar nicht ganz sicher da ich mit dem lpc2132 noch nicht gearbeitet habe, ich verwende überwiegend den lpc2146/lpc2148 aber bei geeigneter Programmierung des "startup.s" Files ist eine Berechnung der checksum nicht nötig, da immer konstant. Bei lpc2146/lpc2148 stehen an den 8 Stellen keine Pointer sondern Sprungbefehle (Ladebefehle für den PC) und die sind immer gleich wenn man die zugehörigen Pointer immer an der gleichen Stelle hinterlegt. Zum Beispiel so
1 | .
|
2 | .
|
3 | .
|
4 | .
|
5 | _start: |
6 | |
7 | # Exception Vectors
|
8 | |
9 | _vectors: ldr PC, Reset_Addr |
10 | ldr PC, Undef_Addr |
11 | ldr PC, SWI_Addr |
12 | ldr PC, PAbt_Addr |
13 | ldr PC, DAbt_Addr |
14 | dcd 0xb9205f80 /* Reserved Vector (holds Philips ISP checksum) */ |
15 | ldr PC, [PC,#-0xFF0] /* see page 71 of "Insiders Guide to the Philips ARM7-Based Microcontrollers" by Trevor Martin */ |
16 | ldr PC, FIQ_Addr |
17 | |
18 | Reset_Addr: .word Reset_Handler /* defined in this module below */ |
19 | Undef_Addr: .word UNDEF_Routine /* defined in main.c */ |
20 | SWI_Addr: .word SWI_Routine /* defined in main.c */ |
21 | PAbt_Addr: .word UNDEF_Routine /* defined in main.c */ |
22 | DAbt_Addr: .word UNDEF_Routine /* defined in main.c */ |
23 | ReservAddr: .word 0 /* not used */ |
24 | IRQ_Addr: .word 0 /* not used */ |
25 | FIQ_Addr: .word FIQ_Routine /* defined in main.c */ |
26 | |
27 | .align 4 /* Align to the word boundary */ |
28 | .
|
29 | .
|
30 | .
|
Danke für den Tip, der hilft mir echt weiter. Es gibt natürlich das Problem, wenn sich doch etwas an der Speicheraufteilung bzw. Belegung ändert, ändert sich die CheckSumme ggf. auch, wird aber nicht automatisch korrigiert. Werde aber vorerst mal damit leben können.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.