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.
工具/软件:TI C/C++编译器
尊敬的 TI:
我已经使用文档 spnu632中列出的闪存 API 函数为 FLASH_API 创建了一个定制运行时间库。
我需要比较我创建的库和 TI 提供的库(F2838x_C28x_FlashAPI.lib)。
如何做到这一点? 是否有任何程序?
您使用了哪些编译器链接器命令选项?
请尽快回复。
谢谢、此致、
Gurusha
Gurusha、
闪存 API 的自定义运行时间库是什么意思? 这到底是什么?
只要您使用闪存 API 库中的函数、这些函数将具有相同的二进制文件。
谢谢、此致、
Vamsi
您好、Vamsi、
定制运行时库意味着、我已经使用 spnu632中列出的所有 API 以及编译器手册中的一些编译器/链接器命令选项、通过脚本语言创建了 FLASH_API 库。\
此致、
Gurusha
Gurusha、
只要您嵌入库、就不需要比较二进制文件。 将库嵌入到应用程序中时、不会重新编译库。
谢谢、此致、
Vamsi
您好!
我已经创建了一个运行时库;通过 使用脚本语言 RTS_TMS320F28388D_FlashApi.lib、该脚本语言包含使用 TI 编译器 v20.2.0.1.LTS 编译的所有源文件、并且目标文件会在 当前项目的闪存 API 的运行时库中实现。 我已附上一张有关批处理文件的图片。
您可以查看以下链接中的帖子、以了解我为 RAM 和闪存创建运行时库所执行的过程、以及用于 FLASH_API 的过程:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/916940
我使用的源文件列在闪存 API 手册 1.60.00.00版中。
TI 还提供了其闪存 API 库 F2838x_C28x_FlashAPI.lib。
我想比较库,我尝试使用 cgxml-2.61.00 工具,是否还有其他工具要比较?
Gurusha、
1) 1)编译器标志看起来正常。 我们还使用了--gen_func_subsections=on。
您从哪里获得了编译器选项?
2) 2)对于 comaprison、您可以使用 CG_xml 包中的 objdiff:http://software-dl.ti.com/ccs/esd/documents/sdto_cgt_cg_xml_overview.html。
如果您对此还有其他问题、我可以联系我们的编译器团队、进一步帮助您。
谢谢、此致、
Vamsi
您好、Vamsi、
我是 Honeywell 的员工、你们已经共享了闪存 API 项目(ARM 和 C28x)以及 F2838x 的源代码。
我有以下疑问需要您解决:
C:\ti\C2000Ware_3_02_00_00_Software\libraries\flash_api\f2838x\C28x\lib
我创建的闪存 API 库与 CG_xml 工具进行了比较、实际上不匹配。
请帮我指出问题。
我已经分享了下面的屏幕截图:请检查它是否显示"文件不同":
2.您能否告诉我您在与我们共享的项目中使用了哪个编译器版本?
Gurusha、
这是令人困惑的部分。 我不知道你来自霍尼韦尔。 我们一直与 Nagesh 交谈、因此会产生混淆。
我还在我提供给 Nagesh 的项目中提供了编译器版本。 请参阅该文档并使用该编译器版本、看看这是否有助于修复它。
我正在编辑您的帖子、以删除您复制的编译器标志。
谢谢、此致、
Vamsi
您好、Vamsi、
即使我不知道你已经和我的同事 Nagesh 交谈了。
我检查了工程文件夹、在哪里应该显式检查编译器版本? 因为无论如何、我能够从任何编译器生成编译。
是否有您提到过的任何地方使用要使用的编译器?
另外、您能否回答我的第一个问题、即 sh_size 只是我通过 CG_xml 工具比较的两个不同库之间的区别?
谢谢!
Gurusha、
您可以右键点击工程并查看编译设置。 使用编译器版本18.1.3.LTS 编译 C28x 闪存 API 库。
在比较方面:我要求我们的编译器为您提供帮助。 请在一天或两天内回复。
谢谢、此致、
Vamsi
Vamsi、
我签入了最新的 code composer studio、在构建设置中检测到 V20.2.1.LTS。 因此、我假设 V20可能已经使用过。
那么、您已经为运行时库配置了 v18.1.3.LTS、不是吗?
关于比较、请花点时间。
谢谢、此致、
Gurusha
我可以简单地介绍一下 objdiff 中的这些差异。
[引用 user="gurusha Nahar"]我已共享以下屏幕截图:请检查屏幕截图是否显示"文件不同:
请关注第一个屏幕截图中显示的第一个差异。 这一差异的原因很可能是许多其他差异的原因。
它指出.text:fapi_initializeAPI 段的大小为一个库中的0xe6字、而另一个库中的0xcc 字。 类似这样的段名始终意味着它包含一个 C 函数。 函数的名称与.text:之后的段名称部分匹配。 因此、请解释为什么该函数具有不同的大小。 26个字的差异似乎很大。 编译器版本是否相同? 源代码? 构建选项?
谢谢、此致、
乔治
Gurusha、
是的、我使用 了 V18.1.3.LTS。
谢谢、此致、
Vamsi
您好、Vamsi、
那么、您使用 的输出格式是 ELF?
如果基于 eabi、则工程将不会编译、因为编译器版本 TI v18.1.3.LTS 不支持 ELF 输出格式。
谢谢、此致、
Vamsi
尊敬的乔治:
我已根据基于 TI 的库文件 F2838x_C28x_FlashAPI.lib 更改了编译器版本
我使用了以下编译器链接器选项:
set Compiler_flags=-v28 -ml -mt --cla_support=cla2 --float_support=fpu32 --tmu_support="C :\ti\ccs1010\ccs\tools\compiler\ti-cgt-C2000-18.1.spt\include"--include_path=-include_exclus_exclus-ine-exclus_exclus=-c28x=-gui_di_exclus_exclus=-inatifore_ine-gui_de=-inatifore_ine-f28x=-ine-exclus_exclus_exclus_exclus-inatifore_bi-f28x=-inatifore_ex-ine-gui_di_ex-ine-gui_di_di_di_di_ex-ines=-inatifori_di_gui_di_di_di_di_di_di=-ines=-inatifori_ex-inategot_ex-inategot_inateg /Users/h352524/Desktop/CGCU/C2000_F021_FlashAPI_V1.60_QT/C28x/F021DEV_C2000/API/Include/Fapi /Users/h352524/Desktop/CGCU/C2000_F021_FlashAPI_V1.60_QT/C28x/F021DEV_C2000/API/Include/F021
当我与以下命令进行比较时、
objdiff.exe T:\EPS_CoreAssets\TMS320C28xx\C28xxRuntimeLibrary\SDF\LifeCyclData\ReleaseRTS_TMS320F28388D_FlashApi.lib C:\ti\C2000Ware_3_02_00_00_Software\libraries\flash_api\f2838x\lib\F2838x_FlashApi.lib
不过、差异仍然可见、请串联参阅下面的屏幕截图:
我遇到了两个奇怪的问题:
1.我使用相同的源文件以相同的项目设置编译项目、但为什么我仍然会获得 C 函数的差异(我认为编译器-链接器选项将帮助您解决这一疑问)。
此外、我无法理解电流差异、尽管您已经在某种程度上进行了解释、您能否详细说明一下。
此外、如果根据@Vamsi Gudivada、您使用了 v18.1.3.LTS、因此如果我们使用输出格式作为 V18的输出格式、则会在 CCS 属性中产生错误、 编译器版本 TI v18.1.3.LTS 不支持 ELF 输出格式。
请检查编译器-链接器选项、以便为创建 FLASH_API 库提供清晰说明。
谢谢、此致
Gurusha
请理解、关于此主题、我拥有的唯一适用的专业知识是 objdiff。 我对闪存库没有任何专业知识。
当处理 objdiff 的大量输出时、通常最好选择一个差异并专注于解释其发生方式。 在开始时、忽略所有其他差异。
在每个库中的多个文件中 、__TI_build_attributes 部分显示了差异。 此段未加载到目标执行。 它存储在构建过程中使用的额外数据。 即使如此、也没有理由期望构建属性有所不同。 这是一个用于查看库构建属性的命令的常规形式。
ofd2000 --obj_display=none、battrs name_of_library.lib
此命令使用目标文件显示实用程序 ofd2000、 C28x 汇编工具手册中对此进行了说明。 它转储库中每个文件的构建属性。 除非发生非常不寻常的情况、否则库中每个文件的构建属性都是相同的。 捕获第一个文件的构建属性。 它将与...类似。
目标文件:file.obj 在"_TI_build_attributes"中生成属性 格式版本:"A" [0]供应商名称:"TI"(Texas Instruments、Inc.) 标记文件: 属性: Tag_Producer_Name 汇编器 Tag_Producer_VMajor 21. (主要生产商版本+1) Tag_Producer_VMinor 3. (生产者次要版本+1) Tag_Producer_VPatch 2. (生成者修补程序版本+1) Tag_marked_Pro 1 (标记为 PRO TOOLS) 1>供应商名称:"c28xabi"(德州仪器(TI) C28x 架构的 ABI) 标记文件: 属性: Tag_C28x 1 (C28x 代码存在) Tag_float_args 1. Tag_double_args 1.
对每个库重复此过程。 这些构建属性应该匹配、但它们不匹配。 您看到的区别是什么?
谢谢、此致、
乔治
Gurusha、
对于 V18.1.3.LTS、您可以将输出格式保留为"传统 COFF"、而不是将其更改为 eabi (ELF)。 只需在编译器标志中添加"--abi=eabi"标志即可。 如果要进行比较、请使用此编译器版本。
谢谢、此致、
Vamsi
您还能告诉我屏幕截图中我们可以看到的另外两个差异吗?
1.FlashStateMachine.obj:
sec->.text:_fapi_setupFlashStateMachine
2.Info.obj:
SEC:->.text:Fapi_getLibInfo
原始数据不同
我需要尽快解决此问题、以便能够进一步测试。
谢谢
Gurusha
您好、Vamsi、
对于我们来说、将"eabi"用作 TMS320F28388D 项目的一部分非常重要。 那么、在编译器/链接器选项中只输入 abi="eabi"是否合适?
此外、我还需要以下方面的进一步帮助:
我们已将 TI 提供的 F2838x_C28x_FlashAPI.lib 库与您向我们的团队提供的 FLASH_API 项目对应的库进行了比较、结果如下:
文件相同。 我们在创建的库中需要相同的结果。
此外、我们还希望像您的生成方式一样生成库、您能否进一步帮助我消除这些差异并快速为我提供正确的编译器/链接器选项?
提前感谢
此致
Gurusha
这两个库是使用不同版本的编译器构建的。 一个使用版本18.12.3.LTS、另一个使用版本18.1.3.LTS。 此外、使用版本18.12.3.LTS 构建的库使用编译器选项--TMU_support=tmu0、而另一个库不使用编译器选项--TMU_support。
这些差异会导致构建中的其他详细信息不同。 我建议您更改一个库的构建以匹配另一个库。 然后再次进行比较。
谢谢、此致、
乔治
Gurusha、
是的、正如我之前提到的、您可以使用该标志 "--abi=eabi"。 这将为您提供 eabi。
感谢您确认我们在 C2000Ware 中提供的库与您通过编译我提供的项目/源代码获得的库相匹配。
我已经查看了您使用的编译器设置以及所有匹配项。 但是、您需要使用相同的编译器版本并使用 eabi 标志。 您能否确认情况是否如此?
不确定您是否更改了任何代码、因此存在差异。
谢谢、此致、
Vamsi
感谢您的快速响应、
实际上、我采用了项目中按原样提供的源文件、然后使用编译器标志和链接在一起进行编译以创建库。
我不确定我们创建库的过程有何区别。
此致、
Gurusha
Gurusha、
您未确认是否使用了相同的编译器版本和 eabi 标志。
谢谢、此致、
Vamsi
您好!
是的、我使用您刚才所说的相同编译器版本进行了编译。
set Compiler_flags=-v28 -ml -mt --cla_support=cla2 --float_support=fpu32 --tmu_support="C:\ti\ccs1010\ccs\tools\compiler\ti-cgt-C2000-18.1.spt\include"--include_path=-include_exclus_exclus=-un28x=-exclus_exclus_exclus-gui_di_diag=-inatifore_ine_ine-gui_di_exclus=-c28x=-inatifore_ex-inatifore_pr-ine-f28x=-inatifore_ex-ine-gui_di_exclus_exclus-ine_inatifore_ine-ine-f28x=-inatifore_ex-ine-gui_di_exclus=-inatifore_ex-ine-f28x=-inatifore_ex-ine-gui_di_ex-ine-ine-ine-ine-f28x=/Users/h352524/Desktop/CGCU/C2000_F021_FlashAPI_V1.60_QT/C28x/F021DEV_C2000/API/Include/Fapi /Users/h352524/Desktop/CGCU/C2000_F021_FlashAPI_V1.60_QT/C28x/F021DEV_C2000/API/Include/F021
但我在这里注意到的一件事是、
当我使用 COFF ABI (现在我已更改为 eabi)进行编译并进行比较时、它说编译器是不同的。 现在可能会出现这种差异、因为您还使用了 COFF ABI、对吧?
Gurusha、
下面是我使用的编译器标志。
您能否确认您使用的编译器版本?
谢谢、此致、
Vamsi
-v28 -ml -mt --float_support=fpu32 --include_path="C:/ti/CCS_preReleases/ccs1000/ccs/tools/compiler/ti-cgt-c2000_18.1.3.LTS/include --include_path="C:/Users/a0271901/Desktop/C2000_F021_FlashAPI_V1.60_QT/C28x/F021DEV_C2000/API/Include/F021 --include_path="C:/Users/a0271901/Desktop/C2000_F021_FlashAPI_V1.60_QT/C28x/F021DEV_C2000/API/Include/Fapi --advice:performance=all --define=C28x --define cc_lit_ENDIAN --gen=F2838x=undefine-exit_definature=f284x-und_ex-define=f28x=f28x=-und_ex-define -define -und_guide-subsection=-undefinature=f284x-und_und_un_ex-define -und_guidature=f2837x=-und_un_un_un_un_exitsection=f284x-und_und_un_un_guidag=f28x=-und-und-und_ex-und_guide-subs=fategot_un_un_un_un_un_un_un-forbad
您正在使用不同版本的编译器构建库。 第一个库使用18.1.0.x.LTS、第二个库使用18.12.x.LTS。 我无法分辨 x 位是什么、但我可以分辨它是相同的。
谢谢、此致、
乔治
您好!
我不使用其他编译器。
您可以检查上述帖子。 我共享了编译器链接器选项比较的屏幕截图。
我使用 的与 Vamsi 提供的相同的 V18.1.3.LTS
查看 objdiff 输出的唯一方法是使用不同版本的编译器。 下面是一个缩小的演示...
C:\work>type file.c int a; C:\work>\ti\缂 栬瘧鍣\ti-cgt-C2000-18.1.3LTS \bin\cl2000 file.c C:\work>copy file.obj f_18_1_3.obj 已复制1个文件。 C:\work>\ti\cl编译 器\ti-CGT-C2000_18.12.3.LTS \bin\cl2000 file.c C:\work>copy file.obj f_18_12_3.obj 已复制1个文件。 C:\work>objdiff f_18_1_3.obj f_18_12_3.obj ofd2000 处理 f_18_1_3.obj ... 正在处理 f_18_12_3.obj ... 正在比较文件... ======================================================================================================================================================== 比较段:SECTIONS =$build.attributes ======================================================================================================== 原始数据是不同 的=========================================================================================================== 比较段:section =$build.attributes:build_attributes:vender_section:vender_name = TI:attribute_section:attribute_list:tag = Tag_Producer_VMinor:arguments =========================================================================================================================================================================================================================================================== 差异: f_18_1_3.obj f_18_12_3.obj 常量: 0x2. 0xD 文件不同
gurusha Nahar 说:我共享了编译器链接器选项比较的屏幕截图。
构建选项相同。 但编译器 shell cl2000必须来自不同的目录。
谢谢、此致、
乔治
您好、Geroge、
我已经尝试了一次、但问题仍然是一样的。 虽然路径和所需的一切都是相同的、但我不知道为什么它不使用同一个编译器进行编译。
我们能否与您的团队就该问题进行快速讨论?
我不理解的一件事
此外 、CG_xml 工具是否具有检查库编译器版本的功能。
此致、
Gurusha
我使用了相同的流程来创建我在上面提到的库。
并使用了以下编译器包含路径
C:\ti\ccs1010\ccs\tools\compiler\ti-cgt-C2000_18.1.3.LTS \include
在我删除的同一目录包含 v18.12.3.LTS 之前、我想可能是因为它会重定向到该目录以调用 cl2000。
由于我只有此编译器选项、因此它应该起作用、但在比较时它不匹配。
我还想补充的另一个问题是、
我们从 TI 获得的项目基于编译器 v18.1.3.LTS、输出格式为 coffabi。 但它使用运行时库 F2838x_C28x_FlashAPI.lib
它也构建在版本18.1.3.LTS 上、但使用 eabi 作为输出格式。 我在这里无法理解这种特殊的特点。 是否可以使用不同输出格式的库?
附件是 TI 共享的项目属性的屏幕截图。
此致
Gurusha
Gurusha、
是的、该汇编器版本是编译器版本。
关于使用 v18.1.3.LTS 生成 EABI 的问题: 如前所述、不会更新 CCS 以允许为此编译器版本选择"EABI "输出格式。 但是、编译器本身可以接受 eabi 作为编译器标志中的附加选项。 我与您分享了这一信息。 因此、不用担心。
关于使用 V18.12.3.LTS 编译的工程: 请右键单击您的工程->显示编译设置->常规->工程选项卡->工程类型和工具链->编译器版本: 您在这里看到的工程编译器版本是什么? 是否为 TI v18.1.3.LTS?
谢谢、此致、
Vamsi
供参考。对于可能提及此帖子的其他人: 我正在关闭此帖子。 我离线与客户合作。 为批处理文件选择的编译器路径不正确且已修复。
谢谢、此致、
Vamsi