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/TMDXIDDK379D:编译器错误。

Guru**** 2041660 points
Other Parts Discussed in Thread: CONTROLSUITE, TMDXIDDK379D
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/569333/ccs-tmdxiddk379d-compiler-bug

器件型号:TMDXIDDK379D
Thread 中讨论的其他器件:controlSUITE

工具/软件:Code Composer Studio

我有一个在 Mac 上运行 CCS v7的 IDDK_PM_Servo_F2837x-v2。  在 main()之前初始化的变量中有许多变量未被初始化。  系统设置不正确、中断等不起作用。  如何测试此系统?  是否有可正常工作的编译器版本?

Wayne Hunter

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

    检查编译器版本 v6.4.6

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我通过应用中心升级了编译器。 不知道我下载了哪个版本或启动了哪个版本。 无论如何没有变化。 我们能否切换到更有效的通信模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    韦恩、

    您是否能够从 controlSUITE 中为您的器件构建和加载任何其他器件支持示例?

    您是否看到 IDDK 项目或其他示例的任何构建错误? 我们已经验证了 IDDK 示例是否能够与 Windows 和 CCS 配合使用。 全局初始化变量将在代码到达 main()之前由编译器工具链接的 c 运行时库进行初始化。

    您是否能够使用 Windows 计算机验证此问题、如果我们可以将此问题确定为 MAC 问题、我们可以将问题直接发送给编译器工具支持团队以更快地解决。

    最恰当的考虑

    桑托什

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

    我在 Windows 10计算机上安装了该软件。  这三个数组已正确初始化、因此某些问题必须基于 Mac。  但是 EPwm1Regs 指向0xc940。  不知道它在哪里有这个想法。  应为0x4000。  因此仍然没有 PWM、也没有中断 、它会在设置偏移的 for 循环中挂起。  我现在已经在这个环路中停留了将近一个月。  甚至无法达到构建级别1。

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

    我还详细介绍了在 TMDIDDK379D 上初始化变量失败的情况。  我有单步执行并通过初始化代码设置断点。  它对几个变量起始为 OK、然后到达地址0x2E 并找到零长度并中止。  我首先注意到问题的变量 ePWM 的数据位于地址0x235。  要走很长一段路。  然后、程序会跳过 binit 和 Pinit 段。  我假设其中一个可能被保留 用于闪存传输、这是可以的。  我不知道对方的目的。  无论如何、这必须是错误或控制卡有缺陷。  我有两个、两个都执行相同的操作。  不确定它位于同一地址。  这个电路板对我来说是无用的。  您是否要提供帮助、或者我是否需要查找其他供应商?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    韦恩、
    让我将查询移至编译器团队、以帮助解决构建在 MAC 上的问题。

    此致
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉您对论坛不满意。 但是、这是我们目前针对一般问题提供的最佳资源。 我们确实希望尽快找到它的底部、因为它听起来好像您在工具中发现了一个或多个错误。 编译器经过了积极测试(请参阅 processors.wiki.ti.com/.../Compiler_Validation)、但有时会有错误通过。 嵌入式系统往往具有非常棘手的要求、我们无法始终预测可能出现的情况。

    cinit 段用于初始化 C 全局变量。 Pinit 段用于初始化 C++全局对象。 binit 段用于引导时间(复位中断)复制表。 如果您有简单的 C 或 ASM 程序、则可能没有任何.pinit 或.binit 条目。

    您说过使用 Windows 工具时阵列已正确初始化;我想确保这不仅仅是巧合。 这些数组是否具有完整的初始化列表、或者您是否依赖某些元素的零初始化? 请注意、在 TI COFF 中、您需要手动完全初始化全局对象。 为了获得标准 C 行为、您需要以其他方式排列默认零初始化数组、例如使用链接器命令文件中的填充值。 C28x 即将推出的 EABI 模式会自动为您安排此操作。 请参阅
    processors.wiki.ti.com/.../Uninitialized_Static_Objects_Not_Set_to_Zero_in_COFF

    请为您的程序生成汇编文件。 (使用--keep_asm 编译器选项。) 您将在生成的汇编代码中看到一些.cinit 记录。 您应该为每个全局变量找到一个。 如果您没有发布、请发布变量的定义及其初始化程序以及编译器生成的任何.cinit 记录。

    我是编译器专家、而不是器件专家、因此我不知道 EPwm1Regs 的问题是什么、也不知道为什么没有中断。 我可能需要获得更多信息、例如可重现的测试案例、然后才能确定如何解决此问题。

    是否指定 EPwm1Regs 的地址、或者是否来自链接器命令文件?

    链接器最终将中断矢量放置在何处? 查看链接器映射文件会非常有帮助(使用--map_file 链接器选项)。

    您提到"它在设置偏移的 for 循环中挂起。" 我不确定您在这里指的是什么。 您能否更详细地描述故障模式、以便我了解如何对其进行分析?

    我们将需要知道编译器版本。 请参阅
    www.youtube.com/watch
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该软件由 TI 在 TMDXIDDK379D 评估模块中提供。 我没有更改它、只是在开始时注释使能测试、因为我已经厌倦了设置它。 我甚至还没有通过构建级别1来实现它。 for 循环接近 main()的末尾,并为某些 A/D 设置偏移量。 它卡在那里、因为 PWM 11未运行。 我在这个主题上的最后一篇文章指出、我已经将其隔离到初始化例程中、过早地找到零长度、并退出许多变量未初始化、包括但不限于 PWM。 :感谢您提供有关编程实践的提示,但这是 TI 软件,而不是我的软件。 我之前关于 Mac 与 PC 的评论指出、PC 上初始化了更多变量、但都没有完成任务。

    我确信、论坛方法对于 TI 而言非常经济高效、但对于我的问题而言非常不充分。 我浪费了大约一个月的时间来寻找这个问题。 我希望 EVM 开箱即用、符合规格要求、并且对 TI 解决此问题的能力或意愿非常失望。 什么是 InstaSpin?

    我在某个地方看到存在自检。 我可以从何处获得访问权限。 我想消除硬件问题的可能性。

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

    [引用 user="Wayne Hunter"]10台机器。  这三个数组已正确初始化、因此某些问题必须基于 Mac。  但是 EPwm1Regs 指向0xc940。  不知道它在哪里有这个想法。  应为0x4000。  因此仍然没有 PWM、也没有中断 、它会在设置偏移的 for 循环中挂起。  我现在已经在这个环路中停留了将近一个月。  甚至无法达到构建级别1。[/quot]

    韦恩、

    如果 Windows 环境仍有问题,请返回到 Windows 上的调试:-

    EPwm1Regs 通过在其他可能的示例中使用的链接器命令文件链接到外设地址空间。 我不确定这里发生了什么。 是否可以发送在 Windows 计算机上构建的地图文件? 此示例已验证在 Windows 和 CCS 上工作。

    此致

    Santosh Athuru

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

    我能够使用 Win7和 CCS 6.1.2编译并运行 IDDK_PM_Servo_F2837x-v2工程、并获得正确的结果。 我不确定您的设置有什么问题、但我可以告诉您 EPwm1Regs 是链接器变量、不需要初始化。 它作为位于地址0x4000的结构出来。

    您能告诉我们您使用的编译器版本吗? 如果您在 CCS 中右键点击工程名称、选择 Show Build Settings...、然后点击树列表中的 General、您应该能够看到您实际使用的编译器版本。

    此外、您使用的是哪种构建配置? F2837x_RAM 或 F2837x_FLASH? 您可以在 Project Explorer 中的工程名称旁边看到此内容。

    如果您想测试硬件、可以尝试运行 controlSUITE 中的一些其他示例。 我建议使用 blinky、cpu_timers 或一个或 CLA 数学示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经解决了初始化问题。  ROM 引导堆栈对初始化数据进行了内存控制。  我相信有人在硬件方面有经验、会很快识别出它、但如果 ROM 上没有源代码、我甚至不知道 ROM 堆栈在那个区域。  引导至 RAM 时、ROM 引导的作用对我来说仍然是一个谜。  您可能希望解决 RAM .cmd 文件中的问题、如果在发布销售前对产品进行了测试、那将会很好。

    在文献中的多个位置、您建议关闭实时模式。  有一个图标可用于打开实时模式、但我找不到任何方法来关闭它。  右键单击项目名称/属性/调试/自动运行中有一个复选框、该复选框已取消选中。  我已经选中了它、然后仍然取消选中它。  不确定是否能完成工作。  您能向正确的方向引导我吗?

    Wayne Hunter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您应该能够通过单击用于启用实时模式的相同 CCS 按钮来关闭实时模式。 这是一个调试器设置、因此您无需更改项目属性。

    CPU1引导 ROM 在每次复位后运行(调试器复位除外)。 每当 CPU1复位 CPU2时、CPU2引导 ROM 就会运行。 这种情况发生在应用程序代码运行之前、因此除非您尝试在休眠期间保存数据、否则不应干扰任何内容。 (该示例不是。)