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.

[参考译文] TMS320F28P650DK:任务未在大型 ISH CLA 程序上运行

Guru**** 2534260 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1558858/tms320f28p650dk-task-not-running-on-large-ish-cla-program

器件型号:TMS320F28P650DK
Thread 中讨论的其他器件:C2000WARESysConfig

工具/软件:

大家好!

CCS:20.2.0.12_1.5.0、 编译器 v22.6.2.LTS

问题:CLA 任务大小使另一个任务停止正常运行

要重新创建:

1.导入 cla_ex1_asin 项目
2.添加额外的行#300 in cla_ex1_asin.c 、要运行任务 2:

299      CLA_forceTasks (CLA1_BASE、CLA_TASKFLAG_1);
300     CLA_forceTasks (CLA1_BASE、CLA_TASKFLAG_2);  
3.修改中的任务 2 和 3 ASIN.cla 如下所示:
unsigned long x1,x2,x3;
 
unsigned int result[3];
interrupt void Cla1Task2 ( void )
{
    unsigned long i;
    i  = 1;
 
    x2 = i%32;     
    x3 = i+1;
 
    if (x2==1)
      result[0]=1;
    else result[0]=2;
}

#define USELESS_WORK {  x1= 1 + (1U << (i%32));}
interrupt void Cla1Task3 ( void )
{
 unsigned int i;

 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 //USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 

}
并运行程序。
生成的变量 x1、x2 设置了正确的值:
x2:1
X3:2
现在从任务 3 的最后一个多余代码行中删除//注释、因此任务 3 变为:

interrupt void Cla1Task3 ( void )
{
 unsigned int i;

 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 USELESS_WORK  USELESS_WORK  USELESS_WORK USELESS_WORK  USELESS_WORK  USELESS_WORK
 

}
 
然后再次运行程序。
x1 和 x2 都是 0。

任务 3 甚至没有运行,它只是占用更多的空间,除非我误解了这些应该如何工作,它在某种程度上影响任务 2 的运行方式。
任务 3 大小为 1688 字节、远低于 CLA2 文档中指定的任务代码大小限制。
谢谢您、
-Alon。

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

    尊敬的 Alon:

    我将尝试复制您的设置并查看是否得到相同的行为。 我确实看到了一个潜在的问题、那就是任务 3 中的 i 变量在实际初始化之前在 unusinate_work 定义中使用。 我不确定这会如何导致您看到的行为、但也许可以在定义之前尝试在任务 3 中初始化 I、看看它在此期间是否有任何变化。

    此致、

    Delaney

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

    尊敬的 Delaney:
    感谢您的答复。
    中的任务 3 不运行、任务 3 的内容无关紧要、只占用它们占用的代码空间。
    您可以使用位于该位置(或任务 4 等)并占用空间的任何代码重新创建此问题。
    谢谢您、

    -Alon。

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

    尊敬的 Alon:

    我将测试此问题、并在接下来的 1-2 天内回复您。 对延迟深表歉意。

    此致、

    Delaney

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

    尊敬的 Alon:

    对长时间的延误表示歉意。 我已经尝试了上面的步骤、取消任务 3 中最后一行的注释后、最终收到内存错误。 我还使用相同的编译器版本: v22.6.2.LTS。

    您是否对链接器 cmd 文件进行了任何修改? 您从哪个 C2000ware 版本导入工程?

    谢谢、

    Delaney

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

    附加了我的 cmd 和 syscfg 文件:

    e2e.ti.com/.../28p65x_5F00_cla_5F00_ram_5F00_lnk_5F00_cpu1.zipe2e.ti.com/.../4380.cla_5F00_ex1_5F00_asin.zip

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

    尊敬的 Alon:

    感谢您提供链接器 cmd 文件。 我将尝试使用这些编译和运行工程、然后返回给您。

    此致、

    Delaney

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

    尊敬的 Alon:

    我看到问题了。 在 SysConfig 中、将 LS8 配置为 CLA 程序存储器、将 LS9 配置为 CPU 专用内存。 但是、链接器 cmd 文件将 Cla1Prog 分配给:

       Cla1Prog         : > RAMLS0 | RAMLS9
    

    由于使用了语法“>",“,链接、链接器会将 Cla1Prog 存储器放入其中 电子产品 LS0 或 LS9、以有足够空间容纳所有 CLA 程序存储器为准。 当额外的行被注释掉时、链接器会将所有 CLA 程序存储器放置在 LS0 中而不会出现问题。 在中注释 CLA 任务 3 中的额外行后、Cla1Prog 段无法再容纳在 LS0 中、而是放置在 LS9 中。 但正如我们所确定的、在 SysConfig 中没有为 CLA 程序内存配置 LS9、而是 将其配置为 CPU 专用内存、这是一个问题。  

    与此器件上的 LS8 和 LS9 还有一些其他的细微差别。 它们从 CPU 和 CLA 的角度具有不同的地址。 因此、我们需要在 CLA 程序的链接器 cmd 文件中定义单独的加载和运行地址。  

    解决方案:  

    1. 将以下内容添加为新的存储器元素。  这已作为注释出现在您发送的链接器 cmd 文件中 — 将其注释到文件中。

        RAMLS8_CLA    : origin = 0x004000, length = 0x002000  // Use only if configured as CLA program memory
    

    1. 将 Cla1Prog Sections 规格更改为以下内容:

       Cla1Prog        : LOAD = RAMLS8,
                         RUN = RAMLS8_CLA,
                         ALIGN(4)

    以下是用于参考的固定链接器 cmd 文件:

     e2e.ti.com/.../28p65x_5F00_cla_5F00_ram_5F00_lnk_5F00_cpu1.cmd

    如果该解决方案适合您、请支持此回答。 请注意、需要执行一些额外的步骤才能使 LS8 和 LS9 正常工作以进行闪存构建。 请参阅 C2000ware 示例 CLA_ASIN_LS8_9。  

    此致、

    Delaney

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

    谢谢! 这解决了问题。

    我觉得奇怪的是没有发出错误或警告、链接器知道存储器的哪些区域属于哪个区域。

    因此、我不是在 19 秒内抓住自己的监督、而是在 19 天内解决问题。

    谢谢您、

    -Alon。

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

    尊敬的 Alon:

    我同意、如果没有链接器发出错误或警告、很难找到此问题。 我不确定是否可以让链接器检测在 SysConfig 中选择的设置、但我会查看一下。 我还提出了以下增强功能的请求、以尝试避免  将来有人遇到这种情况:

    • 如果选择 LS8 或 LS9 作为 CLA 程序存储器、则 Sysconfig 警告:链接器 cmd 文件中需要不同的运行和加载地址、以及闪存构建应用程序代码中需要的额外步骤。  
    • 向所有 F28P65x 和 F28P55x 链接器 cmd 文件添加了额外注释、说明如果为 CLA 添加了 LS8 或 LS9、则需要如何使用

    此致、

    Delaney