Forum: Compiler & IDEs stellaris / Tiva C mit Keil


von Tom (Gast)


Lesenswert?

Hallo Leute,

ich versuche gerade ein "Hallo Welt"-Programm mit Keil zu kompilieren.
Leider erhalte ich folgende Fehlermeldung:
1
Rebuild target 'Target 1'
2
compiling main.c...
3
compiling UART.c...
4
linking...
5
.\codesnippets.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
6
.\codesnippets.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.
7
Not enough information to list image symbols.
8
Not enough information to list the image map.
9
Finished: 2 information, 1 warning and 1 error messages.
10
".\codesnippets.axf" - 1 Error(s), 1 Warning(s).
11
Target not created

Es liegt scheinbar nicht direkt an meinem code, da das Programm leer 
sein kann, und trotzdem nicht kompiliert.
Da ich keinen blassen Schimmer habe, woher diese Fehlermeldung kommt, 
bitte ich zu entschuldigen, dass meine Angaben etwas ungenügend sind.

Kann mir jemand sagen, was das Problem sein könnte?
Gruß, Tom

von Bernd N (Gast)


Lesenswert?

Hast du das Projekt selber angelegt ?
>> Cannot find argument 'Reset_Handler

Sieht nach fehlendem Startup Code aus. Häng mal dein Projekt an damit 
man sich das ansehen kann.

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

stimmt, mein erstes selbst angelegtes Projekt.
Bisher hatte ich immer schon "vorgefertigte" Projekte.
Beim anlegen des Prjekte wähle ich den Controller aus und beantworte die 
Frage nach dem Hinzufügen der startupdatei mit ja.

anbei mein Projekt

von W.S. (Gast)


Lesenswert?

Tom schrieb:
> Bisher hatte ich immer schon "vorgefertigte" Projekte.

Dann wird es Zeit, endlich mal ein Projekt komplett selbst zu machen.

1
Reset_Handler   PROC
2
                EXPORT  Reset_Handler [WEAK]
3
                IMPORT  SystemInit
4
                IMPORT  __main
5
                LDR     R0, =SystemInit
6
                BLX     R0
7
                LDR     R0, =__main
8
                BX      R0
9
                ENDP

Das sieht nicht wirklich gut aus. Erstens warum der Resethandler WEAK 
ist und zweitens schau mal, was dir da alles reingezogen wird: 
Systeminit und __main. Alles Zeugs, was du in deiner simpelsten main.c 
garnicht hast.

Ich zeig dir mal nen anderen Startup (für nen anderen Cortex):
1
; Vector Table Mapped to Address 0 at Reset
2
                AREA    RESET, CODE, READONLY
3
                EXPORT  __Vectors
4
5
__Vectors       DCD     __initial_sp              ; Top of Stack
6
                DCD     Kaltstart                 ; Reset Handler
7
                DCD     NMI_Handler               ; NMI Handler
8
                DCD     HardFault_Handler         ; Hard Fault Handler
9
...
10
11
Kaltstart      PROC
12
               IMPORT  main
13
               EXPORT  __main
14
__main
15
               LDR     R0, =main
16
               BLX     R0
17
               B       Warmstart
18
               ENDP

Hier wird _main vorsichtshalber _exportiert, um irres 
Bibliotheksgekruschtel fernzuhalten und es wird main importiert, um 
tatsächlich zu deinem main zu kommen.

W.S.

von Tom (Gast)


Lesenswert?

da ich noch blutiger Anfänger bin, bin ich davon ausgegangen, dass der 
startupcode den Keil erzeugt benutzbar ist. Naja, um ehrlich zu sein, 
wusste ich nichtmal dass eine startup-Datei benötigt wird.

Kann ich Keil überreden mir doch einen lauffähigen startupcode zu 
erzeugen?

von Bernd N (Gast)


Lesenswert?

