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.

controlSUIT中 28035 CLA的sqrt例子

controlSUIT中 28035 CLA的sqrt例子

有//Task 1 :y = sqrt(x)


__interrupt void Cla1Task1 ( void )
{
    fResult = __sqrt(fVal);
}

这个 __sqrt()函数在哪里有说明,

是不是要包含IQmath才可以使用。

 

问题2.

我用Cla1ForceTask8andWait(); 触发task8

在task8中初始化一个变量 ClaData.fCoef.B1=0.046790559;

用Expressions 查看ClaData.fCoef.B1的值。发现ClaData.fCoef.B1没有初始成功(至少在Expressions 中没有显示ClaData.fCoef.B1等于0.046790559)。

如果我用PWM 周期性的触发 task6。在Task6中赋值ClaData.fCoef.B1=0.046790559; 。

则在Expressions 中显示ClaData.fCoef.B1等于0.046790559)。

 

 

 

  •  问题1:__sqrt()应该是C/C++编译器支持的指令,可以去编译器手册上找下;

    问题2:不能再task中对变量进行初始化,需要在任务启动前进行,如:

    fVal = 2;
    Cla1ForceTask1andWait();

    可以用RAM去传递变量的值;

  • 1、我定义一个变量 fval

    #pragma DATA_SECTION(fval,"Cla1DataRam0");

    float fval;

    2、CLA初始化

        Cla1Regs.MVECT6 = ((Uint16)Cla1Task6 - (Uint16)&Cla1Prog_Start);
        Cla1Regs.MVECT7 = ((Uint16)Cla1Task7 - (Uint16)&Cla1Prog_Start);
        Cla1Regs.MVECT8 = ((Uint16)Cla1Task8 - (Uint16)&Cla1Prog_Start);

     Cla1Regs.MPISRCSEL1.bit.PERINT6SEL = CLA_INT6_ADCINT6;
     Cla1Regs.MPISRCSEL1.bit.PERINT7SEL = CLA_INT7_NONE;
     Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;

     Cla1Regs.MMEMCFG.bit.PROGE = 1;
     Cla1Regs.MMEMCFG.bit.RAM0E = 1;
     Cla1Regs.MMEMCFG.bit.RAM1E = 1;

     Cla1ForceTask8();
     //Cla1ForceTask8andWait(); 用Cla1ForceTask8andWait();触发task8

    3、在task8中初始化fval

    __interrupt void Cla1Task8 ( void )
    {
        fval=0.00;
    }

    在task6中使用fval

    __interrupt void Cla1Task6 ( void )
    {
        fval=AdcResult.ADCRESULT0;
    }

    这样的用法,有什么问题吗?

    Cla1Task6 中对fcal赋值,计算是没问题的,我验证过。

    但是,为什么Task8的赋值不对,并且,我在Task8里放 __mdebugstop();

    也不能产生断点!