|
8 | 8 | #define RAM_SIZE 0x40000
|
9 | 9 | #define VECTORS 195 /* This value must match NVIC_NUM_VECTORS */
|
10 | 10 |
|
11 |
| -/* Common - Do not change */ |
12 |
| - |
13 |
| -#if !defined(MBED_APP_START) |
14 |
| - #define MBED_APP_START (ROM_START + FLASH_HDR_SIZE) |
15 |
| -#endif |
16 |
| - |
17 |
| -#if !defined(MBED_APP_SIZE) |
18 |
| - #define MBED_APP_SIZE (ROM_SIZE - FLASH_HDR_SIZE) |
19 |
| -#endif |
20 |
| - |
21 | 11 | /* Round up VECTORS_SIZE to 8 bytes */
|
22 | 12 | #define VECTORS_SIZE (((VECTORS * 4) + 7) & 0xFFFFFFF8)
|
23 | 13 |
|
| 14 | +#if defined(MBED_APP_START) |
| 15 | + /* |
| 16 | + * There're two cases if MBED_APP_START is defined. |
| 17 | + * Case 1: MBED_APP_START is defined as ROM_START, this happens when restrict_size is turned on, most likely for bootloader build. |
| 18 | + * In this build, include FLASH_HDR region. |
| 19 | + */ |
| 20 | + #define FLASH_HDR_INCLUDED 1 |
| 21 | + |
| 22 | + #if MBED_APP_START == ROM_START |
| 23 | + #if defined(MBED_APP_SIZE) |
| 24 | + #define ROM_EXEC_START (ROM_START + FLASH_HDR_SIZE) |
| 25 | + #define ROM_EXEC_SIZE (MBED_APP_SIZE - FLASH_HDR_SIZE) |
| 26 | + #endif |
| 27 | + #else |
| 28 | + /* |
| 29 | + * Case 2: MBED_APP_START is defined as a value greater than ROM_START, this is most likely a build other than the bootloader. E.g., the MCC build. |
| 30 | + * In this build, exclude FLASH_HDR region. This workarounds an issue in managed boodloader MCC build where the jump address and stack pointer point to the cookie area |
| 31 | + */ |
| 32 | + #define FLASH_HDR_INCLUDED 0 |
| 33 | + #define ROM_EXEC_START MBED_APP_START |
| 34 | + #if defined(MBED_APP_SIZE) |
| 35 | + #define ROM_EXEC_SIZE MBED_APP_SIZE |
| 36 | + #else |
| 37 | + #define ROM_EXEC_SIZE (ROM_SIZE- (MBED_APP_START - ROM_START) |
| 38 | + #endif |
| 39 | + #endif |
| 40 | +#else |
| 41 | + /* |
| 42 | + * MBED_APP_START is not defined. This is most likely a bootloader build, or other apps that do not require boodloader. |
| 43 | + * In this build, include FLASH_HDR region |
| 44 | + */ |
| 45 | + #define FLASH_HDR_INCLUDED 1 |
| 46 | + #define ROM_EXEC_START (ROM_START + FLASH_HDR_SIZE) |
| 47 | + #if defined(MBED_APP_SIZE) |
| 48 | + #define ROM_EXEC_SIZE (MBED_APP_SIZE - FLASH_HDR_SIZE) |
| 49 | + #else |
| 50 | + #define ROM_EXEC_SIZE (ROM_SIZE - FLASH_HDR_SIZE) |
| 51 | + #endif |
| 52 | +#endif |
| 53 | + |
24 | 54 | MEMORY
|
25 | 55 | {
|
26 |
| - FLASH_HDR (rx) : ORIGIN = ROM_START, LENGTH = 0x800 |
27 |
| - FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE |
| 56 | + FLASH_HDR (rx) : ORIGIN = FLASH_HDR_START, LENGTH = FLASH_HDR_SIZE |
| 57 | + FLASH (rx) : ORIGIN = ROM_EXEC_START, LENGTH = ROM_EXEC_SIZE |
28 | 58 | RAM (rwx) : ORIGIN = RAM_START + VECTORS_SIZE, LENGTH = RAM_SIZE - VECTORS_SIZE
|
29 | 59 | }
|
30 | 60 |
|
@@ -58,10 +88,11 @@ ENTRY(Reset_Handler)
|
58 | 88 |
|
59 | 89 | SECTIONS
|
60 | 90 | {
|
| 91 | +#if FLASH_HDR_INCLUDED == 1 |
61 | 92 | .dbghdr : ALIGN (2048) {
|
62 | 93 | KEEP (*(.dbghdr))
|
63 | 94 | } > FLASH_HDR
|
64 |
| - |
| 95 | +#endif |
65 | 96 | .text :
|
66 | 97 | {
|
67 | 98 | KEEP(*(.isr_vector))
|
|
0 commit comments