主题中讨论的其他器件: TM4C1294KCPDT、 LM3S8971
Tivaware 2.1.2.111 driverlib 和串行引导加载程序(SBL)项目:
引导加载程序的 KCPDT 工具链构建会将自身复制到 SRAM (0x2000.0000)、并通过 EK-TM4C1294XL Launch Pad 从(0x4000)启动闪存应用程序、而不会出现任何问题。
但是、当加载到具有512KB 闪存的 TM4C1294KCPDT 定制 PCB 时、相同的 SBL 构建似乎不会将闪存 SBL 复制到 SRAM 中、而是通过 BL_STARTUP_CCS.s 将资产 NmiSR ()复制到 SRAM 中 否则、KCPDT 应用从定制 PCB 上的闪存0x0000运行而不会出现问题。
在两个 MCU 类别上、BL_LINK_cmd 布局(如下所示)是相同的。 为什么 KCPDT 不会将加载的闪存 SBL 复制到相同的 SRAM 地址范围 KCPDT?
/*系统内存映射*/
存储器
{
闪存(RX):origin = 0x00000000,length = 0x00010000
SRAM (rwx):origin = 0x20000000,length = 0x00040000
}
/*内存中的段分配*/
部分
{
组
{
.intvecs
.text
.const
.data
} load = FLASH、run = 0x20000000、load_start (init_load)、run_start (init_run)、size (init_size)
组
{
.bss
堆栈
}run = SRAM、run_start (bss_run)、run_end (bss_end)、size (bss_size)、run_end (__stack_top)
}
(二
应用 KCPDT:
/*应用程序的起始地址。 通常是中断矢量*/
/*必须位于应用程序的开头。 *
#define APP_BASE 0x00004000 //SBL=0x00004000、16384字节。
#define RAM_base 0x20000000
/*系统内存映射*/
存储器
{
闪存(RX):origin = 0x00000000、length = 0x00080000 //闪存 KCPDT 80k=524288KB、NCPDT 100k=1、048、572 */
SRAM (rwx):origin = 0x20000000,length = 0x00040000 /* SRAM .bss、.data */
}
/*以下命令行选项作为 CCS 项目的一部分进行设置。 *
/*如果您使用命令行构建,或者出于某种原因想要*/
/*在此处定义它们,您可以根据需要取消注释并修改这些行。 *
/*如果您使用 CCS 进行构建、最好进行任何这样的构建*/
/*对 CCS 项目进行修改并将此文件保留为单独文件。 *
/**//
/*--heap_size=0 */
/*--stack_size=8192 */
/*--library=rtsv7M4_T_le_eabi.lib */
/*内存中的段分配*/
部分
{
.intvecs:> app_base
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH
.vtable:> RAM_base
.data :> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM
}
__STACK_TOP =__STACK + 512;