logo
Welcome, Guest. Please Login or Register.
18. May 2024, 17:26:08


Home Help Search Login RegisterWIKIUHSDR Download

Amateurfunk Sulingen
Diskussions- und Newsboard des DARC-Ortsverbandes I40  |  allgemeine Kategorie  |  mcHF Projekt Deutsch / English (here you can discuss everything related to mcHF) (Moderators: DF8OE, DL1PQ)  |  Topic: "dies und das" zur Version vom 30.06.2017 <- zurück vorwärts ->
Pages: 1 ... 3 4 [5] Go Down Print
   Author  Topic: "dies und das" zur Version vom 30.06.2017  (Read 7612 times)
dl8mby
alter Hase
****

Offline

Posts: 363



Ich liebe dieses Forum!

View Profile
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!

View Profile
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
DF8OE
Administrator
*****

Offline

Posts: 6268



Stellvertr. OVV I40, Jugend / Nachwuchsreferent

View Profile WWW
Re:"dies und das" zur Version vom 30.06.2017
« Reply #62 on: 02. July 2017, 16:46:35 »

Das Ganze hat auch für mich (nur vom Mitlesen) einen hohen Lernfaktor. Ich tippe aber, dass es sich NICHT um einen "HardFault" handelt. Nullreferenzierte Zeiger etc. kommen entweder bei allen vor oder bei keinem. Und da alle meine mcHFs (und scheinbar auch die aller anderen OMs) eben diesen Fehler nicht zeigen, vermute ich eine andere Ursache. Und ich bin gespannt, ob man die mit diesem "Waffenarsenal" ermitteln kann.

Ich lese begeistert mit!

Viel Erfolg
vy 73
Andreas
Logged

Wenn der Wind des Wandels weht, nageln die einen Fenster und Türen zu und verbarrikadieren sich. Die anderen gehen nach draußen und bauen Windmühlen...
qrz.com-Seite von DF8OE
-----------------------------------------------------
>>>> Die Inhalte meiner Beiträge dürfen ohne meine explizite Erlaubnis in jedwedem Medium weiterverbreitet werden! <<<<
DF8OE
Administrator
*****

Offline

Posts: 6268



Stellvertr. OVV I40, Jugend / Nachwuchsreferent

View Profile WWW
Re:"dies und das" zur Version vom 30.06.2017
« Reply #63 on: 02. July 2017, 16:48:12 »

Nimm mal deine Definition aus mchf_main.c:87:6 raus. Die Funktion ist bereits definiert.

EDIT:
Bedeutet, dass Du den Code von der main.c in die andere Datei schieben musst. Oder dort die Codeteile ausdokumentieren.

vy 73
Andreas
« Last Edit: 02. July 2017, 16:52:20 by DF8OE » Logged

Wenn der Wind des Wandels weht, nageln die einen Fenster und Türen zu und verbarrikadieren sich. Die anderen gehen nach draußen und bauen Windmühlen...
qrz.com-Seite von DF8OE
-----------------------------------------------------
>>>> Die Inhalte meiner Beiträge dürfen ohne meine explizite Erlaubnis in jedwedem Medium weiterverbreitet werden! <<<<
dl8mby
alter Hase
****

Offline

Posts: 363



Ich liebe dieses Forum!

View Profile
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





View Profile
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!

View Profile
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





View Profile
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!

View Profile
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!

View Profile
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





View Profile
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] Go Up Print 
Diskussions- und Newsboard des DARC-Ortsverbandes I40  |  allgemeine Kategorie  |  mcHF Projekt Deutsch / English (here you can discuss everything related to mcHF) (Moderators: DF8OE, DL1PQ)  |  Topic: "dies und das" zur Version vom 30.06.2017 <- zurück vorwärts ->
Jump to: 


Login with username, password and session length

 Es wird die Verwendung von Browsern die auf der "Blink"-Engine basieren und mindestens
1024x768 Pixel Bildschirmauflösung für die beste Darstellung empfohlen
 
Amateurfunk Die Beiträge sind, sofern nicht anders vermerkt, unter der folgenden Lizenz veröffentlicht:
GNU Free Documentation License 1.3 GNU Free Documentation License 1.3
verbindet!
Powered by MySQL Powered by PHP Diskussions- und Newsboard des DARC-Ortsverbandes I40 | Powered by YaBB SE
© 2001-2004, YaBB SE Dev Team. All Rights Reserved.
- modified by Andreas Richter (DF8OE)
Impressum & Disclaimer
Valid XHTML 1.0! Valid CSS!