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.

[参考译文] TMS320F28377S:TMS320F28377S

Guru**** 2471680 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/976052/tms320f28377s-tms320f28377s

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

您好!

我有两个相同的 CLA 任务用于滤波。 但在 CLA 任务2中、我遇到了无法访问语句的错误  

//
//任务1 (C)变量
//

#pragma DATA_SECTION (xn1、"CpuToCla1MsgRAM")
浮点 xn1;//输入数据
#pragma DATA_SECTION (yn1、"Cla1ToCpuMsgRAM")
浮点 yn1;//已过滤数据
#pragma DATA_SECTION (W1、"CLADataLS0")
float W1[FILTER_LEN]={0.0028370.0030005、0.0034464、0.0041735、0.005175、0.0064387、0.0079473、
0.0096783、0.011605、013696、015917、01823、020596、022973、025321、
0.027596、02976、0331772、033597、035201、0366550、0376360、038421、
0.038899、03.039059、038899、03842、037636、00.03555、035201、00.033597、
0.031772、02976、027596、025321、022973、020596、01823、015917、
0.013696、0.011605、0.0096783、0.0079473、0.0064387、0.005175、0.0041735、0.0034464、
0.0030005、0.0028375};
#pragma DATA_SECTION (fDelayLine1、"CLADataLS0")
fdelayLine1[FILTER_LEN]={0、0、0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、};



//
任务2 (C)变量
//
#pragma DATA_SECTION (xn2、"CpuToCla1MsgRAM")
float 3000xn2;//输入数据
#pragma DATA_SECTION (yn2、"Cla1ToCpuDataMsgRAM")
float (xn2、"CL0047

、0040、0040、0048、0000]n) float 2、0004、0048、00040、00040、00040、0048、0000、000n
0.0096783、0.011605、013696、015917、01823、020596、022973、025321、
0.027596、02976、0331772、033597、035201、0366550、0376360、038421、
0.038899、03.039059、038899、03842、037636、00.03555、035201、00.033597、
0.031772、02976、027596、025321、022973、020596、01823、015917、
0.013696、0.011605、0.0096783、0.0079473、0.0064387、0.005175、0.0041735、0.0034464、
0.0030005、0.0028375};
#pragma DATA_SECTION (fDelayLine2、"CLADataLS0")
fDelayLine2[FILTER_LEN]={0、0、0、0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、0、
0、0、0、0、0、0、0、0、0、}; 

