ソースを参照

esp32: modify ld file to fix a crash issue

Liu Zhi Fu 9 年 前
コミット
a575b9e893

+ 2 - 2
components/esp32/heap_alloc_caps.c

@@ -170,7 +170,7 @@ Warning: These variables are assumed to have the start and end of the data and i
 area used statically by the program, respectively. These variables are defined in the ld
 file.
 */
-extern int _bss_start, _heap_start, _init_start, _iram_text_end;
+extern int _data_start, _heap_start, _init_start, _iram_text_end;
 
 /*
 Initialize the heap allocator. We pass it a bunch of region descriptors, but we need to modify those first to accommodate for 
@@ -183,7 +183,7 @@ void heap_alloc_caps_init() {
     //Compile-time assert to see if we don't have more tags than is set in heap_regions.h
     _Static_assert((sizeof(tag_desc)/sizeof(tag_desc[0]))-1 <= HEAPREGIONS_MAX_TAGCOUNT, "More than HEAPREGIONS_MAX_TAGCOUNT tags defined!");
     //Disable the bits of memory where this code is loaded.
-    disable_mem_region(&_bss_start, &_heap_start);            //DRAM used by bss/data static variables
+    disable_mem_region(&_data_start, &_heap_start);           //DRAM used by bss/data static variables
     disable_mem_region(&_init_start, &_iram_text_end);        //IRAM used by code
     disable_mem_region((void*)0x3ffae000, (void*)0x3ffb0000); //knock out ROM data region
     disable_mem_region((void*)0x40070000, (void*)0x40078000); //CPU0 cache region

+ 1 - 1
components/esp32/ld/esp32.common.ld

@@ -103,7 +103,6 @@ SECTIONS
     *libesp32.a:panic.o(.rodata .rodata.*)
     _data_end = ABSOLUTE(.);
     . = ALIGN(4);
-    _heap_start = ABSOLUTE(.);
   } >dram0_0_seg
 
   /* Shared RAM */
@@ -127,6 +126,7 @@ SECTIONS
     *(COMMON)
     . = ALIGN (8);
     _bss_end = ABSOLUTE(.);
+    _heap_start = ABSOLUTE(.);
   } >dram0_0_seg
 
   .flash.rodata :

+ 2 - 2
components/esp32/ld/esp32.rom.ld

@@ -87,9 +87,9 @@ PROVIDE ( _ctype_ = 0x3ff96354 );
 PROVIDE ( __ctype_ptr__ = 0x3ff96350 );
 PROVIDE ( __ctzdi2 = 0x4000ca64 );
 PROVIDE ( __ctzsi2 = 0x4000c7f0 );
-PROVIDE ( _data_end = 0x4000d5c8 );
+PROVIDE ( _data_end_rom = 0x4000d5c8 );
 PROVIDE ( _data_end_btdm_rom = 0x4000d4f8 );
-PROVIDE ( _data_start = 0x4000d4f8 );
+PROVIDE ( _data_start_rom = 0x4000d4f8 );
 PROVIDE ( _data_start_btdm_rom = 0x4000d4f4 );
 PROVIDE ( _data_start_btdm = 0x3ffae6e0);
 PROVIDE ( _data_end_btdm = 0x3ffaff10);