Forum: Compiler & IDEs LPC2132; ReservedVector $00000014


von Dirk P. (Firma: Trützschler) (dirkpet)


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

von (prx) A. K. (prx)


Lesenswert?

Erledigt normalerweise der Programmer / Flash-Uploder.

von dirkpet (Gast)


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).

von (prx) A. K. (prx)


Lesenswert?

Die Checksum-Funktion des Vektors ist eine Spezialität der LPC2000 
Reihe. Die Binutils hingegen sind herstellerunabhängig.

von Stefan ++ (Gast)


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
.

von Dirk P. (Firma: Trützschler) (dirkpet)


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.

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
Noch kein Account? Hier anmelden.