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/UCD3138A:如何为结构中的数组分配值

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/604375/ccs-ucd3138a-how-to-assign-value-to-the-array-in-structure

器件型号:UCD3138A
主题中讨论的其他器件: TMDSEMU110-U

工具/软件:Code Composer Studio

您好!

    我试图定义一个包含变量、数组和结构的结构。 但是、我在为该结构中的数组和结构分配值时遇到了问题。 相比之下、我可以成功地为未包含在结构中的数组分配值。 我的 CCS 版本为6.2.0、 Fusion Digital Power Studio 为3.0.2。  

    这是我定义的结构。

   biquad_param 结构如下、它还包含数组。

   我还将所有变量定义为 extern 变量。 bq_buf_LD_test[3]数组用于比较。

   然后、我尝试按如下方式分配值:

    可以成功编译代码、并且 bq_buf_LD_test[3]的值正确。

  但是 pll1.bq_buf_LD[3]、pll1.bq_param_ve.a[2]和 pll1.bq_param_ve.a2_shif_n 的值是错误的、

这是一个非常简单的代码、我不知道为什么分配不正确。

提前感谢您。

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

    在我将所有" int64 "变量和数组移动到结构定义的底部后、它工作正常。 只需复制下面的结构即可。 仍想知道为什么会发生这种情况?

    typedef 结构


    PLL_STATE 状态;//输出:PLL 状态

    int16 v_ac_L;//输入:ac_L_sense
    int16 v_ac_N;//输入:ac_n_sense
    int16 v_ac;//输入:交流电压

    int16 v_ac_rms;//输出:估计的交流电压振幅除以 sqrt (2)

    int32 v_ac_inv;//输出:估算交流电压放大值的倒数

    int16 sin θ;//输出:估算相位的 sin
    int16 cos_theta;//输出:估算相位的 cos
    int16 v_pk_p;

    int16 v_pk_n;
    uint32 state_cntr;

    struct biquad_param bq_param_VE;

    int16 lock_cntr;
    int16 lock_detector;

    struct biquad_param bq_param_LD;

    int64 v_ac_amp;//输出:估计的交流电压振幅
    int64 ω;//输出:估算角速度
    int64 theta;//输出:估算相位
    int64积分器;
    int64 bq_buf_ved[3];
    int64 bq_buf_ld[3];

    }PLL;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为问题最有可能是内存调试器、而不是编译器。 本质上、存储器调试器必须解析整个.pp 文件和.map 文件、并确定变量所在的位置。 它是一个单独的程序、与 CCS 解析器无关。 因此、如果事情变得复杂、我之前已经看到过类似的事情发生了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW、除了存储器调试器、是否有其他方法调试 UCD3138A?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有 JTAG 和 XDS100v2。 它并不一定像看起来那样有用、因为您不能在不停止程序的情况下查看 RAM。 这对于 PFC 尤其有问题。 此外、当然、您不必将任何 JTAG 引脚用于其他用途。

    training.ti.com/using-jtag-ucd3138-installing-code-composer-studio-ccs-jtag-support
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到 XDS100V2 14引脚 JTAG 被 XDS110 (TMDSEMU110-U)调试探针取代。
    www.ti.com/.../TMDSEMU100V2U-14T

    那么、我可以使用 XDS110来调试 UCD3138A 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不知道我们已经测试过这一点。 让我尝试一下我们是否已经在 UCD 上对其进行了测试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 谢谢、期待您的回复。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还想知道、当您说"内存调试器最有可能出现问题"时、您是否意味着仅在使用内存调试器进行调试时才存在此问题? 如果更改为 JTAG、此问题可能会消失吗? 如果我将代码下载到闪存而不是 ROM、这不会是问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、问题可能仅与内存调试器有关。  代码应该正常工作、JTAG 也应该正常工作。

    我刚收到内存调试器专家的电子邮件、他说他已经标记了此问题。  他感谢您为他提供了一个他可以比较的工作和非工作案例。  

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

    您好!

    内存调试器有时会出现使用/*注释的问题。  我们希望解决这些问题。  我认为这一问题可能与顺序无关,而是与评论中带有"2*"的注释 θ 变量的两行有关。  再次尝试编译、只需删除这两条注释行即可。

    您是否还可以附加存在此问题的项目?

    谢谢、

    Amiel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还获得了有关 XDS110的答案。 我们已经开始测试、我们需要对设置以及可能对我们的代码进行一些更改。 目前、我们不支持 XDS110。 DigiKey 和 Mouser 以及可能还有其他分销商仍提供 XDS100V2。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您提供的所有信息。 我将尝试使用 XDS100v2进行调试。

    此致

    威晶

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、如果您只能共享生成的.map 和.pp 文件就足够了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的建议。 我尝试删除所有的/*和2*,但仍然无法正常工作。 通过将所有 int64变量移动到结构体定义的底部来更改顺序后、它工作正常。 该项目随附在 belowe2e.ti.com/.../Test_5F00_PLL_5F00_try.zip 上

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

    您好!

    这里的问题是内存调试器不完全支持 Int64。  此变量类型具有自对齐规则、需要从存储器中的字边界的开头开始。  内存调试器未将此因素考虑在内。  移动后它起作用的原因是它与字边界重合。  不久将发布一个包含此错误的新版本并发布到网络上。  感谢您提供项目来帮助调试此问题。

    Amiel

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

    非常感谢您解决此问题!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否尝试一下这个版本并让我知道它是怎么发生的?

    software-dl.ti.com/.../TI-Fusion-Digital-Power-Studio-3.0.22.exe

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

    尊敬的 Amiel:

    我刚刚尝试了新版本、问题仍然存在。

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

    抱歉! 这是错误的构建。 我将在一个小时内得到正确的答案。

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

    您好、Weijing、

    下面是正确的构建:

    software-dl.ti.com/.../TI-Fusion-Digital-Power-Studio-3.0.23.exe

    下面是一个屏幕截图:

    Amiel

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