STM32: suche Ursache HardFault Exception

OP (Firma: EleLa - www.elela.de) #3440882
Lesenswert?
• ▲
▼
Hallo,

Ich finde es einfach nicht... der Code:
1
void teste(void)
2
{
3
  uint16_t i = 0;
4
  i++;
5
  i--;
6
}
7

8
int main(void)
9
{
10
  teste();
11
  SCB->VTOR = NVIC_VectTab_FLASH | (0x2000 & (uint32_t)0x1FFFFF80);
12
  teste();
13
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);

STM32F103RC

Die Routine teste(); wird angesprungen, "SCB->VTOR" wird auch 
beschrieben, das zweite teste(); wird auch gemacht.
der Aufruf:
NVIC_SetVectorTable();
landet sofort in der HardFaultException.

Das Programm hat schon mal funktioniert und jetzt nach 3 Jahren wollte 
ich es anpassen und neu einspielen. Seither hat sich der Compiler und 
Eclipse und die Segger Firmware geändert.
Aber irgendwie glaube ich fest daran, dass der Fehler vor dem Computer 
sitzt. Aber ich komme nicht drauf, nach was ich noch suchen sollte.
Compiler schreibt keine Fehler/Warnungen, Übersetzt mit -O0.

Hat jemand einen Tipp für mich was ich noch prüfen könnte?

Grüße Markus
Gast #3441407
Lesenswert?
• ▲
▼
Bei NVIC_SetVectorTable den zweiten Parameter mal mit 32 bit 
ausprobiert?
Vielleicht hat sich die Funktion aus der Lib ja auch geändert.

Warum das nun gerade mit dem J-LINK nicht gehen sollte? Vielleicht 
irgendwelcge gdb-Einstellungen?
OP (Firma: EleLa - www.elela.de) #3441444
Lesenswert?
• ▲
▼
> Möglicherweise optimiert hier der neue Compiler und macht nix?
Nein, ist mit -O0 kompiliert, da wird nichts wegoptimiert.

>Mit dem ARM-USB-OCD soll das selbe File ja laufen
Ja, das Programm läuft. (Ist meine Heizungssteuerung.)

>Mit derm J-Link EDU hab ich seit einigen Versionen auch das Problem mit
>den Hard Faults. Wenn ich dann einfach das Programm nochmal drauflade
>funktionierts.
Wie meinst Du das?

Ich habe ca. 110KB programm.
NVIC_SetVectorTable() liegt irgendwo bei Adresse 0x0001230C, hingegen 
die Test-Funktion wie auch die main() bei 0x00002134.
Der J-LINK erkennt auch automatisch einen STM32F103RC (256KB Flash).

Ich habe das ganze mal auf einem Test-Board aufgespielt, der gleiche 
Effekt.
Hingegen kleine Programme (Blink-LED) funktionieren Problemlos.
OP (Firma: EleLa - www.elela.de) #3441451
Lesenswert?
• ▲
▼
Eine Änderung habe ich in der "core_cm3.c" gemacht, die lies sich mit 
dem neuen GCC nicht mehr übersetzen:
1
uint32_t __STREXB(uint8_t value, uint8_t *addr)
2
{
3
   uint32_t result=0;
4
  
5
   __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
6
   return(result);
7
}

Das stand vorher drin:
1
__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );

habe ich irgendwo im Forum gelesen, bin mir aber nicht wirklich sicher 
ob das korrekt ist. Vielleicht liegt es auch daran?
OP (Firma: EleLa - www.elela.de) #3441507
Lesenswert?
• ▲
▼
Der SEGGER ist schuld !!!!

Der kann nicht mehr Flashen!!!

Anbei der Screenshot vom Flash-Inhalt mit "JMem.exe" ausgelesen.

Da sieht man schön, dass der Segger JLINK nicht alles in das Flash 
schreibt!!!

Jetzt kommt die nächste Preisfrage:
Wie kann in dem J-LINK die alte Firmware wieder einspielen, so dass der 
wieder frunktioniert wie früher?
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.