Moin Moin,
ich bin am verzweiflen.. bitte helft mir ;-)
Aber nun erstmal zu meinem Problem: Ich habe ein laufendes STM32, das
ich im Atollic TrueStudio Lite geschrieben habe (Der Prozessor ist ein
STM32F103RBT6). Das bedeutet also ich habe ein funktionierendes Linker
file und ein startup file.
Da mein Projekt immer komplexer wird, habe ich mir überlegt doch ein
Betriebssystem einzusetzen -> FreeRTOS.
Aus den vorhandenen Beispielprojekten habe ich mir ein ganz neues leeres
Projekt zusammengeschustert, in dem ich über einen xTimer eine LED
blinken lasse. Das funktioniert.
Ich benötige aber außerdem einen Hardware Timer, der mir mit 80 kHz
einen Interrupt erzeugt. Im alten Projekt lief dieser bereits, doch nun
habe ich das folgende Problem (erstmal der Code):
Drumrum läuft gar kein Code mehr, alles auskommentiert. Wenn ich mit dem
Debugger durch das Programm steppe, stürzt es genau in der Zeile
1
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
ab und landet in der Default_Handler Routine in meinem Startup Code.
Ich habe jetzt schon an allen Schrauben rumgeschraubt ;) Ich hatte es in
Erwägung gezogen, dass mit den Interrupt Prioritäten was nicht stimmt,
wobei ich jetzt nicht mehr daran glaube. Dann habe ich überlegt, dass
vielleicht der Interrupt Handler nicht gefunden werden kann, also die
IVT vielleicht falsch ist. Aber mein Startup Code und auch mein Linker
File laufen ja im anderen Projekt, wo alles identisch ist, bis auf das
RTOS was nun im Hintergrund exisitert. Habe die entsprechenden Files
nochmal mit hochgeladen... vielleicht hat ja einer eine Idee.
Übrigens passiert bei anderen Interrupts das selbe. Egal was für einen
Interrupt ich aktiviere, sobald er auslöst, lande ich im
Default_Handler.
Wäre sooo super, wenn jemand eine Idee hat, was ich tun kann :-)
Vielen Dank!!!
Klaus schrieb:> #ifdef VECT_TAB_RAM> /* Set the Vector Table base location at 0x20000000 */> NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);> #else /* VECT_TAB_FLASH */> /* Set the Vector Table base location at 0x08000000 */> NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);> #endif
Wo liegt die Vektortabelle? Leg sie mal fest in den Flash.
Ggf. poste hier mal den ganzen Workspace.
Über dem Default_Handler im Startup file steht:
"This is the code that gets called when the processor receives an
unexpected interrupt."
Ist das denn der einzige Fall, bei dem man dort landet? Bedeutet das,
dass wirklcih etwas mit der Vektortabelle nicht stimmt?
Matthias K. schrieb:> Meinst Du im "HardFault_Handler"?
Ich weiss nicht, ob das der HardFault_Handler ist? Der Debugger springt
immer in den Default_Handler (Zeile 110 in startup_stm32f10x_md.S).
hatte so ein ähnliches Problem mal als im Interrupt händler das Flag von
Timer4 statt Timer3 zurück gesetzt wurde. Seh dir deine IRs genau an, ob
du nicht irgentwo ein falsches flag zurücksetzt, oder eines nicht
zurücksetzt.
Mazze schrieb:> Wo sind die Beschränkungen? Code-Größe etwa? Springt er deswegen ins> Nirwana?
Ab Version 3 auf 32k begrenzt. Vorherige Versionen ohne Begrenzung der
Code-Größe.
Ich bin auch auf CooCox umgestiegen. Läuft bisher sehr stabil.
Bsp. hier: Beitrag "CooCox CoIDE mit STM32F4-Discovery Board"
(zwar für F4, aber F1 sind auch kein Problem)
Klaus schrieb:> Hat keiner eine Idee, was ich tun könnte?
Anhand Deiner Codeschnippsel nicht. Das Programm soweit wie möglich
abspecken um den Fehler einzugrenzen.
Habe den Fehler gefunden, allerdings nicht verstanden. In der IDE werden
ja links alle Source files und andere Dateien des Projekts baumartig
aufgelistet. Vor den Dateien sind immer so kleine Icons mit zum Beispiel
einem kleinen "h" für Headerdateien etc. Bei meiner Sourcedatei
stm32f10x_it.c war dieses Icon irgendwie grau schattiert. Das ist mir
dummerweise erst sehr spät aufgefallen. Nach dem umbennen gibgs dann
sofort! Wenn ich die Datei nun wieder zurück umbenenne gehts wieder
nicht mehr. Sehr seltsam, aber ich begnüge mich damit, dass die Datei
jetzt anders heißt. Danke für Eure Hilfe! :-)