Infineon XMC4700 mit OpenBLT und FreeRTOS Problem

OP #6877091
Lesenswert?

Hallo,

ich habe das Problem das ich es nicht schaffe das meinen XMC4700 mit dem 
Bootloader OpenBLT ein Dave CE Projekt mit FreeRTOS zu starten. Ich 
hatte das ganze Projekt schonmal soweit das es wenigstens schonmal etwas 
in der Main ausgeführt hatte. Jedoch ist, nach vielen versuchen das 
ganze Projekt zum laufen zu bekommen, alles nur noch gecrasht und und 
ich habe das Projekt neu aufsetzten müssen. Jetzt bleibt das Programm 
irgendwo in der irgendwo im Startup hängen aber ich weiß nicht wieso. 
Der Bootloader läuft ohne Probleme und spielt das Programm in den Flash. 
Das ganze habe ich mit dem mitgelieferten Beispielprogramm, welches eine 
LED blinken lässt, getestet.

Hier ein paar daten zu meinem Projekt:

Evalboard: KIT_XMC47_RELAX_V1 
https://www.infineon.com/cms/de/product/evaluation-boards/kit_xmc47_relax_v1/

IDE: DAVE 4
Bootloader: OpenBLT https://github.com/feaser/openblt
RTOS: FreeRTOS

Linker Skript Bootloader:
1
OUTPUT_FORMAT("elf32-littlearm")
2
OUTPUT_ARCH(arm)
3
ENTRY(Reset_Handler)
4

5
stack_size = DEFINED(stack_size) ? stack_size : 2048;
6
no_init_size = 64;
7

8
MEMORY
9
{
10
  FLASH_1_cached(RX) : ORIGIN = 0x08000000, LENGTH = 0xC000
11
  FLASH_1_uncached(RX) : ORIGIN = 0x0C000000, LENGTH = 0xC000
12
  PSRAM_1(!RX) : ORIGIN = 0x1FFE8040, LENGTH = 0x17fc0
13
  DSRAM_1_system(!RX) : ORIGIN = 0x20000000, LENGTH = 0x20000
14
  DSRAM_2_comm(!RX) : ORIGIN = 0x20020000, LENGTH = 0x20000
15
  SRAM_combined(!RX) : ORIGIN = 0x1FFE8040, LENGTH = 0x57fc0
16
  SHARED(!RX) : ORIGIN = 0x1FFE8000, LENGTH = 0x40
17
}
18

