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.

[参考译文] CCS/CC2650:链接器cmd文件顺序问题

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/576408/ccs-cc2650-linker-cmd-file-order-problem

部件号:CC2650

工具/软件:Code Composer Studio

我在使用SimpleLink BLE项目使用的双"应用程序和堆栈"开发方法时遇到了一些令人上瘾的链接器问题。  我认为这个问题与此没有具体的关系,所以我是在这个论坛上发表意见。 我正在将CCS7与BLE SDK 2.2 和TI-RTOS 2.18 .0.31 0.3 配合使用。 我开始使用SimpleBLEPeripheral示例项目进行开发,并在保持"堆栈"部分不变的同时显著修改了"应用程序"部分。 为了便于更轻松地包含在修订控制系统(Git)中,我将唯一的源文件和项目文件移动到我的工作区,并链接到SDK中保留的通用,未修改的文件。  在对项目属性进行一些调整后,我能够在我的工作空间中构建单独的应用程序和堆栈项目,特别是包括堆栈项目生成的CCS_Linker_defines.cmd ,应用程序使用它来查找BLE堆栈函数入口点并设置可用的闪存/RAM限制。 例如:

/*
**堆栈边界生成器1.1 0 (2016年05月16日 20:46:03.19.4万)
****警告-自动生成的文件。 修改可能会丢失!
*/

--defe=icall_ram0_start=0x2000.4368万
--defe=ICALL_STACK0_START=0xf000
--defe=ICALL_STACK0_ADDR=0xf001

这必须在正常命令文件 C:\ti\simplelink\ble_SDK_2_02_01_18\common\cc26xx\cs\cc26xx_app.cmd之前按链接顺序发生

在我的应用程序项目中,我创建了一个名为stack_PROJ_LOC的新链接资源路径变量,我给了该变量的值${workspace_LOC}\ble_stack,并将其用于查找 CCS_Linker_defines.cmdCCS_Linker_defines.cmdcc26xx_app.cmd在 项目的顶层目录中显示为链接文件。 另外,在“属性”->“生成”->“链接顺序”下,我添加了这两个文件,并对它们进行了排列,使CCS_Linker_defines.cmd位于顶部。 生成项目时生成ccsObjs.opt,如下所示:

“C:/workspace_ccs7/ble_stack/cs_linker定义.cmd”“C:/ti/simplelink/ble_SDK_2_00_31/src/common/cc26xx/CCS/cc26xx_app.cmd""./Drivers/PIN/PIN/PIN_CC26XX.OBJ/驱动程序".OBJ/If/ible/If/ip_lib_If/ip/ip/ip/ip/ip_lib/ip/ip/ip/ip_.ob_.obl/ip/ip/ip/ip/ip/ip/ip_lib_.  

生成的输出正确受内存限制,并与堆栈构建正确链接(和运行)。

接下来,为了包含在Git中,我们决定将stack目录移动到app项目目录下,作为子模块。 在移动文件后,我使用了“文件”->“从文件系统打开项目...”来打开新的嵌套结构。 CCS打开了两个项目(带有Git标记),堆栈显示为不同的项目,但也作为应用程序项目内的目录(也带有Git标记)。 我将STACK_PROJ_LOC更改为${PROJEMENT_LOC}\ble_STACK,以匹配CCS_LINKER_REFLOES.cmd的新位置。 我还必须从构建中排除stack目录以避免错误。 所有内容都保持不变,包括链接顺序设置。  当我现在生成项目时,它会生成ccsObjs.opt,如下所示(我的重点是添加的):

"C:/ti/splelink/ble_SDK_2_02_00_31/src="/common/CC26xx/CS/CC26xx_app.cmd"./Drivers/PIN/PIN/PIN-26XX.""./Drivers/RF/RF.obj/RF.obj/lib_ART_lib/ip/ible/ip/ip/ip_obl/ac_./ip/ip/ip_.obl/ip/ip/ip/ip/ip/ip/ip/ip/ip_.   

生成的输出未与BLE堆栈软件正确链接,并且无法正常工作。 我尝试了移动文件和重命名的各种组合,但结果是相同的。 特别是,链接顺序设置似乎根本没有任何影响。 我要做的唯一一件事(并匹配我原来的双目录项目)就是将 cc26xx_app.cmd复制到ble_stack目录中,并更改其名称,使其按字母顺序出现在CCS_Linker_defines.cmd之后(在这种情况下,它最终出现在链接行的末尾,但至少在cmd_CCS_defines.linker之后)。

链接顺序不工作是否有某些原因? 是否不允许使用嵌套这些项目的方法?

感谢您提供的任何帮助。

戴夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dave,

    这确实是一个奇怪的问题,但我确实发现了一个相关的内部错误报告,其症状非常相似。 但是,应该在CCS 6.2 及更高版本中修复该错误。  
    自从您提到您使用CCSv7之后,我就想知道是同一个问题还是以类似方式表现自己的不同根本原因。

    要开始,请附加应用程序项目的项目元数据文件(.*project),但该应用程序项目不支持链接顺序设置吗? 如果这不足以确定
    根本原因我们可能需要更多,但让我们先开始。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。  以下是请求的文件。

    e2e.ti.com/.../ble_5F00_app_5F00_project.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有任何更新?

    谢谢!

    戴夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dave,您好!

    由于您已将“CCS_Linker_defines.cmd”文件从项目的根目录移到子目录中,因此需要将其删除/重新添加到链接顺序(“属性”>“构建”>“链接顺序”选项卡)以更新其相对路径。

    请告诉我这是否可以解决您的问题。

    谢谢!

    -巴尔塔萨尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Baltasar,您好!

    感谢您的回复。

    我已经在发送的项目文件中完成了此操作:

    (STACK_PROJ_LOC定义为 ${PROJ_LOC}\ble_STACK,当我从项目资源管理器中单击该文件时,该文件将正常打开。)

    我发现这两个项目的(工作中)单独目录版本没有发生的一个奇怪的事情是在“常规/主”选项卡下设置“链接器命令文件”。 在另一个项目中,我将其设置为"<none>",随后打开它时它显示为空白。  在此损坏的版本上,我尝试将其设置为无,这(我认为)会导致链接器命令文件在项目资源管理器中被排除。  如果我“取消”-排除它们,它将在链接程序命令文件下插入cc26xx_app.cmd。 如果我将其强制为CCS_Linker_defines.cmd,则也不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dave,您好!

    由于您的CCS_Linker_defines.cmd文件现在实际位于应用程序项目内,因此不再需要使用path-variable引用它。  我认为这是导致链路顺序与makefile生成不匹配的原因。  如果您取消链接该文件,然后将其重新添加到链接顺序中,则该文件应在链接顺序选项卡中显示为“ble_stack/CCS链接器定义.cmd”。

    -巴尔塔萨尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Baltasar,您好!

    是的,似乎是问题所在。 我完全删除了堆栈路径变量,更新了链接顺序,并更新了同样受影响的生成->高级选项->命令文件。 重建生成了正确的ccsObjs.opt和与单独目录版本相同的输出。

    非常感谢您的帮助!

    戴夫