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.

[参考译文] TMS320F28027:缺少符号"codestart"

Guru**** 2534650 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1230375/tms320f28027-missing-symbol-codestart

器件型号:TMS320F28027
主题中讨论的其他器件:C2000WARE

我从现有工程复制了一个新工程。   如果没有连接调试器、新项目不会从闪存中运行。  我现在重点介绍的一个不同之处是、旧项目具有映射文件中显示的"codestart"符号。   新项目缺少 codestart。

如何正确配置项目设置等、以便在未连接调试器的情况下从闪存启动?


有关到目前为止我所了解的内容的一些背景:

对于新工程、我使用的是 c2000ware\device_support\f2802x\common\ccs\Debug\driverlib.lib

使用 nm2000来显示符号表、此 driverlib.lib 副本具有 codestart 符号。  正如我说过的、它没有显示在项目的映射文件中。

旧工程和新工程之间的工程配置相同。  我可能缺少某些设置。   

(由于我没有旧工程的所有构建文件、因此无法构建它。  被告知它是独立运行的)

在示例项目 example_f2802xLEDBlink 中、我看到一个用于指定入口点的设置、其中该示例项目将该设置为 CODE_START。  我在项目中进行了相同设置、然后出现错误:

说明资源路径位置类型
未解析的符号_c_int00、首次在 C:/ti/c2000/C2000Ware_MotorControl_SDK_4_02_00_00/c2000ware/device_support/f2802x/common/ccs/Debug/driverlib.lib 中引用 TitanCube _Ctrl_PC C/C++问题

我看到  Example_F2802xLEDBlink 在  链接器"文件搜索路径"下包含"rts2800_ml.lib"

我添加了 "rts2800_ml.lib"。  那么我收到一条警告:

说明资源路径位置类型
指定了"_c_int00"以外的入口点符号:"code_start" TitanCube 控制器_PC C/C++问题

新项目使用调试器运行、而现在没有调试器运行。

 

如果我现在删除"code_start"、警告将消失、但项目不再从闪存运行。

因此、将 CODE_START 重新添加到链接器设置中、我似乎有了解决方案、但为什么我会得到警告呢?  这样做的"正确方式"是什么?

谢谢!

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

    标记、

    这里可以安全地忽略警告、根据我的理解、这是底层编译器类型警告、用于确保用户知道入口点不是标准入口点、并且可以(在本例中我们是这样)。  

    由于代码将在嵌入式系统上运行、因此所有不同的引导模式(在您的闪存中)都在存储器中定义了一个专用入口点、MCU 将在 XRSn 取消置位时调用该入口点。  

    为了避免对要放在那里的代码大小进行限制、我们使用您观察到的 code_start 标签在这些位置放置一个到 c_int00的分支。  然后可以将 c_int00放置在与其他代码相同的.text 区域中、这些区域对代码大小等的限制较小

    这在连接了调试探针时"有效"的原因是、CCS 检查了一些默认选项以独立进入"main"、不遵循独立系统中存在的引导流程。  这些模式可以被禁用、在这种情况下、您将开始看到调试模式和独立模式之间的行为匹配。  

    如果你想看看背后发生了什么事情以便说明、在你使用 CCS 进行代码加载后、你可以从运行菜单发出手动"复位"、这将强制跳转到初始复位矢量本身。  然后、您应该能够单步执行代码来观察上述情况;最终回退到您的"主"函数。

    如果您还有其他问题、请告诉我、我们将乐意为您提供帮助。

    此致、

    Matthew