19
SECTIONS
20
{
21
    /* Shared data section that also shouldn't get zeroed */
22
    .shared (NOLOAD) :
23
    {
24
        . = ALIGN(4);
25
        _sshared = .;         /* define a global symbol at shared start */
26
        __shared_start__ = _sshared;
27
        *(.shared)
28
        *(.shared.*)
29
        KEEP(*(.shared)) 
30
        . = ALIGN(4);
31
        _eshared = .;         /* define a global symbol at shared end */
32
        __shared_end__ = _eshared;
33
    } >SHARED
34

35
    /* TEXT section */
36

37
    .text :
38
    {
39
        sText = .;
40
        KEEP(*(.reset));
41
        *(.text .text.* .gnu.linkonce.t.*);
42

43
        /* C++ Support */
44
        KEEP(*(.init))
45
        KEEP(*(.fini))
46

47
        /* .ctors */
48
        *crtbegin.o(.ctors)
49
        *crtbegin?.o(.ctors)
50
        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
51
        *(SORT(.ctors.*))
52
        *(.ctors)
53

54
        /* .dtors */
55
        *crtbegin.o(.dtors)
56
        *crtbegin?.o(.dtors)
57
        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
58
        *(SORT(.dtors.*))
59
        *(.dtors)
60

61
        *(.rodata .rodata.*)
62
        *(.gnu.linkonce.r*)
63
        
64
        *(vtable)        
65
        . = ALIGN(4);        
66
    } > FLASH_1_cached AT > FLASH_1_uncached
67

68
    .eh_frame_hdr : ALIGN (4)
69
    {
70
      KEEP (*(.eh_frame_hdr))
71
    } > FLASH_1_cached AT > FLASH_1_uncached
72
  
73
    .eh_frame : ALIGN (4)
74
    {
75
      KEEP (*(.eh_frame))
76
    } > FLASH_1_cached AT > FLASH_1_uncached
77

78
    /* Exception handling, exidx needs a dedicated section */
79
    .ARM.extab : ALIGN(4)
80
    {
81
        *(.ARM.extab* .gnu.linkonce.armextab.*)
82
    } > FLASH_1_cached AT > FLASH_1_uncached
83

84
    . = ALIGN(4);
85
    __exidx_start = .;
86
    .ARM.exidx : ALIGN(4)
87
    {
88
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
89
    } > FLASH_1_cached AT > FLASH_1_uncached
90
    __exidx_end = .;
91
    . = ALIGN(4);
92
    
93
    /* DSRAM layout (Lowest to highest)*/
94
    Stack (NOLOAD) : 
95
    {
96
        __stack_start = .;
97
        . = . + stack_size;
98
        __stack_end = .;
99
        __initial_sp = .;
100
    } > SRAM_combined
101

102
    /* functions with __attribute__((section(".ram_code"))) */
103
    .ram_code :
104
    {
105
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
106
        __ram_code_start = .;
107
        *(.ram_code)
108
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
109
        __ram_code_end = .;
110
    } > SRAM_combined AT > FLASH_1_uncached
111
    __ram_code_load = LOADADDR (.ram_code);
112
    __ram_code_size = __ram_code_end - __ram_code_start;
113

114
    /* Standard DATA and user defined DATA/BSS/CONST sections */
115
    .data :
116
    {
117
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
118
        __data_start = .;
119
        * (.data);
120
        * (.data*);
121
        *(*.data);
122
        *(.gnu.linkonce.d*)
123
      
124
        . = ALIGN(4);
125
        /* preinit data */
126
        PROVIDE_HIDDEN (__preinit_array_start = .);
127
        KEEP(*(.preinit_array))
128
        PROVIDE_HIDDEN (__preinit_array_end = .);
129

130
        . = ALIGN(4);
131
        /* init data */
132
        PROVIDE_HIDDEN (__init_array_start = .);
133
        KEEP(*(SORT(.init_array.*)))
134
        KEEP(*(.init_array))
135
        PROVIDE_HIDDEN (__init_array_end = .);
136

137
        . = ALIGN(4);
138
        /* finit data */
139
        PROVIDE_HIDDEN (__fini_array_start = .);
140
        KEEP(*(SORT(.fini_array.*)))
141
        KEEP(*(.fini_array))
142
        PROVIDE_HIDDEN (__fini_array_end = .);
143

144
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
145
        __data_end = .;
146
    } > SRAM_combined AT > FLASH_1_uncached
147
    __data_load = LOADADDR (.data);
148
    __data_size = __data_end - __data_start;
149
        
150
    __text_size = (__exidx_end - sText) + __data_size + __ram_code_size;
151
    eText = sText + __text_size;
152

153
    /* BSS section */
154
    .bss (NOLOAD) : 
155
    {
156
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
157
        __bss_start = .;
158
        * (.bss);
159
        * (.bss*);
160
        * (COMMON);
161
        *(.gnu.linkonce.b*)
162
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
163
        __bss_end = .;
164
    } > SRAM_combined
165
    __bss_size = __bss_end - __bss_start;
166

167
    /* Shift location counter, so that ETH_RAM and USB_RAM are located above DSRAM_1_system */    
168
    __shift_loc =  (__bss_end >= ORIGIN(DSRAM_1_system)) ? 0 : (ORIGIN(DSRAM_1_system) - __bss_end);
169

170
    USB_RAM  (__bss_end + __shift_loc) (NOLOAD) :
171
    {
172
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
173
        USB_RAM_start = .;
174
        *(USB_RAM)
175
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
176
        USB_RAM_end = .;
177
    } > SRAM_combined
178
    USB_RAM_size = USB_RAM_end - USB_RAM_start;
179

180
    ETH_RAM (USB_RAM_end) (NOLOAD) :
181
    {
182
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
183
        ETH_RAM_start = .;
184
        *(ETH_RAM)
185
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
186
        ETH_RAM_end = .;
187
        . = ALIGN(8);
188
        Heap_Bank1_Start = .;
189
    } > SRAM_combined
190
    ETH_RAM_size = ETH_RAM_end - ETH_RAM_start;
191

192
    /* .no_init section contains chipid, SystemCoreClock and trimming data. See system.c file*/
193
    .no_init ORIGIN(SRAM_combined) + LENGTH(SRAM_combined) - no_init_size (NOLOAD) : 
194
    {
195
        Heap_Bank1_End = .;
196
        * (.no_init);
197
    } > SRAM_combined
198

199
    /* Heap - Bank1*/
200
    Heap_Bank1_Size  = Heap_Bank1_End - Heap_Bank1_Start;
201

202
    ASSERT(Heap_Bank1_Start <= Heap_Bank1_End, "region SRAM_combined overflowed no_init section")
203

204
    /DISCARD/ :
205
    {
206
        *(.comment)
207
    }
208

209
    .stab       0 (NOLOAD) : { *(.stab) }
210
    .stabstr    0 (NOLOAD) : { *(.stabstr) }
211

212
    /* DWARF 1 */
213
    .debug              0 : { *(.debug) }
214
    .line               0 : { *(.line) }
215

216
    /* GNU DWARF 1 extensions */
217
    .debug_srcinfo      0 : { *(.debug_srcinfo) }
218
    .debug_sfnames      0 : { *(.debug_sfnames) }
219

220
    /* DWARF 1.1 and DWARF 2 */
221
    .debug_aranges      0 : { *(.debug_aranges) }
222
    .debug_pubnames     0 : { *(.debug_pubnames) }
223
    .debug_pubtypes     0 : { *(.debug_pubtypes) }
224

225
    /* DWARF 2 */
226
    .debug_info         0 : { *(.debug_info .gnu.linkonce.wi.*) }
227
    .debug_abbrev       0 : { *(.debug_abbrev) }
228
    .debug_line         0 : { *(.debug_line) }
229
    .debug_frame        0 : { *(.debug_frame) }
230
    .debug_str          0 : { *(.debug_str) }
231
    .debug_loc          0 : { *(.debug_loc) }
232
    .debug_macinfo      0 : { *(.debug_macinfo) }
233

234
    /* DWARF 2.1 */
235
    .debug_ranges       0 : { *(.debug_ranges) }
236

237
    /* SGI/MIPS DWARF 2 extensions */
238
    .debug_weaknames    0 : { *(.debug_weaknames) }
239
    .debug_funcnames    0 : { *(.debug_funcnames) }
240
    .debug_typenames    0 : { *(.debug_typenames) }
241
    .debug_varnames     0 : { *(.debug_varnames) }
242

243
    /* Build attributes */
244
    .build_attributes   0 : { *(.ARM.attributes) }
245
}

