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.
工具/软件:Code Composer Studio
我正在尝试使用 CCS v7和编译器 v6.2.0将工程移植到默认编译器 v18.12.4.LTS 的 CCS v9.3。
我们的项目不使用动态内存分配、因此我们将堆大小设置为零。 在编译器 v6.2下、允许使用-heap_size=0指令、并且工程编译时不会出现错误。
在编译器 v18.12.4.LTS 下、不接受指令--heap_size=0。 错误消息是"ERROR #24011-D:参数到选项-heap (size) is out of range"。
在 C28x 编译器的较新版本中、是否有方法将堆大小设置为零? 如果没有、可接受的最小堆大小是多少?
我无法重现此结果。
请重建整个项目。 右键点击工程名称、然后选择 Rebuild Project。 在"Console"(不是问题)视图中、将所有构建消息和诊断保存到文本文件中。 使用 Copy Build Log 图标。 命名文件时、请使用扩展名.txt。 将该文本文件附加到下一个帖子。
谢谢、此致、
乔治
感谢您的回复、George。 自发布原始问题以来、我继续讨论、问题已发生变化。 我确实发现编译器倾向于"-heap 0"到"-heap=0、这似乎提供了分配零堆空间的所需结果。
我现在只从链接中获得一个故障、即 undefED __SYSMEM_SIZE。 当我比较6.2.0编译器中的映射文件与 v18.12.4.LTS 时、新编译器下所有主要存储器类别所消耗的 RAM 都比旧编译器少。 我不清楚在何处超出目标 DSP 的资源。 我已经查看了与 UNDEFED __SYSMEM_SIZE 相关的几个现有论坛主题帖,但这些情况似乎不直接适用,例如链接 printf,我们不会这样做。
遗憾的是、这是一个安全项目、我无法与您共享地图文件、因为担心信息会被未经授权的人所察觉。 如果有用 、下面是一些展示链接结果的扩展代码段。
"Console"面板中的链接结果:
构建目标:"XXXXXX.OUT"
调用:C2000链接器
"c:/ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/bin/cl2000 "-v28 -ml -mt ---float_support=fpu32 -O1 -opt_for_speed=2 -define=... --define=__evaluate_stack_usage__=0 --diag_suppress=10063 --diag_suppress=16002 --diag_warning=225 --display_error_number --auto_inline=0 --asm_listing --src_interlist --gen_opt_info=2 -z -m"XXXXXX.map"---cn/size-size_sections:-0x300_stack_size_s=-ces... --reread_libs --display_error_number --xml_link_info="XXXXXXXX_linkInfo.xml"--entry_point=CsciCodeStart_asm --rom_model -o "./XXXXXX.out"… "./XXXXXX.obj"
"C:/.../rts2800_fpu32.lib "C:/.../rts2800_fpu32_fast_supplement.lib -lrts2800_fpu32.lib
未定义的首次引用
符号
------ --------
_SYSMEM_SIZE C:/.../rts2800_fpu32.lib
错误#10234-D:未解析的符号仍然存在
错误#10010:链接期间遇到错误;未生成"XXXXXX.OUT"
>>编译失败
Makefile:210:目标'XXXXXX.OUT'的配方失败
gmake:***[XXXXXX.OUT]错误1
gmake:目标"全部"不会由于错误而重新生成。
****构建完成****
以上链接过程生成的映射文件的代码段:
存储器配置
名称 源 长度 使用 未使用 的属性 填充
------------ ---- ------ ---- ---- --------
第0页:
PROG_RAM_L0 00008000 00000600 000004f6 0000010A RWIX
PROG_RAM 00008600 00005a00 00005702 000002fe RWIX
PDIG_RAM 0000fc00 00000300 000002b2 0000004e RWIX
FLASH_BU1 00300000 00008000 00000000 00008000 RWIX
FLASH_DEFG 00308000 00020000 00000000 00020000 RWIX
FLASH_C_BU2 00328000 00008000 00000000 00008000 RWIX
FLASH_B 00330000 00008000 00000000 00008000 RWIX
FLASH_A_PRIMARY 00338000 00007f00 00000000 00007f00 RWIX
Flash_a_loader 0033ff00 000000f1 00000046 000000ab RWIX
FLASH_A_CRCS 0033ffF1 00000005 00000000 00000005 RWIX
START_PROGRAM 0033fff6 00000002 00000002 00000000 RWIX
密码 0033fff8 00000008 00000008 00000000 RWIX
ADC_CAL 00380080 00000009 00000000 00000009 RWIX
OTP 00380400 00000400 00000000 00000400 RWIX
IQTABLES 003fe000 00000b50 00000000 00000b50 RWIX
IQTABLES2 003feb50 0000008c 00000000 0000008c RWIX
FPUTABLES 003febdc 000006a0 000006a0 00000000 RWIX
Bootrom 003ff27c 00000d44 00000000 00000d44 RWIX
重置 003fffc0 00000002 00000000 00000002 RWIX
第1页:
M0M1SYSTM 00000000 00000140 00000115 0000002b RWIX
M0M1SARAM 00000140 000006c0 00000680 00000040 RWIX
DATA_RAM 0000e000 00001c00 00001425 000007db RWIX
EXTERNALSRAM 00200000 00040000 00000000 00040000 RWIX
部分分配映射
输出 属性/
段 页 原点 长度 输入段
---- -------- ------ --------
.zerowaits
* 0 00008000 000004f6
00008000 00000043 rts2800_fpu32_fast_fincor.lib:sincos_F32.obj (.text)
00008043 00000019 :div_F32.obj (.text)
0000805c 00000200 rts2800_fpu32.lib:vec_newdel.obj (.text)
0000825c 000001d3 :memory.obj (.text)
0000842f 00000046 :boot.obj (.text)
00008475 00000020 :new_.obj (.text)
00008495 00000019 :args_main.obj (.text)
000084ae 00000019 :exit.obj (.text)
000084c7 0000000c :memset.obj (.text)
000084d3 00000009 :_lock.obj (.text)
000084dc 00000005 :delete.obj (.text)
000084e1 00000004 :memzero.obj (.text)
000084e5 00000004 :pet_virt.obj (.text)
000084e9 00000003 :array_del.obj (.text)
000084ec 00000003 :array_new.obj (.text)
000084ef 00000003 :error.obj (.text)
000084f2 00000003 :memcpy.obj (.text)
000084f5 00000001 :newhandler.obj (.text)
(笑声)
.stack 1 00000000 00000100 未初始化
00000000 00000100 --孔--
.sysmem 1 00000114 00000001 未初始化
00000114 00000001 rts2800_fpu32.lib:memory.obj (.sysmem)
fpusysmem
1 00000100 00000014 未初始化
00000100 00000008 rts2800_fpu32.lib:memory.obj (.ebss)
00000108 00000004 :_lock.obj (.ebss)
0000010c 00000004 :exit.obj (.ebss)
00000110 00000002 :vars.obj (.ebss)
00000112 00000002 :vec_newdel.obj (.ebss)
示例
1 00000140 00000680 未初始化
00000140 00000480 bit.obj (.osstacks)
000005c0 00000200 watchdog.obj (.osstacks)
(笑声)
不适用 undefED __SYSMEM_SIZE
如果您想查看地图的其他部分、请告诉我。
谢谢!
您说您使用了...
[引用 user="Thomas Cox"]编译器首选"-heap 0"到"-heap=0"、这似乎提供了分配零堆空间的所需结果。
但是,当我查看您的链接器选项时...
[引用 user="Thomas Cox"]-z -m"XXXXXX.map"--stack_size=0x300 --warn_sections -i"C:/..." --reread_libs --display_error_number --xml_link_info="XXXXXXXX_linkInfo.xml"--entry_point=CsciCodeStart_asm --rom_model -o "./XXXXXX.out"… "./XXXXXX.obj "[/QUERP]
我看不到-heap。 使用此选项会使链接器定义符号__SYSMEM_SIZE。 有关更多详细信息、请在 C28x 汇编工具手册中搜索 标题为 定义堆大小的子章节。 请注意、所有这些选项都是等效的: --heap_size、-heap、--heap
请告诉我此建议是否解决了问题。
谢谢、此致、
乔治
我已检查 CCSv7和 CCSv8项目的项目属性。 在 C2000 Linker / Basic 选项下、尚未设置堆大小、但在 CCSv7和 CCSv9的链接命令文件中设置了堆大小。 从 CCSv7下的编译器 v6.2.0编译成功地定义了__SYSMEM_SIZE。 CCSv9下的编译器 v18.12.4.LTS 失败。 对于 CCv9项目、我在 Project properties /C2000 linker/Basic Options 中将堆大小设置为零。 编译仍然无法定义_SYSMEM_SIZE。
在 CCSv7和 CCSv9工程的 CCS General 属性下的工程属性中、--ABI 设置为 Legacy COFF、因此内存段约定应遵循 COFF。 有趣的是、这两个编译器都生成.econst 和.ebss 段、并且都生成.sysmem 段。 您可以在上面的映射文件提取中看到 v18.12.4.LTS 生成的.sysmem 段。 在 COFF 下、汇编工具手册指出、该存储器段应命名为.esysmem。 v18.12.LTS 下的故障是什么吗? v6.2.0似乎会生成.sysmem、但很高兴、而 v18.12.4.LTS 会生成.sysmem、在链接时失败。 v18.12.4.LTS 是否需要定义.esysmem?
链接器如何能够遵循.bss/.ebss 和.const/.econst 的 COFF 约定、但对.sysme/.esysmem 使用 EABI 约定?
不幸的是,我看到的唯一办法是让我重现问题。 我理解您不愿意提交项目。 您是否能够将项目发送给我? 如果是、请按照文章 共享项目中的说明压缩项目。 将鼠标悬停在我的屏幕名称或头像上。 将弹出一个框。 单击 发送私人邮件。 在出现的消息撰写界面中,使用回形针图标附加 zip 文件。
如果这不实用、也许您可以在一个较小的测试项目中重现问题、您可以将其发送给我吗?
谢谢、此致、
乔治
我为我们的 TMS320F28335搜索了一个更简单的现有项目、我可以将其发送给您。 我发现一个相对简单的 RS485和 CAN 通信项目没有专有代码。 当我在 CCS9和编译器 v18.12.4.LTS 下构建它时、它会生成.esysmem、而不是.sysmem、并且它会干净地构建。
尽管编译器和链接器选项都指定了--abi=coffabi,但最近移植的未定义__SYSMEM_size 的较大工程的问题似乎与创建.sysmem 而不是.esysmem 有关。
尽管在项目常规属性中设置了传统 COFF、是否有任何已知的编译器或链接选项可以生成.sysmem?
是否有任何已知的编译器错误会产生这种影响?
[引用 user="Thomas Cox]尽管在项目常规属性中设置了传统 COFF、但是否有任何已知的编译器或链接选项可以生成.sysmem? [/报价]
否 在版本为18.12.4.LTS 的 COFF 编译的正常映射文件中,链接器映射文件中应包含与以下内容类似的行...
.esysmem 1 00000000 00000400 未初始化 00000000 00000004 rts2800_ml.lib:memory.c.obj (.esysmem) 00000004 000003fc -孔--
在失败的构建中、对于名为.sysmem 和/或.esysmem 的输出段、您应该在映射文件中看到类似的行。 请将这些行复制并粘贴到您的下一个帖子中。
[引用 user="Thomas Cox"]是否有任何已知的编译器错误会产生这种影响?
否
谢谢、此致、
乔治
乔治-
CcSv7和编译器版本6.2.0生成的映射文件在其映射文件中生成以下内容、并无错误地生成:
我想我知道问题的原因。 很抱歉、我之前没有注意到它。 在第二个帖子中,在链接器调用中,是以下内容...
[引用 user="Thomas Cox"]:C:/.../rts2800_fpu32.lib "C:/.../rts2800_fpu32_fast_supplement.lib -lrts2800_fpu32.lib
与编译器 RTS 库的链接仅一次。 并确保链接器和 RTS 库来自同一版本的编译器。 在本例中、我怀疑首先提到的 RTS 库来自早期版本的编译器。 请将其删除。
最佳做法是在链接器调用中生成最后一个参数...
-l libc.a
这会告诉链接器自动确定哪个 RTS 库是最佳库。 最后放置意味着将选择任何旨在替换 rts2800_fpu32_fast_f늹 reary.lib 中标准 RTS 函数的函数、而不是编译器 RTS 库中的函数。
请告诉我此更改是否可以解决问题。
谢谢、此致、
乔治
乔治:
感谢您注意 到 rts2800_fpu32.lib 链接列表中的重复条目
我删除了与项目一同运行的 rts2800_fpu32.lib 副本。 在 Project Properties/CCS General 中、rts2800_fpu32.lib 在 Runtime support library 下的下拉菜单中指定、我认为这允许链接器使用编译器中的副本。 在 C2000 Linker/FileSearchPath 中还指定了它作为显式包含的库、该库看起来是多余的。 我删除了该内容、并根据您的建议在其位置添加了 libc.a。
以下是构建的链接部分在控制台中的结果:
构建目标:"SEU .OUT"
调用:C2000链接器
"c:/ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/bin/cl2000 -v28 -ml -mt --float_support=fpu32 -O1 -opt_for_speed=2 -define=_ACE__-define=_nNo_hw__-define =__手套__offset=__nSAUSAGE__-define =-define MC_ENDLE_PRECT_PRECT_PRECTORS__-GE__-define -GE_END__PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECESD__-ITICESD__-GE__-GE__-GE__-GE__-GE_GE_END__PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_D__-ITICESD__-ITICESD__-ITICESD__-ITECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PRECT_PREC
(笑声)
"C://_svn/codebase/branches/NGJ_MC_01_10_CCS9/DSP/DSP/rts2800_fpu32_fast_补 码.lib"-llibc.a
错误#10008-D:找不到文件"libc.a"
生成的映射文件没有明显变化。 编译仍会定义.sysmem 而不是.esysmem、并且仍会发生链接错误未定义符号_SYSMEM_SIZE。
您是否解决了此问题?
[引用 user="Thomas Cox"]错误#10008-D:找不到文件"libc.a"
构建现在是否正常?
谢谢、此致、
乔治
乔治:
感谢您的提示。 我添加了搜索路径、如您的屏幕截图所示。 该编译现在会找到 libc.a. 但链接失败未定义的符号_SYSMEM_SIZE 仍然会发生。
Thomas Cox
我将与您私下联系。
谢谢、此致、
乔治
此问题现在通过专用消息处理。 我现在将其标记为已解决、尽管情况并非如此。 最终解决后、我将发布一个简短的摘要。
谢谢、此致、
乔治
乔治-
今天下午、我能够将事情推向更远的距离。 我检查了项目属性、发现它仍在从项目开发中加载库 rts2800_fpu32.lib。 路径。 我将其更改为使用 C:/ti/ccs930/tools/compiler/ti-cgt-c2000_18.12.4.LTS/lib.中的 rts2800_fpu32.lib 该错误现在显示“fatal error #16000:object files have incompatible formats"(致命错误#16000:目标文件格式不兼容)。 如果我尝试 rts2800_fpu32_eabi.lib、我会得到相同的结果。 它会生成相同的错误消息。
Thomas Cox
[引用 user="Thomas Cox"]我检查了项目属性,发现它仍在从项目开发中加载库 rts2800_fpu32.lib。 路径。[/报价]
这不应该发生。 这种情况的细节可能很重要。 这种获取库的方法应该被撤消、因此所做的更改总是来自用于编译工程的编译器。 我建议我们继续通过私人传播来处理细节。
谢谢、此致、
乔治