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.

[参考译文] TMS320F28377D:CLA 任务地址大小

Guru**** 2433180 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1546786/tms320f28377d-cla-task-adress-size

器件型号:TMS320F28377D


工具/软件:

您好、

我尝试使用 CLA 来执行一些计算并减轻 CPU 负载。 但是、当我初始化 CLA 时、CCS 会在此行上发出警告:

cla_mapTaskVector (CLA1_BASE、CLA_MVECT_1、(uint16_t)(&Cla1Task1));

警告为:

#770-D:从指针转换为较小整数

这似乎是因为&Cla1Task1 是一个 32 位指针、并且将它转换为 uint16_t 会导致截断。
我不理解的是为什么 Cla1Task1 的地址是 32 位、而不是按预期的 16 位。

当然,如何摆脱这个警告 Grin

感谢您的支持 Slight smile

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

    您好 Louis:

    您的工程中是否包含.cla 文件? 这就是 Cla1Task1() 函数的定义位置。

    请注意、CLA 有一个 16 位地址总线、因此可以访问较低的 64KW 空间。 每个 CLA 任务 (1 至 8) 都有自己的 MVECTx 寄存器。 当任务触发时、CLA 将相关任务的 MVECTx 寄存器加载到 MPC(CLA 程序计数器)、并从该点开始执行。

    您可以通过以下链接找到有关相应内核上数据类型的更多详细信息: https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/faq.html#how-are-data-types-different-on-c28x-and-cla

    此致、

    Ozino

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

    感谢您的答复。 我已包含该.cla文件、但问题仍然存在。 我认为、只要出现此警告、CLA 任务就无法正确执行、因为它们可能被错误地引用。

    如何使用.cla文件中所声明任务的 16 位地址正确地将 MVECT 寄存器初始化?

    以下是一些有助于澄清问题的信息:

    -> 在 cmd 文件中:

      CpuToCla1MsgRAM:> RAMLS1、page = 0
      Cla1ToCpuMsgRAM:> RAMLS2、page = 0
      文章
      {
       *(Cla1Prog)
      } LOAD = FLASHJ、RUN = RAMLS3 | RAMLS4、
      LOAD_START (Cla1funcsLoadStart)、
      RUN_START (Cla1funcsRunStart)、
      大小 (Cla1funcsLoadSize)
    在 320_cla.c 中:
    #include
    #include “cla_320.h"</s>“

    pragma DATA_SECTION (a“CpuToCla1MsgRAM")“);
    pragma DATA_SECTION (b“CpuToCla1MsgRAM")“);
    #pragma DATA_SECTION (c“Cla1ToCpuMsgRAM")“);
    浮点 A = 0
    浮点 b = 0
    浮点 c = 0
    ->在 320_cla.h :
    __中断 Cla1Task1();
    __中断 Cla1Task2();
    __中断 Cla1Task3();
    __中断 Cla1Task4();
    __中断 Cla1Task5();
    __ interrupt void Cla1Task6 ();
    __中断 Cla1Task7();
    __中断 Cla1Task8();

    extern float a、b、c;
    -> 在 calcul.cla 中:
    #include “cla_320.h"</s>“
    __中断无效 Cla1Task1 (void)

    B = 0.0000001;
    c = a + b;
    }
    当我在调试模式下运行时、我会看到的内容:
    Cla1Task1: 0x009800
    Cla1Task3: 0x009822
    这是放置在  MVECT 中的值。 我想执行与示例相同的操作:  
    Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1);
    发出可疑警告。
    感谢你的帮助
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您的工程似乎没有正确配置 CLA。 请查看此文档、了解启用 CLA 的步骤。 查看并更新您的设置程序后、请告诉我。

    /cfs-file/__key/communityserver-discussions-components-files/171/CLAProjectStructureUG.pdf 

    此致、

    Ozino