Problem with reset vector (Yagarto + STM32F107)

OP #2190675
Rate this post
• ▲ useful
▼ not useful
Hi,

I'm trying to understand how to use the yagarto tools (yagarto + eclipse 
+ openocd + TinyUSB) with a Olimex's STM32F107 board.
So far, using Olimex and yagarto examples, I have been able to compile 
the code.
But the reset vector doesn't point to the correct part of the code.

I have defined the vectors :
1
    __attribute__ ((section("vectors"), used))
2
    void (* const gVectors[])(void) =
3
    {
4
       (void (*)(void))((unsigned long) 0x20000A00),
5
       start_SQC,
6
       NMI_Handler,
7
       HardFault_Handler,
8
       MemManage_Handler,
9
       BusFault_Handler,
10
       UsageFault_Handler,
11
       (void (*)(void))((unsigned long) 0),
12
       (void (*)(void))((unsigned long) 0),
13
       (void (*)(void))((unsigned long) 0),
14
       (void (*)(void))((unsigned long) 0),
15
       SVC_Handler,
16
       DebugMon_Handler,
17
       (void (*)(void))((unsigned long) 0),
18
       PendSV_Handler,
19
       SysTick_Handler,
20
       ...

where start_SQC is the beginning of the code :
1
    void start_SQC(void)
2
    {
3
      SystemInit();
4
      SysTick_Config(SystemFrequency / 100);
5
      main();
6
    }

The linker is configured with the memories offsets :
1
    MEMORY
2
    {
3
      ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
4
      rom (rx) : ORIGIN = 0x00000000, LENGTH = 256K
5
    }
6
    SECTIONS
7
    {
8
      .  = 0x0;         /* From 0x00000000 */
9
      .text : {
10
        *(.vectors)     /* Vector table */
11
        *(.text)        /* Program code */
12
        *(.rodata)      /* Read only data */
13
      } >rom
14

15
      .  = 0x20000000;  /* From 0x20000000 */
16
      .data : {
17
        *(.data)        /* Data memory */
18
      } >ram AT > rom
19

20
      .bss : {
21
        *(.bss)         /* Zero-filled run time allocate data memory */
22
      } >ram AT > rom
23
    }


The problem is that the dump of the binary shows that the reset vector 
points to the main() and not to the start_SQC(), so SystemInit() is not 
executed before the user code :
1
    00000000 <main>:
2
    int main(void)
3
    {
4
       0:  b580      push  {r7, lr}
5
       2:  af00      add  r7, sp, #0
6
    }
7

8
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);
9
       4:       f04f 0014 mov.w  r0, #20
10
       8:       f04f 0101 mov.w  r1, #1
11
       c:       f000 fc12 bl   834 <RCC_APB2PeriphClockCmd>
12

13
    ...
14

15
    0000212c <SystemInit>:
16
    void SystemInit (void)
17
    {
18
       212c:    b580      push  {r7, lr}
19
       212e:    af00      add  r7, sp, #0
20

21
    ...
22

23
   000027f8 <start_SQC>:
24
   void start_SQC(void)
25
   {
26
      27f8:     b580       push {r7, lr}
27
      27fa:     af00       add  r7, sp, #0
28
   SystemInit();
29
      27fc:     f7ff fc96  bl  212c <SystemInit>
30
   SysTick_Config(SystemFrequency / 100);
31
      2800:     f642 03b0  movw r3, #10416  ; 0x28b0


Does anybody know what I'm doing wrong ?

Thank you
Regards

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.