工具/软件:TI-RTOS
您好 Gurus、
我正在迁移在 Tiva C 系列 TM4C129ENCPDT 上运行的应用
现有工具:
- CCS 5.5.0.00077编译器6.2.11
- SYS/BIOS 6.37.5.35
- XDCTools 3.25.6.96
迁移到:
- CCS 6.2.0.00050编译器15.12.4.LTS
- TI RTOS 2.16.1.14
- XDCTools 3.32.01.22_core
迁移问题:
- 使用编译器15.12.4.LTS 升级到 CCS 6.2可编译并正常运行。
- 升级到 XDCTools 3.32.01.22_core 应用程序会编译但不会链接(请参阅下面的链接错误)
- 编译过程会创建此文件 Debug/configPkg/linker.cmd
- 此文件中的段定义不同于使用上一个工具链时的段定义
- 如果我剪切并粘贴由上一个工具链生成的段定义、应用程序链接并运行正常、但此文件会在每次清理和编译时重新生成
链接器错误:
"configPkg/linker.cmd"、第131行:警告#10096-D:指定地址位于内存映射之外 错误#10264:默认内存范围与现有内存范围重叠 INTVECS 错误#10264:默认内存范围与现有内存范围重叠 APPHDR 错误#10264:默认内存范围与现有内存范围重叠闪存 错误#10264: 默认存储器范围与现有存储器范围重叠 VTABLE 错误#10264:默认存储器范围与现有存储器范围重叠 LOAD_TAG 错误#10264:默认存储器范围与现有存储器范围重叠 SRAM 错误#10010:链接过程中遇到错误;未构建"OurAppplications.out"
在我们的系统中、我们将闪存的第一个扇区用于自定义引导加载程序、允许我们进行现场固件升级和应用程序完整性检查。 因此、我们使用自定义 CMD 文件。 如果我们使用此文件的原始版本、则链接有效、但我们的应用程序不起作用、因为自定义引导加载程序希望代码位于闪存的第二个扇区。
我们的定制 CMD 文件:
/*********
*
*版权所有(c) 2013-2014 Texas Instruments Incorporated。 保留所有权利。
*软件许可协议
*
**德州仪器(TI)提供此软件仅供
*仅供 TI 的微控制器产品使用。 该软件归
* TI 和/或其供应商所有、受适用的版权
*法律保护。 您不能将此软件与"病毒"开源
*软件结合使用、以形成更大的程序。
*
*此软件按"原样"提供、且存在所有缺陷。
*任何明示、默示或法定的保证、包括但
不限于对适销性和适用性
*特定用途的默示保证均不适用于本软件。 在任何
*情况
下、TI 都不应对因任何原因造成的特殊、意外或必然*损害负责。
*
*这是 DK-TM4C129X 固件包版本2.1.0.12573的一部分。
*
* /--retain=g_pfnVectors
--retain=g_appHeader
/*以下命令行选项作为 CCS 项目的一部分进行设置。 */
/*如果您使用命令行进行构建,或者出于某种原因想要在
此处定义*/*,则可以根据需要取消注释并修改这些行。 */
/*如果您使用 CCS 进行编译、最好
在 CCS 工程中进行任何此类*///*修改并将此文件单独保留。 */
* //
/*--heap_size=0 */
*--stack_size=256 /*
--library=rtsv7M4_T_le_eabi.lib */
*应用程序的起始地址。 通常,中断向量*/
/*必须位于应用程序的开头。 //
#define APP_BASE 0x00010000
#define RAM_BASE 0x20000000
#define INTVECS_LENGTH 0x00000400
#define APPHDR_LENGTH 0x0000001A
#define FLASH_LENGTH 0x00100000 -(INTVECS_LENGTH + APPHDR_LENGTH)
#define VTABLE 0x00000400
#define LOAD_TAG_LENGTH 0x00000040
#define SRAM_BASE 0x0000.LENGTH 0x00040000 -(VTABLE + LOAD_TAG_LENGTH)
/*系统内存映射*/
MEMORY
{
/*存储在内部闪存中并从内部闪存执行的应用程序*/
INTVECS (RX):origin = APP_base, length = intvecs_length
APPHDR (RX):origin = APP_BASE + INTVECS_LENGTH, length = APPHDR_length
闪存(RX):origin = APP_base + INTVECS_length + APPHDR_length、 length = flash_length
/*应用程序使用内部 RAM 进行数据*/
VTABLE (rwx):origin = RAM_base, length = VTABLE 长度
load_tag (rwx):origin = RAM_base + VTable_length, length = load_tag_length
SRAM (RWX):origin = RAM_base + VTABLE + length + load_tag_length、length = SRAM_length
}
//内存
中的段分配*/ SECTIONS
{
codestart:> INTVECS
.intvecs:> intvecs{__intvecs_start =.;}
.appheader:> APPHDR
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH
.vtable:> VTABLE
load_tag_section:> load_tag
.data :> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM
.taskStack:> SRAM
}
__STACK_TOP =__STACK + 1536;
原始 CMD 文件:
/*********
*
*德州仪器 TM4C129ENCPDT 的默认链接器命令文件
*
这源自 TivaWare 库的修订版12770。
*
* /
--retain=g_pfnVectors
内存
{
闪存(RX):origin = 0x00000000,length = 0x00100000
SRAM (rwx):origin = 0x20000000,length = 0x00040000
}//
以下命令行选项是作为 CCS 项目的一部分设置的。 */
/*如果您使用命令行进行构建,或者出于某种原因想要在
此处定义*/*,则可以根据需要取消注释并修改这些行。 */
/*如果您使用 CCS 进行编译、最好
在 CCS 工程中进行任何此类*///*修改并将此文件单独保留。 */
* //
/*--heap_size=0 */
*--stack_size=256 /*
--library=rtsv7M4_T_le_eabi.lib
内存中的*//*段分配*/
段
{
.intvecs:> 0x00000000
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH
.vtable:>0x20000000
.data :> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM
}
__stack_top =__stack + 512;