Pages: 1 ... 3 4 [5]
|
|
|
|
Author
|
Topic: "dies und das" zur Version vom 30.06.2017 (Read 7612 times)
|
|
dl8mby
alter Hase
Offline
Posts: 363
Ich liebe dieses Forum!
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #60 on: 02. July 2017, 16:36:28 »
|
|
Hallo Danilo,
danke!
Das erklärt wohl meinen Linker Fehler, den ich prompt bekommen habe.
/tmp/ccWMTk9W.ltrans1.ltrans.o: In function `HardFault_Handler': ~/mchfTRX/wrk/20170701/src/mchf_main.c:89: undefined reference to `prvGetRegistersFromStack' collect2: error: ld returned 1 exit status Makefile:247: recipe for target 'fw-mchf.elf' failed make: *** [fw-mchf.elf] Error 1
Werde es entsprechend ausbessern.
Markus
|
|
Logged
|
|
|
|
dl8mby
alter Hase
Offline
Posts: 363
Ich liebe dieses Forum!
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #61 on: 02. July 2017, 16:43:37 »
|
|
Leider sind beim Linken noch Probleme aufgetreten:
[LD] fw-mchf.elf basesw/mcHF/Src/stm32f4xx_it.o (symbol from plugin): In function `OTG_HS_IRQHandler': (.text+0x0): multiple definition of `HardFault_Handler' src/mchf_main.o (symbol from plugin):(.text+0x0): first defined here basesw/mcHF/Src/stm32f4xx_it.c:69:6: error: 'HardFault_Handler' has already been defined void HardFault_Handler(void) ^ src/mchf_main.c:87:6: note: previously defined here void HardFault_Handler(void) ^ lto1: fatal error: errors during merging of translation units compilation terminated. lto-wrapper: fatal error: /usr/bin/arm-none-eabi-g++ returned 1 exit status compilation terminated. /usr/lib64/gcc/arm-none-eabi/5/../../../../arm-none-eabi/bin/ld: error: lto-wrapper failed collect2: error: ld returned 1 exit status Makefile:247: recipe for target 'fw-mchf.elf' failed make: *** [fw-mchf.elf] Error 1
Markus
|
|
Logged
|
|
|
|
|
|
dl8mby
alter Hase
Offline
Posts: 363
Ich liebe dieses Forum!
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #64 on: 02. July 2017, 16:53:26 »
|
|
Hallo Andreas, hallo Danilo,
habe es gerade selber gesehen und in dieser Datei die Ergänzung, die den Registersatz sichert eingebaut.
Hoffe, dass das Compilieren jetzt klappt.
Markus
../basesw/mcHF/Src/stm32f4xx_it.c
void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */
__asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" );
/* USER CODE END HardFault_IRQn 0 */ while (1) { } /* USER CODE BEGIN HardFault_IRQn 1 */
/* USER CODE END HardFault_IRQn 1 */ }
|
|
Logged
|
|
|
|
DB4PLE
positron Urgestein
Offline
Posts: 1278
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #65 on: 02. July 2017, 17:06:11 »
|
|
Hallo Markus,
ja, Du musst natürlich den "alten" HardFault_Handler aus der stm32f7xx_it.c rauswerfen. Aber das ist ein gutes Zeichen, denn dass heißt, der will den von Dir eingefügten Handler auch verwenden.
@Andreas: Es muss ein HardFault sein (alles andere wäre noch unlogischer). Wenn es dass nicht ist, dann werden wir viel gelernt haben und weitersuchen...
73 Danilo
|
|
Logged
|
|
|
|
dl8mby
alter Hase
Offline
Posts: 363
Ich liebe dieses Forum!
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #66 on: 02. July 2017, 17:14:38 »
|
|
Hallo Danilo,
jetzt brauche ich noch einen Tipp, wie ich den XXX-Teil zu nennen habe, damit der Linker in der stm32f4xx_it.c die Referent auf die prvGetRegistersFromStack Funktion findet.
Oder gehört dies nicht an diese Stelle.
extern habe ich schon versucht, hat aber nicht geklappt.
extern void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress ) eine Zeile vor den HardFault_Handler in der stm32f4xx_it.c deklariert, leider kein Erfolg.
stm32f4xx_it.c ..... /* External variables --------------------------------------------------------*/ extern PCD_HandleTypeDef hpcd_USB_OTG_FS; extern HCD_HandleTypeDef hhcd_USB_OTG_HS; extern DMA_HandleTypeDef hdma_spi3_tx; extern DMA_HandleTypeDef hdma_i2s3_ext_rx; extern DMA_HandleTypeDef hdma_spi2_tx; extern XXX_HandleTypeDef prvGetRegistersFromStack;
....
/** * @brief This function handles Hard fault interrupt. */ void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */
__asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" );
/* USER CODE END HardFault_IRQn 0 */ while (1) { } /* USER CODE BEGIN HardFault_IRQn 1 */
/* USER CODE END HardFault_IRQn 1 */ }
oder meine erste Variante:
stm32f4xx_it.c ...
extern void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress );
void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */
__asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" ); ....
Markus
|
|
Logged
|
|
|
|
DB4PLE
positron Urgestein
Offline
Posts: 1278
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #67 on: 02. July 2017, 17:18:58 »
|
|
Hallo Markus,
jetzt ganz langsam:
stm32f7xx_it.c: In original Zustand versetzen:
git checkout <pfad_zu>/stm32f7xx_it.c
Dann kommentierst Du einfach in stm32f7xx_it.c die Funktion HardFault_Handler aus. Am besten #if 0 ... #endif um die Funktion rum.
Nun findet der Linker deine Funktion HardFault_Handler in mchf_main.c und nutzt die, d.h. die Kompilierung funktioniert.
73 Danilo
|
« Last Edit: 02. July 2017, 17:19:47 by DB4PLE » |
Logged
|
|
|
|
dl8mby
alter Hase
Offline
Posts: 363
Ich liebe dieses Forum!
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #68 on: 02. July 2017, 17:29:50 »
|
|
Hallo Danilo,
während Du den Post geschrieben hast, habe ich den Teil des HardFault_Handler aus basesw/mcHF/Src/stm32f4xx_it.c entfernt (Auskommentiert mit //) und den HardFault_Handler wieder in der mchf_main.c aktiviert, den ich zuvor auskommentiert habe.
Trotzdem habe ich noch einen LD Error.
Werde nun Deine Vorgehensweise anwenden.
Markus
mchf_main.c ===========
// catch and debug hard faults
/* The prototype shows it is a naked function - in effect this is just an assembly function. */ //void HardFault_Handler( void ) __attribute__( ( naked ) );
static void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress ) { /* These are volatile to try and prevent the compiler/linker optimising them away as the variables never actually get used. If the debugger won't show the values of the variables, make them global my moving their declaration outside of this function. */ volatile uint32_t r0; volatile uint32_t r1; volatile uint32_t r2; volatile uint32_t r3; volatile uint32_t r12; volatile uint32_t lr; /* Link register. */ volatile uint32_t pc; /* Program counter. */ volatile uint32_t psr;/* Program status register. */ r0 = pulFaultStackAddress[ 0 ]; r1 = pulFaultStackAddress[ 1 ]; r2 = pulFaultStackAddress[ 2 ]; r3 = pulFaultStackAddress[ 3 ]; r12 = pulFaultStackAddress[ 4 ]; lr = pulFaultStackAddress[ 5 ]; pc = pulFaultStackAddress[ 6 ]; psr = pulFaultStackAddress[ 7 ];
/* When the following line is hit, the variables contain the register values. */ for( ;; ); }
/* The fault handler implementation calls a function called prvGetRegistersFromStack(). */ void HardFault_Handler(void) { __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" ); }
// end catch and debug hard faults
[LD] fw-mchf.elf /tmp/ccK0rSXl.ltrans1.ltrans.o: In function `HardFault_Handler': ~/mchfTRX/wrk/20170701/src/mchf_main.c:118: undefined reference to `prvGetRegistersFromStack' collect2: error: ld returned 1 exit status Makefile:247: recipe for target 'fw-mchf.elf' failed make: *** [fw-mchf.elf] Error 1 markus@HP87:~/mchfTRX/wrk/20170701 >vi ./src/mchf_main.c
|
|
Logged
|
|
|
|
dl8mby
alter Hase
Offline
Posts: 363
Ich liebe dieses Forum!
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #69 on: 02. July 2017, 17:33:10 »
|
|
PS.:
hast Du dich da verschrieben mit der 7 statt der 4 bei git checkout <pfad_zu>/stm32f7xx_it.c.
Ich compiliere für für den 407 (bzw. den 429 aber mit 407 Setting im Makefile)
MACHFLAGS_F4 := .... -DSTM32F407xx ....
Markus
|
|
Logged
|
|
|
|
DB4PLE
positron Urgestein
Offline
Posts: 1278
|
|
Re:"dies und das" zur Version vom 30.06.2017
« Reply #70 on: 02. July 2017, 17:47:04 »
|
|
Sorry,
Richtig: stm32f4xx_it.c. Habe zuviel am OVI40 gemacht die Tage...
Du musst noch dass static vor der Funktion prvGet ... entfernen, dann sieht das der Linker auch, wenn er mal nachschaut.
73 Danilo
|
|
Logged
|
|
|
|
Pages: 1 ... 3 4 [5]
|
|
|
|
|
|
|