Linker Skript Programm:
1
OUTPUT_FORMAT("elf32-littlearm")
2
OUTPUT_ARCH(arm)
3
ENTRY(Reset_Handler)
4

5
stack_size = DEFINED(stack_size) ? stack_size : 2048;
6
no_init_size = 64;
7

8
MEMORY
9
{
10
    FLASH_1_cached(RX) : ORIGIN = 0x0800C000, LENGTH = 0x1f4000
11
    FLASH_1_uncached(RX) : ORIGIN = 0x0C00C000, LENGTH = 0x1f4000
12
    PSRAM_1(!RX) : ORIGIN = 0x1FFE8000, LENGTH = 0x18000
13
    DSRAM_1_system(!RX) : ORIGIN = 0x20000000, LENGTH = 0x20000
14
    DSRAM_2_comm(!RX) : ORIGIN = 0x20020000, LENGTH = 0x20000
15
    SRAM_combined(!RX) : ORIGIN = 0x1FFE8000, LENGTH = 0x00058000
16
    SHARED(!RX) : ORIGIN = 0x1FFE8000, LENGTH = 0x40
17
}
18

19
SECTIONS
20
{
21
    /* Shared data section that also shouldn't get zeroed */
22
    .shared (NOLOAD) :
23
    {
24
        . = ALIGN(4);
25
        _sshared = .;         /* define a global symbol at shared start */
26
        __shared_start__ = _sshared;
27
        *(.shared)
28
        *(.shared.*)
29
        KEEP(*(.shared)) 
30
        . = ALIGN(4);
31
        _eshared = .;         /* define a global symbol at shared end */
32
        __shared_end__ = _eshared;
33
    } >SHARED
34
    
35
    /* TEXT section */
36

37
    .text :
38
    {
39
        sText = .;
40
        KEEP(*(.reset));
41
        *(.text .text.* .gnu.linkonce.t.*);
42

43
        /* C++ Support */
44
        KEEP(*(.init))
45
        KEEP(*(.fini))
46

47
        /* .ctors */
48
        *crtbegin.o(.ctors)
49
        *crtbegin?.o(.ctors)
50
        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
51
        *(SORT(.ctors.*))
52
        *(.ctors)
53

54
        /* .dtors */
55
        *crtbegin.o(.dtors)
56
        *crtbegin?.o(.dtors)
57
        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
58
        *(SORT(.dtors.*))
59
        *(.dtors)
60

61
        *(.rodata .rodata.*)
62
        *(.gnu.linkonce.r*)
63
        
64
        *(vtable)        
65
        . = ALIGN(4);        
66
    } > FLASH_1_cached AT > FLASH_1_uncached
67

68
    .eh_frame_hdr : ALIGN (4)
69
    {
70
      KEEP (*(.eh_frame_hdr))
71
    } > FLASH_1_cached AT > FLASH_1_uncached
72
  
73
    .eh_frame : ALIGN (4)
74
    {
75
      KEEP (*(.eh_frame))
76
    } > FLASH_1_cached AT > FLASH_1_uncached
77

78
    /* Exception handling, exidx needs a dedicated section */
79
    .ARM.extab : ALIGN(4)
80
    {
81
        *(.ARM.extab* .gnu.linkonce.armextab.*)
82
    } > FLASH_1_cached AT > FLASH_1_uncached
83

84
    . = ALIGN(4);
85
    __exidx_start = .;
86
    .ARM.exidx : ALIGN(4)
87
    {
88
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
89
    } > FLASH_1_cached AT > FLASH_1_uncached
90
    __exidx_end = .;
91
    . = ALIGN(4);
92
    
93
    /* DSRAM layout (Lowest to highest)*/
94
    Stack (NOLOAD) : 
95
    {
96
        __stack_start = .;
97
        . = . + stack_size;
98
        __stack_end = .;
99
        __initial_sp = .;
100
    } > SRAM_combined
101

102
    /* functions with __attribute__((section(".ram_code"))) */
103
    .ram_code :
104
    {
105
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
106
        __ram_code_start = .;
107
        *(.ram_code)
108
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
109
        __ram_code_end = .;
110
    } > SRAM_combined AT > FLASH_1_uncached
111
    __ram_code_load = LOADADDR (.ram_code);
112
    __ram_code_size = __ram_code_end - __ram_code_start;
113

114
    /* Standard DATA and user defined DATA/BSS/CONST sections */
115
    .data :
116
    {
117
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
118
        __data_start = .;
119
        * (.data);
120
        * (.data*);
121
        *(*.data);
122
        *(.gnu.linkonce.d*)
123
      
124
        . = ALIGN(4);
125
        /* preinit data */
126
        PROVIDE_HIDDEN (__preinit_array_start = .);
127
        KEEP(*(.preinit_array))
128
        PROVIDE_HIDDEN (__preinit_array_end = .);
129

130
        . = ALIGN(4);
131
        /* init data */
132
        PROVIDE_HIDDEN (__init_array_start = .);
133
        KEEP(*(SORT(.init_array.*)))
134
        KEEP(*(.init_array))
135
        PROVIDE_HIDDEN (__init_array_end = .);
136

137
        . = ALIGN(4);
138
        /* finit data */
139
        PROVIDE_HIDDEN (__fini_array_start = .);
140
        KEEP(*(SORT(.fini_array.*)))
141
        KEEP(*(.fini_array))
142
        PROVIDE_HIDDEN (__fini_array_end = .);
143

144
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
145
        __data_end = .;
146
    } > SRAM_combined AT > FLASH_1_uncached
147
    __data_load = LOADADDR (.data);
148
    __data_size = __data_end - __data_start;
149
        
150
    __text_size = (__exidx_end - sText) + __data_size + __ram_code_size;
151
    eText = sText + __text_size;
152

153
    /* BSS section */
154
    .bss (NOLOAD) : 
155
    {
156
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
157
        __bss_start = .;
158
        * (.bss);
159
        * (.bss*);
160
        * (COMMON);
161
        *(.gnu.linkonce.b*)
162
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
163
        __bss_end = .;
164
    } > SRAM_combined
165
    __bss_size = __bss_end - __bss_start;
166

167
    /* Shift location counter, so that ETH_RAM and USB_RAM are located above DSRAM_1_system */    
168
    __shift_loc =  (__bss_end >= ORIGIN(DSRAM_1_system)) ? 0 : (ORIGIN(DSRAM_1_system) - __bss_end);
169

170
    USB_RAM  (__bss_end + __shift_loc) (NOLOAD) :
171
    {
172
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
173
        USB_RAM_start = .;
174
        *(USB_RAM)
175
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
176
        USB_RAM_end = .;
177
    } > SRAM_combined
178
    USB_RAM_size = USB_RAM_end - USB_RAM_start;
179

180
    ETH_RAM (USB_RAM_end) (NOLOAD) :
181
    {
182
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
183
        ETH_RAM_start = .;
184
        *(ETH_RAM)
185
        . = ALIGN(4); /* section size must be multiply of 4. See startup.S file */
186
        ETH_RAM_end = .;
187
        . = ALIGN(8);
188
        Heap_Bank1_Start = .;
189
    } > SRAM_combined
190
    ETH_RAM_size = ETH_RAM_end - ETH_RAM_start;
191

192
    /* .no_init section contains chipid, SystemCoreClock and trimming data. See system.c file*/
193
    .no_init ORIGIN(SRAM_combined) + LENGTH(SRAM_combined) - no_init_size (NOLOAD) : 
194
    {
195
        Heap_Bank1_End = .;
196
        * (.no_init);
197
    } > SRAM_combined
198

199
    /* Heap - Bank1*/
200
    Heap_Bank1_Size  = Heap_Bank1_End - Heap_Bank1_Start;
201

202
    ASSERT(Heap_Bank1_Start <= Heap_Bank1_End, "region SRAM_combined overflowed no_init section")
203

204
    /DISCARD/ :
205
    {
206
        *(.comment)
207
    }
208

209
    .stab       0 (NOLOAD) : { *(.stab) }
210
    .stabstr    0 (NOLOAD) : { *(.stabstr) }
211

212
    /* DWARF 1 */
213
    .debug              0 : { *(.debug) }
214
    .line               0 : { *(.line) }
215

216
    /* GNU DWARF 1 extensions */
217
    .debug_srcinfo      0 : { *(.debug_srcinfo) }
218
    .debug_sfnames      0 : { *(.debug_sfnames) }
219

220
    /* DWARF 1.1 and DWARF 2 */
221
    .debug_aranges      0 : { *(.debug_aranges) }
222
    .debug_pubnames     0 : { *(.debug_pubnames) }
223
    .debug_pubtypes     0 : { *(.debug_pubtypes) }
224

225
    /* DWARF 2 */
226
    .debug_info         0 : { *(.debug_info .gnu.linkonce.wi.*) }
227
    .debug_abbrev       0 : { *(.debug_abbrev) }
228
    .debug_line         0 : { *(.debug_line) }
229
    .debug_frame        0 : { *(.debug_frame) }
230
    .debug_str          0 : { *(.debug_str) }
231
    .debug_loc          0 : { *(.debug_loc) }
232
    .debug_macinfo      0 : { *(.debug_macinfo) }
233

234
    /* DWARF 2.1 */
235
    .debug_ranges       0 : { *(.debug_ranges) }
236

237
    /* SGI/MIPS DWARF 2 extensions */
238
    .debug_weaknames    0 : { *(.debug_weaknames) }
239
    .debug_funcnames    0 : { *(.debug_funcnames) }
240
    .debug_typenames    0 : { *(.debug_typenames) }
241
    .debug_varnames     0 : { *(.debug_varnames) }
242

243
    /* Build attributes */
244
    .build_attributes   0 : { *(.ARM.attributes) }
245
}
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren