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.

[参考译文] TMS320F28069:在 CLA 代码中定义共用变量

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1200039/tms320f28069-defining-shared-variables-in-cla-code

器件型号:TMS320F28069

大家好!

我对 CLA 实现有疑问。
根据 cla_software_dev_guide 第4.5章、建议 在 C28x.c 代码中定义共享变量、而不是 CLA 代码。
https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/faq.html

我只是想知道如果在 C28x 代码中定义共用变量会发生什么情况。
从我的角度来看、我的代码定义了 C28x 代码中的共享变量。  它可以在大多数生产的电路板上工作(数量为几千块)、然而、我发现一些电路板(大约20块)显示一些变量(ClaToCpu1MsgRam)变为0。

我担心的是 MCU 的一致性、为什么如果不推荐采用该方法、它可以在大多数 MCU 上正常工作、以及为什么它在某些 MCU 中无法工作。

非常感谢,加油打气!
Luiz



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

    尊敬的 Luiz:

    在.cla 文件中定义的变量只能由 CLA 访问、无法初始化。 您需要在 CLA 任务中对其进行初始化。

    关于仅选定板出现的问题、是始终可以重现、还是它们的行为是随机的?

    此致、

    Veena

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

    您好、Veena:
    抱歉、我在问题中的意思是、当我在 CLA 代码中定义共享变量时会发生什么情况。

    到目前为止、我的实现是在 CLA 中定义共享变量、类似这样的。

    /********************************************************************
    test.cla
    CLA C-code Source File
    ********************************************************************/
    #pragma(X,"CpuToCla1MsgRam")        // Assign X to section CpuToCla1MsgRam
    float X;
    #pragma(Y,"Cla1ToCpuMsgRam")        // Assign Y to section Cla1ToCpuMsgRam
    float Y;
    __interrupt void Cla1Task1 ( void )
    {
    float f1;
    Y = f1 * X;
    }
    
    /********************************************************************
    shared.h
    C28x and CLA Shared Header File
    ********************************************************************/
    extern float X;
    extern float Y;
    
    
    /********************************************************************
    main.c
    Main C28x C-code Source File
    ********************************************************************/
    #include "shared.h"
    void main (void)
    {
        float a;
        init()
        while (1)
        {
            a = Y;
        }
    }

    在普通的几千个电路板中、 有些电路板(~20) 有 CLA 变量问题。

    在这几个电路板中、一个或两个 ClaToCpu1MsgRam 变量 将返回 零 值。 这始终可重现。

    我想知道、我的实现方案是否不是推荐的做法、为什么在大多数 MCU 上它仍然可以工作并返回正常值。

    此致、
    Luiz

     

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

    在.cla 代码中定义共享变量的问题是您可能无法从 C28x 代码中引用这些变量。  

    从 CLA 示例注意:

    //请注意,.CLA 源中定义的全局变量对于 CLA 源是全局变量
    //文件。 即、它们可以在多个任务之间共享。 所有数据之间共享
    // CLA 和 C28x CPU 必须在 C (或 C++)代码中定义,而不是在中定义
    // CLA 代码。

    让我向硬件专家咨询一下为何某些电路板会出现问题。

    此致、

    Veena

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

    谢谢、Veena  

    所有共享的数据
    // CLA 和 C28x CPU 必须在 C (或 C++)代码中定义,而不是在中定义
    // cla 代码[/报价]

    我可以确认、当在 C 代码中定义共用变量时、所有共用变量在几个电路板样品中返回正确的值。

    可能无法从 C28x 代码引用这些变量。

    所以、我认为在这个问题上有可能性、不能说 CLA 代码中的定义肯定会阻止到共用变量的访问。


    为了便于参考、我附上了可分类为的器件型号:
    1、normal:返回共享变量为正常,即使对于 CLA 代码中定义的变量也是如此。
    2. CLA 问题:一个或两个共享变量返回零值,变量在 CLA 代码中定义。

    所有序列号都相同、表明它们来自相同的卷带/批次。


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

    您好、Veena、是否有硬件专家提供的任何消息?

    此致、
    Luiz

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

    您好!

    很抱歉耽误你的时间。

    请参阅编译器指南 www.ti.com/lit/spru514

     

     

    建议将共享变量保存在 C28x 源文件中、而不是 CLA 源文件中。

    希望这对您有所帮助。

    此致、

    Veena

     

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

    您好、Veena:
    我了解 参考编译器指南 www.ti.com/lit/spru514中的指南
    但它并未解释电路板之间的不一致性。
    如果有硬件专家的启发,请告诉我。

    请让我向硬件专家核实您为何遇到某些主板的问题。

    非常感谢、
    Luiz