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
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.
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
Tom schrieb:> Bisher hatte ich immer schon "vorgefertigte" Projekte.
Dann wird es Zeit, endlich mal ein Projekt komplett selbst zu machen.
1
Reset_HandlerPROC
2
EXPORTReset_Handler[WEAK]
3
IMPORTSystemInit
4
IMPORT__main
5
LDRR0,=SystemInit
6
BLXR0
7
LDRR0,=__main
8
BXR0
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
;VectorTableMappedtoAddress0atReset
2
AREARESET,CODE,READONLY
3
EXPORT__Vectors
4
5
__VectorsDCD__initial_sp;TopofStack
6
DCDKaltstart;ResetHandler
7
DCDNMI_Handler;NMIHandler
8
DCDHardFault_Handler;HardFaultHandler
9
...
10
11
KaltstartPROC
12
IMPORTmain
13
EXPORT__main
14
__main
15
LDRR0,=main
16
BLXR0
17
BWarmstart
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.
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?
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.
Bernd N schrieb:> Sieht nach fehlendem Startup Code ausW.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.
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
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.
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.
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.