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)。
Martin Yu:
问题1:__sqrt()应该是C/C++编译器支持的指令,可以去编译器手册上找下;
问题2:不能再task中对变量进行初始化,需要在任务启动前进行,如:
fVal = 2; Cla1ForceTask1andWait();
可以用RAM去传递变量的值;
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)。
wellsking:
回复 Martin Yu:
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();
也不能产生断点!