Bei Keil sollte es doch Beispiele geben die mit einem Startup code 
versehen sind. Den verwendet man dann als "Master" und macht die 
entsprechenden Anpassungen. Für IAR oder CCS kann ich dir den gerne hier 
bereitstellen, für Keil habe ich den leider nicht für deinen Controller. 
Bin mir aber sicher das du diesen bei Keil auf der Website finden wirst.

von 32Bit (Gast)


Lesenswert?

Bernd N schrieb:
> Sieht nach fehlendem Startup Code aus

W.S. schrieb:
> Das sieht nicht wirklich gut aus.

Beides Blödsinn. Dir fehlt die SystemInit. Und das steht so eindeutig im 
log.

Wer die Initialisierung vom Cortex verstanden hat, kennt auch die 
Reihenfolge der Initialisierung und den Sinn vom [WEAK].
http://www.ti.com/tool/cmsis_device_headers


Du brauchst also die Starup nicht zu verändern, sondern überschreibst 
die notwendigen Teile (die WEAKs) einfach.

von Tom (Gast)


Lesenswert?

der startupcode wird ja von Keil eingefügt und hängt auch vom 
eingestellten Controller ab. Ich habe jetzt den Initkram auskommentiert, 
so dass kein Fehler mehr ausgegeben wird. Allerdings bleibt jetzt der 
debugger in einer Schleife innerhalb der der startupdatei hängen.

ich werde wohl einfach die startupdatei aus meinen vorgefertigten 
Projekten übernehmen

von 32Bit (Gast)


Lesenswert?

Tom schrieb:
> er startupcode wird ja von Keil

und ist Ok!

Tom schrieb:
> Ich habe jetzt den Initkram auskommentiert

nicht gut!

Tom schrieb:
> startupdatei aus meinen vorgefertigten
> Projekten

dann schau dir die Unterschiede in den Dateien einfach an???

Nimm die Startup von Keil, nimm den speziellen uC Header und die 
SystemInit von TI aus meinem Link und überschreibe die WEAK 
Interruptfunctions.

von W.S. (Gast)


Lesenswert?

Tom schrieb:
> da ich noch blutiger Anfänger bin, bin ich davon ausgegangen, dass der
> startupcode den Keil erzeugt benutzbar ist. Naja, um ehrlich zu sein,
> wusste ich nichtmal dass eine startup-Datei benötigt wird.
>
> Kann ich Keil überreden mir doch einen lauffähigen startupcode zu
> erzeugen?

Hör mal genau zu: Jeder Hersteller kocht da sein eigenes Süppchen. Was 
Keil bei "SystemInit" ganz genau tut, kannst du entweder versuchen 
herauszukriegen - oder du läßt es bleiben, sowas überhaupt selbst 
aufzurufen und machst dir deine Initialsierung selbst. Ich vermute mal 
daß diese ominöse "SystemInit" so etwa folgendes tut:
- RAM ablöschen (für Leute, die erwarten daß alles auf 0 ist, weil ja 
mal einer sowas geschrieben hat...)
- HEAP aufsetzen (für Leute, die ohne malloc, printf usw. nicht 
auskommen)
- Für vorinitialisierte Variablen Bereiche vom Flash ins RAM kopieren 
(ebenfalls für Leute, die auf nem µC genauso programmieren wollen wie am 
PC und sich dann über die 32K-Grenze bei der Freeware mokieren)

Ein gleiches gilt für den Startupcode: man kann das Zeug nehmen, was die 
Hersteller von IDE's einem vorsetzen oder man kann das bleibenlassen und 
sich seinen Startupcode selber schreiben. Ich bin für' letztere, weil 
mir eine ganze Reihe von Dingen in vorgefertigten Startups überhaupt 
nicht behagt, inbesondere die default Handler mit nem elenden "B ." sind 
mir ein Ärgernis. Dabei ist so ein Startup keine Hexerei, sowas kann man 
selbst.

W.S.

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.