320 lines
6.8 KiB
C
320 lines
6.8 KiB
C
|
// *INDENT-OFF*
|
||
|
#include "app_config.h"
|
||
|
|
||
|
RAM_LIMIT_L = 0x00000;
|
||
|
RAM_LIMIT_H = 0x0C000;
|
||
|
|
||
|
/********************************************/
|
||
|
/* 0xbf00 ~ 0xc000 */
|
||
|
/********************************************/
|
||
|
/* ISR_BASE = _IRQ_MEM_ADDR; */
|
||
|
ISR_SIZE = 0x100;
|
||
|
ISR_BASE = RAM_LIMIT_H - ISR_SIZE;
|
||
|
|
||
|
/********************************************/
|
||
|
/* 0xbb00 ~ 0xbf00 */
|
||
|
/********************************************/
|
||
|
/* ROM_RAM_BEG = _MASK_MEM_BEGIN; */
|
||
|
ROM_RAM_SIZE = 0x400;
|
||
|
ROM_RAM_BEGIN = RAM_LIMIT_H - ROM_RAM_SIZE - ISR_SIZE;
|
||
|
|
||
|
/********************************************/
|
||
|
/* 0xba80 ~ 0xbb00 */
|
||
|
/********************************************/
|
||
|
UPDATA_SIZE = 0x80;
|
||
|
UPDATA_BEG = RAM_LIMIT_H - UPDATA_SIZE - ROM_RAM_SIZE - ISR_SIZE;
|
||
|
|
||
|
UPDATA_COPY_BEG = 0x1d000 - UPDATA_SIZE;
|
||
|
|
||
|
/********************************************/
|
||
|
/* 0x0800 ~ 0xba80 */
|
||
|
/********************************************/
|
||
|
RAM_BEGIN = RAM_LIMIT_L;
|
||
|
RAM_END = RAM_LIMIT_H - UPDATA_SIZE - ROM_RAM_SIZE - ISR_SIZE;
|
||
|
RAM_SIZE = RAM_END - RAM_BEGIN;
|
||
|
|
||
|
UPDATA_BREDR_BASE_BEG = 0x1C000;
|
||
|
|
||
|
MEMORY
|
||
|
{
|
||
|
code0(rx) : ORIGIN = 0x1E00120, LENGTH = CONFIG_FLASH_SIZE
|
||
|
ram0(rwx) : ORIGIN = RAM_BEGIN, LENGTH = RAM_SIZE
|
||
|
irq_table(rw) : ORIGIN = 0xbf00, LENGTH = 0x100
|
||
|
}
|
||
|
|
||
|
#include "maskrom_stubs.ld"
|
||
|
#include "maskrom_stubs_os.ld"
|
||
|
|
||
|
EXTERN(
|
||
|
_start
|
||
|
#include "sdk_used_list.c"
|
||
|
);
|
||
|
|
||
|
ENTRY(_start)
|
||
|
|
||
|
SECTIONS
|
||
|
{
|
||
|
/********************************************/
|
||
|
. = ORIGIN(code0);
|
||
|
.text ALIGN(4):
|
||
|
{
|
||
|
PROVIDE(text_rodata_begin = .);
|
||
|
|
||
|
*(.startup.text)
|
||
|
|
||
|
*(.text*)
|
||
|
*(.rodata*)
|
||
|
*(.fat_data_code_ex)
|
||
|
|
||
|
*(.LOG_TAG_CONST*)
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
gsensor_dev_begin = .;
|
||
|
KEEP(*(.gsensor_dev))
|
||
|
gsensor_dev_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
//mouse sensor dev begin
|
||
|
OMSensor_dev_begin = .;
|
||
|
KEEP(*(.omsensor_dev))
|
||
|
OMSensor_dev_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
//mesh scene begin
|
||
|
_bt_mesh_scene_entry_sig_list_start = .;
|
||
|
KEEP(*(.bt_mesh_scene_entry_sig))
|
||
|
_bt_mesh_scene_entry_sig_list_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
_bt_mesh_scene_entry_vnd_list_start = .;
|
||
|
KEEP(*(.bt_mesh_scene_entry_vnd))
|
||
|
_bt_mesh_scene_entry_vnd_list_end = .;
|
||
|
|
||
|
storage_device_begin = .;
|
||
|
KEEP(*(.storage_device))
|
||
|
storage_device_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
__VERSION_BEGIN = .;
|
||
|
KEEP(*(.sys.version))
|
||
|
__VERSION_END = .;
|
||
|
*(.noop_version)
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
#include "btctrler/btctler_lib_text.ld"
|
||
|
. = ALIGN(4);
|
||
|
#include "system/system_lib_text.ld"
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
update_target_begin = .;
|
||
|
PROVIDE(update_target_begin = .);
|
||
|
KEEP(*(.update_target))
|
||
|
update_target_end = .;
|
||
|
PROVIDE(update_target_end = .);
|
||
|
. = ALIGN(4);
|
||
|
|
||
|
} >code0
|
||
|
|
||
|
. = ORIGIN(ram0);
|
||
|
|
||
|
//TLB 起始0x0000
|
||
|
.mmu_tlb ALIGN(0x4):
|
||
|
{
|
||
|
*(.mmu_tlb_segment);
|
||
|
} > ram0
|
||
|
|
||
|
//cpu start
|
||
|
.data ALIGN(4):
|
||
|
{
|
||
|
_data_code_begin = . ;
|
||
|
. = ALIGN(4);
|
||
|
*(.data_magic)
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
*(.flushinv_icache)
|
||
|
*(.volatile_ram_code)
|
||
|
*(.os_critical_code)
|
||
|
*(.chargebox_code)
|
||
|
_os_begin = .;
|
||
|
PROVIDE(os_begin = .);
|
||
|
*(.os_code)
|
||
|
*(.os_const)
|
||
|
*(.os_str)
|
||
|
*(.os_data)
|
||
|
_os_end = .;
|
||
|
PROVIDE(os_end = .);
|
||
|
|
||
|
*(.fat_data_code)
|
||
|
*(reboot.rodata)
|
||
|
*(.non_volatile_ram_code)
|
||
|
|
||
|
_data_code_end = . ;
|
||
|
|
||
|
_cpu_store_begin = . ;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
*(.data*)
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
#include "btctrler/btctler_lib_data.ld"
|
||
|
. = ALIGN(4);
|
||
|
#include "system/system_lib_data.ld"
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
} > ram0
|
||
|
|
||
|
.irq_stack ALIGN(32) :
|
||
|
{
|
||
|
*(.stack_magic)
|
||
|
_stack_begin = . ;
|
||
|
*(.stack)
|
||
|
_stack_end = . ;
|
||
|
*(.stack_magic0)
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
*(.boot_info)
|
||
|
|
||
|
} > ram0
|
||
|
|
||
|
.bss ALIGN(32) :
|
||
|
{
|
||
|
*(.bss)
|
||
|
*(COMMON)
|
||
|
*(.volatile_ram)
|
||
|
*(.btstack_pool)
|
||
|
*(.usb_dma_mem)
|
||
|
|
||
|
#include "btctrler/btctler_lib_bss.ld"
|
||
|
#include "system/system_lib_bss.ld"
|
||
|
|
||
|
. = (( . + 31) / 32 * 32);
|
||
|
} > ram0
|
||
|
//cpu end
|
||
|
_cpu_store_end = . ;
|
||
|
|
||
|
_prp_store_begin = . ;
|
||
|
.prp_bss ALIGN(32) :
|
||
|
{
|
||
|
//bt
|
||
|
//
|
||
|
//sbc
|
||
|
//
|
||
|
//audio
|
||
|
. = (( . + 31) / 32 * 32);
|
||
|
} > ram0
|
||
|
_prp_store_end = . ;
|
||
|
|
||
|
|
||
|
OVERLAY : NOCROSSREFS AT(0x200000) SUBALIGN(4)
|
||
|
{
|
||
|
.overlay_aec
|
||
|
{
|
||
|
*(.aec_mem)
|
||
|
*(.msbc_enc)
|
||
|
*(.cvsd_codec)
|
||
|
}
|
||
|
.overlay_mp3
|
||
|
{
|
||
|
*(.mp3_mem)
|
||
|
*(.mp3_ctrl_mem)
|
||
|
}
|
||
|
.overlay_wma
|
||
|
{
|
||
|
*(.wma_mem)
|
||
|
*(.wma_ctrl_mem)
|
||
|
}
|
||
|
.overlay_wav
|
||
|
{
|
||
|
*(.wav_mem)
|
||
|
*(.wav_ctrl_mem)
|
||
|
}
|
||
|
.overlay_pc
|
||
|
{
|
||
|
*(.usb_audio_play_dma)
|
||
|
*(.usb_audio_rec_dma)
|
||
|
*(.uac_rx)
|
||
|
*(.mass_storage)
|
||
|
|
||
|
*(.usb_ep0)
|
||
|
*(.usb_msd_dma)
|
||
|
*(.usb_hid_dma)
|
||
|
*(.usb_iso_dma)
|
||
|
*(.usb_cdc_dma)
|
||
|
*(.uac_var)
|
||
|
*(.usb_config_var)
|
||
|
*(.cdc_var)
|
||
|
}
|
||
|
} > ram0
|
||
|
|
||
|
.nv_bss ALIGN(32) :
|
||
|
{
|
||
|
NVRAM_DATA_START = .;
|
||
|
*(.non_volatile_ram)
|
||
|
NVRAM_DATA_SIZE = ABSOLUTE(. - NVRAM_DATA_START);
|
||
|
. = ALIGN(4);
|
||
|
NVRAM_END = .;
|
||
|
_nv_pre_begin = . ;
|
||
|
} > ram0
|
||
|
|
||
|
/* maskrom area */
|
||
|
NVRAM_LIMIT = 0xc000 - 0x100 - 0x400 - UPDATA_SIZE;
|
||
|
_nv_pre_end = 0xc000 - 0x100 - 0x400 - UPDATA_SIZE;
|
||
|
ASSERT(NVRAM_END <= NVRAM_LIMIT, "NVRAM space overflow!")
|
||
|
|
||
|
|
||
|
/********************************************/
|
||
|
/*
|
||
|
. =ORIGIN(ram0);
|
||
|
.ram0_data ALIGN(4):
|
||
|
{
|
||
|
_VM_CODE_START = . ;
|
||
|
*(.vm)
|
||
|
_VM_CODE_END = . ;
|
||
|
*(.flushinv_icache)
|
||
|
|
||
|
. = ALIGN(4); // must at tail, make ram0_data size align 4
|
||
|
} > ram0
|
||
|
*/
|
||
|
|
||
|
|
||
|
/********************************************/
|
||
|
}
|
||
|
|
||
|
#include "update/update.ld"
|
||
|
/* #include "system/system.ld" */
|
||
|
#ifdef CONFIG_AUDIO_ONCHIP
|
||
|
#include "media/media.ld"
|
||
|
#endif/*CONFIG_AUDIO_ONCHIP*/
|
||
|
#include "btstack/btstack_lib.ld"
|
||
|
#include "driver/cpu/bd29/driver_lib.ld"
|
||
|
|
||
|
text_begin = ADDR(.text) ;
|
||
|
text_size = SIZEOF(.text) ;
|
||
|
text_end = ADDR(.text) + SIZEOF(.text) ;
|
||
|
ASSERT((text_size % 4) == 0,"!!! text_size Not Align 4 Bytes !!!");
|
||
|
|
||
|
bss_begin = ADDR(.bss) ;
|
||
|
bss_size = SIZEOF(.bss);
|
||
|
ASSERT((bss_size % 4) == 0,"!!! bss_size Not Align 4 Bytes !!!");
|
||
|
|
||
|
//nvbss_begin = ORIGIN(nvram);
|
||
|
nvbss_begin = NVRAM_DATA_START;
|
||
|
nvbss_size = NVRAM_LIMIT - nvbss_begin;
|
||
|
ASSERT((nvbss_size % 4) == 0,"!!! nvbss_size Not Align 4 Bytes !!!");
|
||
|
|
||
|
data_addr = ADDR(.data) ;
|
||
|
data_begin = text_begin + text_size;
|
||
|
data_size = SIZEOF(.data) ;
|
||
|
ASSERT((data_size % 4) == 0,"!!! data_size Not Align 4 Bytes !!!");
|
||
|
|
||
|
_HEAP_BEGIN = NVRAM_END;
|
||
|
PROVIDE(HEAP_BEGIN = NVRAM_END);
|
||
|
|
||
|
_HEAP_END = NVRAM_LIMIT - UPDATA_SIZE - 1;
|
||
|
PROVIDE(HEAP_END = NVRAM_LIMIT - UPDATA_SIZE);
|
||
|
|
||
|
_MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN;
|
||
|
PROVIDE(MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN);
|
||
|
|
||
|
|