This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我在 C2000程序中遇到了一个有关创建不带段定义的输出段的问题
****为项目 HV_MPM_CPU1构建配置 CPU1_RAM ****
"C:\\ti\\ccs1020\\ccs\\utils\bin\\gmake"-k -j 4 all -O
构建目标:"HV_MPM_CPU1.OUT"
调用:C2000链接器
"c:/ti/ccs1020/ccs/tools/compiler/ti-cgt-c2000_20.2.2.LTS/bin/cl2000 /ti/ccs1020/ccs/tools/compiler/ti-cgt-c2000_20.2.2.LTS/lib /device/F2837xD_CodeStartBranch.obj -v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu2 -off -define=dual_headers -define obj=debug -define=cpu1_suppress=10063 -vcu_support=vcu-ovbu1.htm"-map_intrack_info-display_ine-ine-mu1.htm"-code.html-"-code_display_intrack_ine-ine-ines=htm#-"-link_infot_infot_infot_infot_infot_infot_infot_ination_reation_reation_reation_reation_reation_reation_reation_reation_reation_reination_reination_reb.cpu1.htm"/ti/ccs1020/ccs/tools/compiler/ti-cgt-c2000_20.2.2.LTS/include -"-htm"-ination_reb.cpu1.htm"-htm_infot_infot_infot_infot_infot_infot_infot_infot_infot_infot_infot_infot_ination_reation_/ti/c2000/C2000Ware_3_04_00_00/driverlib/f2837xd/driverlib/ccs/Debug/driverlib.lib /libraries/DCL/DCL_clamp_L1.obj /libraries/DCL/DCL_DF22_L2L3.obj /libraries/DCL/DCL_DF11_L1.obj /device/device.obj
警告#10440-D:在没有 SECTIONS 规范的情况下创建输出段".bSS"。 有关此部分的其他信息、请参阅 software-dl.ti.com/.../C2000_c28x_migration_from_coff_to_eabi.html 上的"C2000从 COFF 迁移到 EABI "指南
警告#10440-D:在不使用 SECTIONS 规范的情况下创建输出段".const"。 有关此部分的其他信息、请参阅 software-dl.ti.com/.../C2000_c28x_migration_from_coff_to_eabi.html 上的"C2000从 COFF 迁移到 EABI "指南
警告#10440-D:在没有 SECTIONS 规范的情况下创建输出段".sysmim"。 有关此部分的其他信息、请参阅 software-dl.ti.com/.../C2000_c28x_migration_from_coff_to_eabi.html 上的"C2000从 COFF 迁移到 EABI "指南
警告#10440-D:在没有 SECTIONS 规范的情况下创建输出段".init_array"。 有关此部分的其他信息、请参阅 software-dl.ti.com/.../C2000_c28x_migration_from_coff_to_eabi.html 上的"C2000从 COFF 迁移到 EABI "指南
警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".data"
未定义的首次引用
符号
------ --------
AdcaRegs./MPM_CPU1.obj
AdcaResultRegs./MPM_CPU1.obj
AdcbRegs./MPM_CPU1.obj
AdcbResultRegs./MPM_CPU1.obj
AdcRegs./MPM_CPU1.obj
AdccResultRegs./MPM_CPU1.obj
AuxCPU_ISR ./MPM_CPU1.obj
Cla1Regs./MPM_CPU1.obj
Cla1Task1 ./MPM_CPU1.obj
Cla1Task2 ./MPM_CPU1.obj
Cla1Task3 ./MPM_CPU1.obj
Cla1Task4 ./MPM_CPU1.obj
Cla1Task5 ./MPM_CPU1.obj
Cla1Task6 ./MPM_CPU1.obj
Cla1Task7 ./MPM_CPU1.obj
Cla1Task8 ./MPM_CPU1.obj
ClkCfgRegs./MPM_CPU1.obj
cmps1Regs./MPM_CPU1.obj
cmps2Regs./MPM_CPU1.obj
Cmpss3Regs./MPM_CPU1.obj
Cmpss5Regs./MPM_CPU1.obj
Cmpss6Regs./MPM_CPU1.obj
CpuSysRegs ./MPM_CPU1.obj
CpuTimer0Regs./MPM_CPU1.obj
DacaRegs ./MPM_CPU1.obj
DacbRegs ./MPM_CPU1.obj
DaccRegs./MPM_CPU1.obj
DmaClaSrcSelRegs./MPM_CPU1.obj
EPwm1Regs./MPM_CPU1.obj
EPwm4Regs./MPM_CPU1.obj
EPwmXbarRegs./MPM_CPU1.obj
F28x_usDelay ./MPM_CPU1.obj
GpioCtrlRegs ./MPM_CPU1.obj
GpioDataRegs ./MPM_CPU1.obj
InitEPwm1Gpio ./MPM_CPU1.obj
InitEPwm4Gpio ./MPM_CPU1.obj
InitGpio ./MPM_CPU1.obj
InitInputXbar ./MPM_CPU1.obj
InitPieCtrl ./MPM_CPU1.obj
InitPieVectTable ./MPM_CPU1.obj
InitSysCtrl ./MPM_CPU1.obj
IpcRegs ./MPM_CPU1.obj
MemCfgRegs ./MPM_CPU1.obj
PieCtrlRegs ./MPM_CPU1.obj
PieVectTable ./MPM_CPU1.obj
SFO ./MPM_CPU1.obj
主 C:\ti\ccs1020\ccs\tools\compiler\ti-cgt-C2000-20.2.LTS lib\rts2800_fpu32_eabi.lib
错误#10234-D:未解析的符号仍然存在
错误#10010:链接期间遇到错误;未构建"HV_MPM_CPU1.OUT"
>>编译失败
Makefile:153:目标'HV_MPM_CPU1.Out'的配方失败
gmake.1]:***[HV_MPM_CPU1.OUT]错误1
Makefile:149:目标'all'的配方失败
gmake:***[全部]错误2.
****构建完成****
这让我很困惑、因为在搜索默认链接器文件 Headers_nonBIOS 和默认 RAM 链接器文件时(如下所示):
/*为 LV 板修改了 JMH */
#ifdef CLA_C
CLA_ScratchPad_size = 0x200;/*原始值= 0x100 */
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
#endif
heap 0x2000 /*将 esysmem 扩展到8k */
存储器
{
第0页:/*程序内存*/
/* begin 用于"引导至 SARAM"引导加载程序模式*/
开始:origin = 0x000000,length = 0x000002
RAMM0:origin = 0x000122、length = 0x0002DE
/*
RAMLS4:origin = 0x00A000,length = 0x000800
RAMLS5:origin = 0x00A800,length = 0x000800
*
RAMLS4_5:对于 CLA1,origin = 0x00A000,length = 0x001000 // 4K RAM
复位:origin = 0x3FFFC0,length = 0x000002
FLASHB:origin = 0x082000,length = 0x002000 //片上闪存,用于初始化函数*/
FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
RAMGS0_3:对于 C28x (CPU1).text、origin = 0x00C000、length = 0x004000 // 16k (GS0-GS3)
RAMGS4:origin = 0x010000,length = 0x001000
第1页:/*数据存储器*/
BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAMD0_D1:origin = 0x00B000,length = 0x001000 //展开.ebss 以查看更多全局变量*/
RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000,length = 0x000800
RAMLS3:origin = 0x009800,length = 0x000800
RAMGS5:origin = 0x011000,length = 0x001000
RAMGS6:origin = 0x012000,length = 0x001000
RAMGS7:origin = 0x013000,length = 0x001000
RAMGS8:origin = 0x014000,length = 0x001000
RAMGS9:origin = 0x015000,length = 0x001000
RAMGS10_11:origin = 0x016000,length = 0x002000 /* 8k heap */
RAMGS12:origin = 0x018000,length = 0x001000
RAMGS13:origin = 0x019000,length = 0x001000
RAMGS14:origin = 0x01A000,length = 0x001000
RAMGS15:origin = 0x01B000,length = 0x001000
CPU2TOCPU1RAM:origin = 0x03F800,length = 0x000400
CPU1TOCPU2RAM:origin = 0x03FC00,length = 0x000400
CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080
CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080
}
部分
{
codestart:> begin,page = 0
ramfuncs:>RAMM0 page = 0
.text:> RAMGS0_3 PAGE = 0
/*.sect "codeA":>FLASHB PAGE = 0,align (64)/*以在其他位置找到某些函数*/
/*.sect "codeA":>RAMGS4 page = 0 /*在其他地方查找某些函数*/
.cinit:> RAMM0,page = 0
.pinit:> RAMM0,page = 0
switch:>RAMM0,page = 0
.reset:> reset,page = 0,type = DSECT //未使用,*/
.stack:>RAMM1,PAGE = 1.
.ebss:> RAMD0_D1,PAGE = 1
econst:>RAMD0_D1,PAGE = 1
.esysmem:>RAMGS10_11 page = 1/*包含堆*/
/* CLA 部分*/
//我认为这些部分是用户定义的,并且由 Dave 进行了修改
Cla1Prog:> RAMLS4_5,page = 0
CLADataLS0:> RAMLS0,PAGE = 1
CLADataLS1:> RAMLS1,PAGE = 1
Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.
CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.
Cpu1ToCpu2RAM:>CPU1TOCPU2RAM,page = 1.
Cpu2ToCpu1RAM:>CPU2TOCPU1RAM,page = 1.
/*数字控制器库函数*/
dclfuncs:>RAMLS4_5,page = 0
dcl32funcs:>RAMLS4_5,page = 0
ramfuncs:>RAMLS4_5,page = 0
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRUNSIZE)
#ifdef CLA_C
CLAscratch:
{*。obj (CLAscratch)
。 += CLA_ScratchPad_size;
*。obj (CLAscratch_end)}> RAMLS1、PAGE = 1
暂存区:>RAMLS1,页=1
.bss_cla:> RAMLS1,page = 1.
.const_cla:> RAMLS1,PAGE = 1.
#endif
/*使用 IPC API 驱动程序时需要以下部分定义*/
组:> CPU1TOCPU2RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组:> CPU2TOCPU1RAM,PAGE = 1
{
GETBUFFER:TYPE = DSECT
GETWRITEIDX:TYPE = DSECT
PUTREADIDX:TYPE = DSECT
}
/*以下部分定义适用于 SDFM 示例*/
/*
filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444
Differit_RegsFile:>RAMGS5,PAGE = 1,fill=0x3333
*
}
文件中没有提到任何这些段。 因此、我不确定它们是否会导致项目中其他位置的外部文件出错。
此外、这些是警告而不是错误、因此它们是否应该阻止我编译工程?
此致、
Joel
您好!
我使用了一个 DCL 示例、该示例包含了上述带定义的部分、并将其添加到我的链接器文件中、然后将其放入 CPU RAM 中、如下所示:
/*为 LV 板修改了 JMH */
#ifdef CLA_C
CLA_ScratchPad_size = 0x200;/*原始值= 0x100 */
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
#endif
heap 0x2000 /*将 esysmem 扩展到8k */
存储器
{
第0页:/*程序内存*/
/* begin 用于"引导至 SARAM"引导加载程序模式*/
开始:origin = 0x000000,length = 0x000002
RAMM0:origin = 0x000122、length = 0x0002DE
/*
RAMLS4:origin = 0x00A000,length = 0x000800
RAMLS5:origin = 0x00A800,length = 0x000800
*
RAMLS4_5:对于 CLA1,origin = 0x00A000,length = 0x001000 // 4K RAM
复位:origin = 0x3FFFC0,length = 0x000002
FLASHB:origin = 0x082000,length = 0x002000 //片上闪存,用于初始化函数*/
FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
RAMGS0_3:对于 C28x (CPU1).text、origin = 0x00C000、length = 0x004000 // 16k (GS0-GS3)
RAMGS4:origin = 0x010000,length = 0x001000
第1页:/*数据存储器*/
BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAMD0_D1:origin = 0x00B000,length = 0x001000 //展开.ebss 以查看更多全局变量*/
RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000,length = 0x000800
RAMLS3:origin = 0x009800,length = 0x000800
RAMGS5:origin = 0x011000,length = 0x001000
RAMGS6:origin = 0x012000,length = 0x001000
RAMGS7:origin = 0x013000,length = 0x001000
RAMGS8:origin = 0x014000,length = 0x001000
RAMGS9:origin = 0x015000,length = 0x001000
RAMGS10_11:origin = 0x016000,length = 0x002000 /* 8k heap */
RAMGS12:origin = 0x018000,length = 0x001000
RAMGS13:origin = 0x019000,length = 0x001000
RAMGS14:origin = 0x01A000,length = 0x001000
RAMGS15:origin = 0x01B000,length = 0x001000
CPU2TOCPU1RAM:origin = 0x03F800,length = 0x000400
CPU1TOCPU2RAM:origin = 0x03FC00,length = 0x000400
CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080
CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080
}
部分
{
codestart:> begin,page = 0
ramfuncs:>RAMM0 page = 0
.text:> RAMGS0_3 PAGE = 0
/*.sect "codeA":>FLASHB PAGE = 0,align (64)/*以在其他位置找到某些函数*/
/*.sect "codeA":>RAMGS4 page = 0 /*在其他地方查找某些函数*/
.cinit:> RAMM0,page = 0
.pinit:> RAMM0,page = 0
switch:>RAMM0,page = 0
.reset:> reset,page = 0,type = DSECT //未使用,*/
.stack:>RAMM1,PAGE = 1.
.ebss:> RAMD0_D1,PAGE = 1
econst:>RAMD0_D1,PAGE = 1
.esysmem:>RAMGS10_11 page = 1/*包含堆*/
//由 JMH 从 DCL 示例链接器文件中添加
//现在尝试使用 RAMM1存储器块,因为 RAML4_5专用于 CLA
//检查上面可用的内存,并确保获得正确的内存
//数据段和包含此存储器的页面
.data:>RAMGS5,page = 1/*常量数据*/
init_array:>RAMGS5,页= 1/*表示 EABI */
/* 16位数据段*/
.const:>RAMM0,page = 0 /* near constants */
.bss:> RAMM0,page = 0 /* near 变量*/
RUN_START (_BSS_START)、
run_size (_BSS_size)
.sysmem:>RAMM0,page = 0 /* near dynamic memory */
/* CLA 部分*/
//我认为这些部分是用户定义的,并且由 Dave 进行了修改
Cla1Prog:> RAMLS4_5,page = 0
CLADataLS0:> RAMLS0,PAGE = 1
CLADataLS1:> RAMLS1,PAGE = 1
Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.
CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.
Cpu1ToCpu2RAM:>CPU1TOCPU2RAM,page = 1.
Cpu2ToCpu1RAM:>CPU2TOCPU1RAM,page = 1.
/*数字控制器库函数*/
dclfuncs:>RAMLS4_5,page = 0
dcl32funcs:>RAMLS4_5,page = 0
ramfuncs:>RAMLS4_5,page = 0
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRUNSIZE)
#ifdef CLA_C
CLAscratch:
{*。obj (CLAscratch)
。 += CLA_ScratchPad_size;
*。obj (CLAscratch_end)}> RAMLS1、PAGE = 1
暂存区:>RAMLS1,页=1
.bss_cla:> RAMLS1,page = 1.
.const_cla:> RAMLS1,PAGE = 1.
#endif
/*使用 IPC API 驱动程序时需要以下部分定义*/
组:> CPU1TOCPU2RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组:> CPU2TOCPU1RAM,PAGE = 1
{
GETBUFFER:TYPE = DSECT
GETWRITEIDX:TYPE = DSECT
PUTREADIDX:TYPE = DSECT
}
/*以下部分定义适用于 SDFM 示例*/
/*
filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444
Differit_RegsFile:>RAMGS5,PAGE = 1,fill=0x3333
*
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
这会删除警告、但我仍然无法编译文件:
****为项目 HV_MPM_CPU1构建配置 CPU1_RAM ****
"C:\\ti\\ccs1020\\ccs\\utils\bin\\gmake"-k -j 4 all -O
构建目标:"HV_MPM_CPU1.OUT"
调用:C2000链接器
"c:/ti/ccs1020/ccs/tools/compiler/ti-cgt-c2000_20.2.2.LTS/bin/cl2000 /ti/ccs1020/ccs/tools/compiler/ti-cgt-c2000_20.2.2.LTS/lib /device/F2837xD_CodeStartBranch.obj -v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu2 -off -define=dual_headers -define obj=debug -define=cpu1_suppress=10063 -vcu_support=vcu-ovbu1.htm"-map_intrack_info-display_ine-ine-mu1.htm"-code.html-"-code_display_intrack_ine-ine-ines=htm#-"-link_infot_infot_infot_infot_infot_infot_infot_ination_reation_reation_reation_reation_reation_reation_reation_reation_reation_reination_reination_reb.cpu1.htm"/ti/ccs1020/ccs/tools/compiler/ti-cgt-c2000_20.2.2.LTS/include -"-htm"-ination_reb.cpu1.htm"-htm_infot_infot_infot_infot_infot_infot_infot_infot_infot_infot_infot_infot_ination_reation_/ti/c2000/C2000Ware_3_04_00_00/driverlib/f2837xd/driverlib/ccs/Debug/driverlib.lib /libraries/DCL/DCL_clamp_L1.obj /libraries/DCL/DCL_DF22_L2L3.obj /libraries/DCL/DCL_DF11_L1.obj /device/device.obj
未定义的首次引用
符号
------ --------
AdcaRegs./MPM_CPU1.obj
AdcaResultRegs./MPM_CPU1.obj
AdcbRegs./MPM_CPU1.obj
AdcbResultRegs./MPM_CPU1.obj
AdcRegs./MPM_CPU1.obj
AdccResultRegs./MPM_CPU1.obj
AuxCPU_ISR ./MPM_CPU1.obj
Cla1Regs./MPM_CPU1.obj
Cla1Task1 ./MPM_CPU1.obj
Cla1Task2 ./MPM_CPU1.obj
Cla1Task3 ./MPM_CPU1.obj
Cla1Task4 ./MPM_CPU1.obj
Cla1Task5 ./MPM_CPU1.obj
Cla1Task6 ./MPM_CPU1.obj
Cla1Task7 ./MPM_CPU1.obj
Cla1Task8 ./MPM_CPU1.obj
ClkCfgRegs./MPM_CPU1.obj
cmps1Regs./MPM_CPU1.obj
cmps2Regs./MPM_CPU1.obj
Cmpss3Regs./MPM_CPU1.obj
Cmpss5Regs./MPM_CPU1.obj
Cmpss6Regs./MPM_CPU1.obj
CpuSysRegs ./MPM_CPU1.obj
CpuTimer0Regs./MPM_CPU1.obj
DacaRegs ./MPM_CPU1.obj
DacbRegs ./MPM_CPU1.obj
DaccRegs./MPM_CPU1.obj
DmaClaSrcSelRegs./MPM_CPU1.obj
EPwm1Regs./MPM_CPU1.obj
EPwm4Regs./MPM_CPU1.obj
EPwmXbarRegs./MPM_CPU1.obj
F28x_usDelay ./MPM_CPU1.obj
GpioCtrlRegs ./MPM_CPU1.obj
GpioDataRegs ./MPM_CPU1.obj
InitEPwm1Gpio ./MPM_CPU1.obj
InitEPwm4Gpio ./MPM_CPU1.obj
InitGpio ./MPM_CPU1.obj
InitInputXbar ./MPM_CPU1.obj
InitPieCtrl ./MPM_CPU1.obj
InitPieVectTable ./MPM_CPU1.obj
InitSysCtrl ./MPM_CPU1.obj
IpcRegs ./MPM_CPU1.obj
MemCfgRegs ./MPM_CPU1.obj
PieCtrlRegs ./MPM_CPU1.obj
PieVectTable ./MPM_CPU1.obj
SFO ./MPM_CPU1.obj
主 C:\ti\ccs1020\ccs\tools\compiler\ti-cgt-C2000-20.2.LTS lib\rts2800_fpu32_eabi.lib
错误#10234-D:未解析的符号仍然存在
错误#10010:链接期间遇到错误;未构建"HV_MPM_CPU1.OUT"
>>编译失败
Makefile:153:目标'HV_MPM_CPU1.Out'的配方失败
gmake.1]:***[HV_MPM_CPU1.OUT]错误1
Makefile:149:目标'all'的配方失败
gmake:***[全部]错误2.
****构建完成****
尽管警告消失了。 我是否在链接器文件中犯了错误? 我不确定将这些段放置在何处、因此我只是将它们放置在一个未使用的 RAM 中、并希望它能正常工作。
是否有人能就正在发生的情况以及原因提供指导?
最棒的
Joel
您好、Joel、
请确保 您已在 CCS 编译中添加了文件 F2837xD_GlobalVariableDefs.c 和 F2837xD_Headers_nonBIOS_CPU1.cmd。
c 文件包含寄存器结构定义、cmd 文件包含段映射。
此外、请注意 F2837x 位域内容仍为 COFF 格式。 我们计划在即将推出的 C2000ware 版本中移动常用文件以支持 EABI。 同时、请参阅 https://software-dl.ti.com/ccs/esd/documents/C2000_c28x_migration_from_coff_to_eabi.html 页面 上的将代码从 COFF 迁移到 EABI。
请注意、EABI 和 COFF 格式之间的某些段名(如 BSS、const 等)不同。
此致、
Veena