@@ -12,13 +12,13 @@ RESERVE_RTC_SLOW = 0;
12
12
/* Specify main memory areas */
13
13
MEMORY
14
14
{
15
- reserved1_seg ( RWX ) : ORIGIN = 0x40070000, len = 0x10000 /* SRAM0 64kB ; reserved for usage as flash cache*/
16
- vectors ( RX ) : ORIGIN = 0x40080000, len = 0x400 /* SRAM0 1kB */
17
- iram_seg ( RX ) : ORIGIN = 0x40080400, len = 0x20000 -0x400 /* SRAM0 127kB */
15
+ reserved1_seg ( RWX ) : ORIGIN = 0x40070000, len = 64k /* SRAM0; reserved for usage as flash cache*/
16
+ vectors ( RX ) : ORIGIN = 0x40080000, len = 1k /* SRAM0 */
17
+ iram_seg ( RX ) : ORIGIN = 0x40080400, len = 128k -0x400 /* SRAM0 */
18
18
19
- reserved2_seg ( RW ) : ORIGIN = 0x3FFAE000, len = 0x2000 /* SRAM2 8kB ; reserved for usage by the ROM */
20
- dram_seg ( RW ) : ORIGIN = 0x3FFB0000 + RESERVE_DRAM, len = 0x2c200 - RESERVE_DRAM /* SRAM2+1 176.5kB ; first 64kB used by BT if enable */
21
- reserved3_seg ( RW ) : ORIGIN = 0x3FFDC200, len = 0x23e00 /* SRAM1 143.5kB ; reserved for static ROM usage; can be used for heap */
19
+ reserved2_seg ( RW ) : ORIGIN = 0x3FFAE000, len = 8k /* SRAM2; reserved for usage by the ROM */
20
+ dram_seg ( RW ) : ORIGIN = 0x3FFB0000 + RESERVE_DRAM, len = 176k - RESERVE_DRAM /* SRAM2+1; first 64kB used by BT if enable */
21
+ reserved3_seg ( RW ) : ORIGIN = 0x3FFDC200, len = 144k /* SRAM1; reserved for static ROM usage; can be used for heap */
22
22
23
23
/* external flash
24
24
The 0x20 offset is a convenience for the app binary image generation.
@@ -27,69 +27,68 @@ MEMORY
27
27
header. Setting this offset makes it simple to meet the flash cache MMU's
28
28
constraint that (paddr % 64KB == vaddr % 64KB).)
29
29
*/
30
- irom_seg ( RX ) : ORIGIN = 0x400D8020 , len = 0x330000-0x20 /* 3MB */
31
- drom_seg ( R ) : ORIGIN = 0x3F400020, len = 0x400000-0x20 /* 4MB */
30
+ irom_seg ( RX ) : ORIGIN = 0x400D0020 , len = 3M - 0x20
31
+ drom_seg ( R ) : ORIGIN = 0x3F400020, len = 4M - 0x20
32
32
33
33
34
34
/* RTC fast memory (executable). Persists over deep sleep. Only for core 0 (PRO_CPU) */
35
- rtc_fast_iram_seg (RWX) : ORIGIN = 0x400C0000, len = 0x2000 /* 8kB */
35
+ rtc_fast_iram_seg (RWX) : ORIGIN = 0x400C0000, len = 8k
36
36
37
37
/* RTC fast memory (same block as above), viewed from data bus. Only for core 0 (PRO_CPU) */
38
- rtc_fast_dram_seg (RW) : ORIGIN = 0x3ff80000 + RESERVE_RTC_FAST, len = 0x2000 - RESERVE_RTC_FAST /* 8kB */
38
+ rtc_fast_dram_seg (RW) : ORIGIN = 0x3FF80000 + RESERVE_RTC_FAST, len = 8k - RESERVE_RTC_FAST
39
39
40
40
/* RTC slow memory (data accessible). Persists over deep sleep. */
41
- rtc_slow_seg (RW) : ORIGIN = 0x50000000 + RESERVE_RTC_SLOW, len = 0x2000 - RESERVE_RTC_SLOW /* 8kB */
41
+ rtc_slow_seg (RW) : ORIGIN = 0x50000000 + RESERVE_RTC_SLOW, len = 8k - RESERVE_RTC_SLOW
42
42
43
43
/* external memory, including data and text,
44
44
4MB is the maximum, if external psram is bigger, paging is required */
45
- psram_seg (RWX) : ORIGIN = 0x3F800000, len = 0x400000 /* 4MB */
45
+ psram_seg (RWX) : ORIGIN = 0x3F800000, len = 4M
46
46
}
47
47
48
48
/* map generic regions to output sections */
49
- REGION_ALIAS("ROTEXT", irom_seg);
50
- REGION_ALIAS("RODATA", drom_seg);
51
- REGION_ALIAS("RWDATA", dram_seg);
49
+ INCLUDE "alias.x"
50
+
51
+ PROVIDE ( __pre_init = ESP32PreInit );
52
52
53
53
/* esp32 specific regions */
54
54
SECTIONS {
55
55
.rwtext :
56
56
{
57
57
. = ALIGN (4);
58
58
*(.rwtext.literal .rwtext .rwtext.literal.* .rwtext.*)
59
- } > iram_seg
59
+ } > iram_seg AT > RODATA
60
60
61
61
.rtc_fast.text : {
62
62
. = ALIGN (4);
63
63
*(.rtc_fast.literal .rtc_fast.text .rtc_fast.literal.* .rtc_fast.text.*)
64
- } > rtc_fast_iram_seg
64
+ } > rtc_fast_iram_seg AT > RODATA
65
65
66
66
/*
67
67
This section is required to skip rtc.text area because rtc_iram_seg and
68
68
rtc_data_seg are reflect the same address space on different buses.
69
69
*/
70
70
.rtc_fast.dummy (NOLOAD) :
71
71
{
72
- _rtc_dummy_start = ABSOLUTE (.);
73
- _rtc_fast_start = ABSOLUTE (.);
72
+ _rtc_dummy_start = ABSOLUTE (.); /* needed to make section proper size */
74
73
. = SIZEOF (.rtc_fast.text);
75
- _rtc_dummy_end = ABSOLUTE (.);
74
+ _rtc_dummy_end = ABSOLUTE (.); /* needed to make section proper size */
76
75
} > rtc_fast_dram_seg
77
76
78
77
79
78
.rtc_fast.data :
80
79
{
81
- . = ALIGN (4);
82
80
_rtc_fast_data_start = ABSOLUTE (.);
81
+ . = ALIGN (4);
83
82
*(.rtc_fast.data .rtc_fast.data.*)
84
83
_rtc_fast_data_end = ABSOLUTE (.);
85
- } > rtc_fast_dram_seg
84
+ } > rtc_fast_dram_seg AT > RODATA
86
85
87
- _rtc_fast_data_start_loadaddr = LOADADDR (.data);
86
+ _rtc_fast_data_load = LOADADDR (.rtc_fast .data);
88
87
89
88
.rtc_fast.bss (NOLOAD) :
90
89
{
91
- . = ALIGN (4);
92
90
_rtc_fast_bss_start = ABSOLUTE (.);
91
+ . = ALIGN (4);
93
92
*(.rtc_fast.bss .rtc_fast.bss.*)
94
93
_rtc_fast_bss_end = ABSOLUTE (.);
95
94
} > rtc_fast_dram_seg
@@ -104,22 +103,22 @@ SECTIONS {
104
103
.rtc_slow.text : {
105
104
. = ALIGN (4);
106
105
*(.rtc_slow.literal .rtc_slow.text .rtc_slow.literal.* .rtc_slow.text.*)
107
- } > rtc_slow_seg
106
+ } > rtc_slow_seg AT > RODATA
108
107
109
108
.rtc_slow.data :
110
109
{
111
- . = ALIGN (4);
112
110
_rtc_slow_data_start = ABSOLUTE (.);
111
+ . = ALIGN (4);
113
112
*(.rtc_slow.data .rtc_slow.data.*)
114
113
_rtc_slow_data_end = ABSOLUTE (.);
115
- } > rtc_slow_seg
114
+ } > rtc_slow_seg AT > RODATA
116
115
117
- _rtc_slow_data_start_loadaddr = LOADADDR (.data);
116
+ _rtc_slow_data_load = LOADADDR (.rtc_slow .data);
118
117
119
118
.rtc_slow.bss (NOLOAD) :
120
119
{
121
- . = ALIGN (4);
122
120
_rtc_slow_bss_start = ABSOLUTE (.);
121
+ . = ALIGN (4);
123
122
*(.rtc_slow.bss .rtc_slow.bss.*)
124
123
_rtc_slow_bss_end = ABSOLUTE (.);
125
124
} > rtc_slow_seg
@@ -130,4 +129,28 @@ SECTIONS {
130
129
*(.rtc_slow.noinit .rtc_slow.noinit.*)
131
130
} > rtc_slow_seg
132
131
132
+ .external.data :
133
+ {
134
+ _external_data_start = ABSOLUTE (.);
135
+ . = ALIGN (4);
136
+ *(.external.data .external.data.*)
137
+ _external_data_end = ABSOLUTE (.);
138
+ } > psram_seg AT > RODATA
139
+
140
+ _external_data_load = LOADADDR (.external.data);
141
+
142
+ .external.bss (NOLOAD) :
143
+ {
144
+ _external_bss_start = ABSOLUTE (.);
145
+ . = ALIGN (4);
146
+ *(.external.bss .external.bss.*)
147
+ _external_bss_end = ABSOLUTE (.);
148
+ } > psram_seg
149
+
150
+ .external.noinit (NOLOAD) :
151
+ {
152
+ . = ALIGN (4);
153
+ *(.external.noinit .external.noinit.*)
154
+ } > psram_seg
133
155
}
156
+
0 commit comments