谢谢 Vadim

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

    Vadim、

    我从屏幕截图中看不到任何明显的内容。  您能否提供以下信息:

    1. 预处理的源文件
    2. 编译器版本
    3. 使用的编译器选项

    有关如何创建的信息、请参阅此页面(1)。

    http://software-dl.ti.com/ccs/esd/documents/sdto_cgt_How-to-Submit-a-Compiler-Test-Case.html

    此致

    Lori

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

    构建文件:"../__filterFIR_LOOP.c"
    调用:C2000编译器
    "c:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/bin/cl2000 "-v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu2 -include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/include /ti/C2000Ware_3_03_00_00_Software/device_support/f2837xs/examples/cpu1/cla_iir2p2z/cpu01 -include_path="C:/ti/C2000Ware_3_03_00_00_Software/device_support/f2837xs/headers/include -include_path="C:/ti/C2000Ware_3_03_00_00_Software/device_support/f2837xs/common/include "-ccu_support=pricabi_guide-cla=200MHz-ctrab_guide_remote_display_guide_ines=-ctran_clar_guide-cep-clus_guide_ine_guide-cep-cep-ine_ine_ines=-cus_clus_clus_clus_guida-cep-cep-ine_ine_ine_ine_guida-cep-cep-cep-ine_ine_ine_ine_ine_ina-cus_ine_ine_ine_ine_ines=-cus_ine_
    已完成构建:"../__filterFIR_LOOP.c"

    构建文件:"../_FilterFIR_LOOP.CLA"
    调用:C2000编译器
    "c:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/bin/cl2000 "-v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu2 -include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/include /ti/C2000Ware_3_03_00_00_Software/device_support/f2837xs/examples/cpu1/cla_iir2p2z/cpu01 -include_path="C:/ti/C2000Ware_3_03_00_00_Software/device_support/f2837xs/headers/include -include_path="C:/ti/C2000Ware_3_03_00_00_Software/device_support/f2837xs/common/include "-coffer_guidi=200MHz-cla_remote_remote_display_cla=cla-cine_display_guida-cla=cine_guida-cla-cla-cep-ine_guida-cine_ine_ine_ine_guida-cep-ine_ine_guarity-cep-cep-cine_ine_ine_ine_ine_ines=-cify_clar_clar_guida-cep-cep-cine_ine_ine_ine_ina-cep-cep-cine_ine_ina-cep-cep-in
    ".//_FilterFIR_LOOP.CLA"、第36行:警告#112-D:语句无法访问
    完成构建:"../_filterFIR_LOOP.CLA"

    e2e.ti.com/.../_5F005F00_FilterFIR_5F00_loop.pp.txte2e.ti.com/.../_5F00_FilterFIR_5F00_loop.pp.txt

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

    谢谢您-我已要求编译器团队来看看。  您很快就会听到他们的反馈。

    此致

    Lori

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

    您好!  

    任务不相同。 循环的第二个任务始终具有真条件。

    Edward

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

    爱德华  

    我错过了屏幕快照中的1>0条件。 感谢您发送预处理文件。

    对于无限循环之后的代码、您会看到警告。 此外、这不是错误。   

    此致、

    Greg

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

    伙计们、

    非常感谢您的帮助! 但是、您能不能提请我注意、两者之间的区别在哪里? 这肯定是一个无限循环、因为当我运行它时、它卡住了、但我在代码中看不到它、Cla1Task2始终为真?

    _interrupt void Cla1Task1 (void)
    {
    _mdebugstop();
    int i;
    fTemp = 0;
    fTemp = 0;
    #pragma UNROLL (49)
    for (i=filter_LEN-1;i>0;i--)
    {
    fDelayLine1[i]= fDelayLine1[I-1];
    fTemp += W1[i]*fDelayLine1[i];
    }
    fDelayLine1[0]=(float) xn1;//转换为单精度浮点
    fTemp += W1[0]*fDelayLine1[0];
    yn1 =(int) fTemp;
    __mdebugstop();
    }
    __interrupt void Cla1Task2 ( void ){
    
    _mdebugstop();
    int i;
    fTemp = 0;
    fTemp = 0;
    #pragma UNROLL (49)
    for (i=filter_LEN-1;1>0;i---)
    {
    fDelayLine2[i]= fDelayLine2[I-1];
    fTemp += W2[i]*fDelayLine2[i];
    }
    fDelayLine2[0]=(float) xn2;//转换为单精度浮点
    fTemp += W2[0]*fDelayLine2[0];
    yn2 =(int) fTemp;*/
    // yn2 = xn2;//只是为了旁路滤波
    __mdebugstop();
    
    } 

    谢谢 Vadim

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

    第一个任务:

    原因 (i=FILTER_LEN-1;i>0;i--)

    第二项任务:

    原因 (i=FILTER_LEN-1;1>0;i--)

    I>0与1>0。 希望您现在看到差异。

    Edward

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

    感谢 Edward 和 Greg。  我发誓、我查看了该屏幕截图、获得了10分钟 的良好休假记录。   

    欣赏美景:)  

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

    大家、Lori、

    非常感谢!  

    Vadim

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

    大家好、我很抱歉、即使在修正后、仍然无法使它们同时进行滤波。  
    我从 adca_ISR 调用 Cla1ForceTask1andWait()、从 ADCB_ISR 调用 Cla1ForceTask2andWait()
    但是、就像现在一样、在附加的文件中、如果我在此中断处放置一个中断点、ADCB_ISR 不会停止。 如果我在 Cla1ForceTask2andWait()中注释掉“for”语句,它在 ADCB_ISR 和 adca_ISR 中停止。
    环路时序是否会影响中断? 我只在启用了一个任务的情况下检查了代码、它们的工作方式相同、没有问题。

    _interrupt void Cla1Task2 (void)
    {
    _mdebugstop();
    int i;
    fTemp = 0;
    fTemp = 0;
    //#pragma UNROLL (49)
    // for (i=filter_LEN-1;i>0;i-)//仅在这种情况下,两个中断都起作用:adca_isr (void)、adb_isr (void);
    {
    fDelayLine2[i]= fDelayLine2[I-1];
    fTemp += W2[i]*fDelayLine2[i];
    }
    fDelayLine2[0]=(float) xn2;//转换为单精度浮点
    fTemp += W2[0]*fDelayLine2[0];
    yn2 =(int) fTemp;
    __mdebugstop();
    
    } 

    谢谢 Vadim

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

    这是完全不同的问题!

    您有一个 CLA、而不是两个。 CLA 任务不能同时运行两个或更多任务、一个必须退出才能让另一个任务运行。  

    Edward

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

    [引用 user="Vadim]I 从 adca_ISR 调用 Cla1ForceTask1andWait(),从 ADCB_ISR 调用 Cla1ForceTask2andWait()
    但是、就像现在一样、在附加的文件中、如果我在此中断处放置一个断点、ADCB_ISR 不会停止。[/QUERP]

    由于 C28x 正在等待任务完成、因此 C28x 将在 ISR 中保持更长的时间。  如果任务中的 for ()循环被移除、那么 C28x 在 ISR 中保持的时间会更短。   

    ADCA ISR 的优先级高于 ADCB -因此我怀疑,对于 for (),会接收到一个新的 ADCA 中断,然后立即提供服务。   基本上、ADCA 中的等待时间会使 CPU 无法为 ADCB 提供服务、ADCB 是一个较低优先级的中断。  

    此致

    Lori