// *INDENT-OFF* #include "app_config.h" /* ================= BR28 SDK memory ======================== _______________ ___ 0x1A0000(176K) | isr base | |_______________|___ _IRQ_MEM_ADDR(size = 0x100) |rom export ram | |_______________| | update | |_______________|___ RAM_LIMIT_H | HEAP | |_______________|___ data_code_pc_limit_H | audio overlay | |_______________| | data_code | |_______________|___ data_code_pc_limit_L | bss | |_______________| | data | |_______________| | irq_stack | |_______________| | boot info | |_______________| | TLB | |_______________|0 RAM_LIMIT_L =========================================================== */ #include "maskrom_stubs.ld" EXTERN( _start #include "sdk_used_list.c" ); UPDATA_SIZE = 0x80; UPDATA_BEG = _MASK_MEM_BEGIN - UPDATA_SIZE; UPDATA_BREDR_BASE_BEG = 0x1A0000; RAM_LIMIT_L = 0x100000; RAM_LIMIT_H = UPDATA_BEG; PHY_RAM_SIZE = RAM_LIMIT_H - RAM_LIMIT_L; //from mask export ISR_BASE = _IRQ_MEM_ADDR; ROM_RAM_SIZE = _MASK_MEM_SIZE; ROM_RAM_BEG = _MASK_MEM_BEGIN; #ifdef TCFG_LOWPOWER_RAM_SIZE RAM0_BEG = RAM_LIMIT_L + (128K * TCFG_LOWPOWER_RAM_SIZE); #else RAM0_BEG = RAM_LIMIT_L; #endif RAM0_END = RAM_LIMIT_H; RAM0_SIZE = RAM0_END - RAM0_BEG; RAM1_BEG = RAM_LIMIT_L; RAM1_END = RAM0_BEG; RAM1_SIZE = RAM1_END - RAM1_BEG; #ifdef CONFIG_NEW_CFG_TOOL_ENABLE CODE_BEG = 0x6000100; #else CODE_BEG = 0x6000120; #endif //============ About EQ coeff RAM ================ //internal EQ priv ram EQ_PRIV_COEFF_BASE =0x1A0600; EQ_PRIV_SECTION_NUM = 10; EQ_PRIV_COEFF_END = EQ_PRIV_COEFF_BASE + 4 * EQ_PRIV_SECTION_NUM * (5+3)*2; EQ_SECTION_NUM = EQ_SECTION_MAX; //=============== About BT RAM =================== //CONFIG_BT_RX_BUFF_SIZE = (1024 * 18); MEMORY { code0(rx) : ORIGIN = CODE_BEG, LENGTH = CONFIG_FLASH_SIZE ram0(rwx) : ORIGIN = RAM0_BEG, LENGTH = RAM0_SIZE //ram1 - 用于volatile-heap //ram1(rwx) : ORIGIN = RAM1_BEG, LENGTH = RAM1_SIZE psr_ram(rwx) : ORIGIN = 0x2000000, LENGTH = 8*1024*1024 } ENTRY(_start) SECTIONS { . = ORIGIN(code0); .text ALIGN(4): { PROVIDE(text_rodata_begin = .); *(.startup.text) *(.text) . = ALIGN(4); update_target_begin = .; PROVIDE(update_target_begin = .); KEEP(*(.update_target)) update_target_end = .; PROVIDE(update_target_end = .); . = ALIGN(4); *(.LOG_TAG_CONST*) *(.rodata*) . = ALIGN(4); // must at tail, make rom_code size align 4 PROVIDE(text_rodata_end = .); clock_critical_handler_begin = .; KEEP(*(.clock_critical_txt)) clock_critical_handler_end = .; chargestore_handler_begin = .; KEEP(*(.chargestore_callback_txt)) chargestore_handler_end = .; /********maskrom arithmetic ****/ *(.opcore_table_maskrom) *(.bfilt_table_maskroom) *(.opcore_maskrom) *(.bfilt_code) *(.bfilt_const) /********maskrom arithmetic end****/ . = ALIGN(4); #include "ui/ui/ui.ld" . = ALIGN(4); __VERSION_BEGIN = .; KEEP(*(.sys.version)) __VERSION_END = .; *(.noop_version) . = ALIGN(4); . = ALIGN(4); tool_interface_begin = .; KEEP(*(.tool_interface)) tool_interface_end = .; . = ALIGN(4); cmd_interface_begin = .; KEEP(*(.eff_cmd)) cmd_interface_end = .; . = ALIGN(4); . = ALIGN(32); m_code_addr = . ; *(.m.code*) *(.movable.code*) m_code_size = ABSOLUTE(. - m_code_addr) ; . = ALIGN(32); } > code0 . = ORIGIN(ram0); //TLB 起始需要16K 对齐; .mmu_tlb ALIGN(0x10000): { *(.mmu_tlb_segment); } > ram0 .boot_info ALIGN(32): { *(.boot_info) . = ALIGN(32); } > ram0 .irq_stack ALIGN(32): { _cpu0_sstack_begin = .; *(.cpu0_stack) _cpu0_sstack_end = .; . = ALIGN(4); _cpu1_sstack_begin = .; *(.cpu1_stack) _cpu1_sstack_end = .; . = ALIGN(4); } > ram0 .data ALIGN(32): { //cpu start . = ALIGN(4); *(.data_magic) . = ALIGN(4); #include "media/cpu/br28/audio_lib_data.ld" . = ALIGN(4); *(.data*) . = ALIGN(4); } > ram0 .bss ALIGN(32): { . = ALIGN(4); *(.bss) . = ALIGN(4); *(.volatile_ram) *(.btstack_pool) *(.mem_heap) *(.memp_memory_x) . = ALIGN(4); *(.non_volatile_ram) . = ALIGN(32); *(.usb_h_dma) *(.usb_ep0) #if TCFG_USB_CDC_BACKGROUND_RUN *(.usb_cdc_dma) *(.usb_config_var) *(.cdc_var) #endif *(.usb_audio_play_dma) *(.usb_audio_rec_dma) *(.uac_rx) *(.mass_storage) *(.usb_msd_dma) *(.usb_hid_dma) *(.usb_iso_dma) *(.usb_cdc_dma) *(.uac_var) *(.usb_config_var) *(.cdc_var) . = ALIGN(32); } > ram0 .data_code ALIGN(32): { data_code_pc_limit_begin = .; *(.flushinv_icache) *(.cache) *(.os_critical_code) *(.volatile_ram_code) *(.chargebox_code) *(.fat_data_code) *(.fat_data_code_ex) *(.ui_ram) *(.math_fast_funtion_code) . = ALIGN(4); *(.pSOUND360TD_cal_const) *(.pSOUND360TD_cal_code) . = ALIGN(4); *(.SpatialAudio.text.const) *(.SpatialAudio.text) *(.SpatialAudio.text.cache.L1) . = ALIGN(4); _SPI_CODE_START = . ; *(.spi_code) . = ALIGN(4); _SPI_CODE_END = . ; . = ALIGN(4); } > ram0 .moveable_slot ALIGN(4): { *(movable.slot.*) } >ram0 __report_overlay_begin = .; #include "app_overlay.ld" data_code_pc_limit_end = .; __report_overlay_end = .; _HEAP_BEGIN = . ; _HEAP_END = RAM0_END; . = ORIGIN(psr_ram); .psr_data_code ALIGN(32): { *(.psram_data_code) . = ALIGN(4); } > psr_ram .psr_bss_code ALIGN(32): { . = ALIGN(4); } > psr_ram } #include "app.ld" #include "update/update.ld" #include "btstack/btstack_lib.ld" #include "system/port/br28/system_lib.ld" #include "btctrler/port/br28/btctler_lib.ld" #include "driver/cpu/br28/driver_lib.ld" #include "media/cpu/br28/audio_lib.ld" //================== Section Info Export ====================// text_begin = ADDR(.text); text_size = SIZEOF(.text); text_end = text_begin + text_size; bss_begin = ADDR(.bss); bss_size = SIZEOF(.bss); bss_end = bss_begin + bss_size; data_addr = ADDR(.data); data_begin = text_begin + text_size; data_size = SIZEOF(.data); moveable_slot_addr = ADDR(.moveable_slot); moveable_slot_begin = data_begin + data_size; moveable_slot_size = SIZEOF(.moveable_slot); data_code_addr = ADDR(.data_code); data_code_begin = moveable_slot_begin + moveable_slot_size; data_code_size = SIZEOF(.data_code); //================ OVERLAY Code Info Export ==================// aec_addr = ADDR(.overlay_aec); aec_begin = data_code_begin + data_code_size; aec_size = SIZEOF(.overlay_aec); aac_addr = ADDR(.overlay_aac); aac_begin = aec_begin + aec_size; aac_size = SIZEOF(.overlay_aac); psr_data_code_addr = ADDR(.psr_data_code); psr_data_code_begin = aac_begin + aac_size; psr_data_code_size = SIZEOF(.psr_data_code); /* lc3_addr = ADDR(.overlay_lc3); lc3_begin = aac_begin + aac_size; lc3_size = SIZEOF(.overlay_lc3); */ /* moveable_addr = ADDR(.overlay_moveable) ; */ /* moveable_size = SIZEOF(.overlay_moveable) ; */ //===================== HEAP Info Export =====================// ASSERT(_HEAP_BEGIN > bss_begin,"_HEAP_BEGIN < bss_begin"); ASSERT(_HEAP_BEGIN > data_addr,"_HEAP_BEGIN < data_addr"); ASSERT(_HEAP_BEGIN > data_code_addr,"_HEAP_BEGIN < data_code_addr"); /* ASSERT(_HEAP_BEGIN > moveable_slot_addr,"_HEAP_BEGIN < moveable_slot_addr"); */ /* ASSERT(_HEAP_BEGIN > __report_overlay_begin,"_HEAP_BEGIN < __report_overlay_begin"); */ PROVIDE(HEAP_BEGIN = _HEAP_BEGIN); PROVIDE(HEAP_END = _HEAP_END); _MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN; PROVIDE(MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN); ASSERT(MALLOC_SIZE >= 0x8000, "heap space too small !") //============================================================// //=== report section info begin: //============================================================// report_text_beign = ADDR(.text); report_text_size = SIZEOF(.text); report_text_end = report_text_beign + report_text_size; report_mmu_tlb_begin = ADDR(.mmu_tlb); report_mmu_tlb_size = SIZEOF(.mmu_tlb); report_mmu_tlb_end = report_mmu_tlb_begin + report_mmu_tlb_size; report_boot_info_begin = ADDR(.boot_info); report_boot_info_size = SIZEOF(.boot_info); report_boot_info_end = report_boot_info_begin + report_boot_info_size; report_irq_stack_begin = ADDR(.irq_stack); report_irq_stack_size = SIZEOF(.irq_stack); report_irq_stack_end = report_irq_stack_begin + report_irq_stack_size; report_data_begin = ADDR(.data); report_data_size = SIZEOF(.data); report_data_end = report_data_begin + report_data_size; report_bss_begin = ADDR(.bss); report_bss_size = SIZEOF(.bss); report_bss_end = report_bss_begin + report_bss_size; report_data_code_begin = ADDR(.data_code); report_data_code_size = SIZEOF(.data_code); report_data_code_end = report_data_code_begin + report_data_code_size; report_overlay_begin = __report_overlay_begin; report_overlay_size = __report_overlay_end - __report_overlay_begin; report_overlay_end = __report_overlay_end; report_heap_beign = _HEAP_BEGIN; report_heap_size = _HEAP_END - _HEAP_BEGIN; report_heap_end = _HEAP_END; BR28_PHY_RAM_SIZE = PHY_RAM_SIZE; BR28_SDK_RAM_SIZE = report_mmu_tlb_size + \ report_boot_info_size + \ report_irq_stack_size + \ report_data_size + \ report_bss_size + \ report_overlay_size + \ report_data_code_size + \ report_heap_size; //============================================================// //=== report section info end //============================================================//