LPC2132; ReservedVector $00000014

OP (Firma: Trützschler) #2572068
Lesenswert?

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
Gast #2573088
Lesenswert?

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).
Gast #2574040
Lesenswert?

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
.
OP (Firma: Trützschler) #2575182
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren