TI中文支持网
TI专业的中文技术问题搜集分享网站

CLA除法运算问题

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

Johnson Chen1:

res 的数据类型是什么?  

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

10#:

请确认定义变量为float类型,或者常量写成10.0的形式,参考例程的相关处理。

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

Jianxu Yang:

回复 Johnson Chen1:

res类型是float32的

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

Jianxu Yang:

回复 10#:

试过了,问题依旧,很奇怪的问题,我还遇到类似的问题,PI控制输出限幅,经过if语句后,就是没有输出,始终结果都是0,很奇怪的现象。CLA对C语言的支持是不是特别有限。

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

10#:

回复 Jianxu Yang:

你是在哪里查看的变量结果?如果在expression,请确保你已经将内核选定在CLA而不是C28x CPU,另外,你可以在memory窗口里直接输入变量的地址查看内存。

CLA对C语言的支持请查看发下wiki链接:

http://ap-fpdsp-swapps.dal.design.ti.com/index.php/C2000_CLA_%27C%27_Compiler_Prototype#C_Language_Restrictions

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

Jianxu Yang:

回复 10#:

 你好,我选择的确实是CPU,但是可以查看变量的状态,同时,当我变换一些代码时,即使是从CPU中查看的变量,也可以看出变化来。另外,当我观察不到变化时,我的机器实际工作中PI也确实是没有输出的。

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

Jianxu Yang:

回复 10#:

您给的链接我打不开,CLA的文档我也看了很多,本来以为驾轻就熟,没想到这个用起来还是有很多陷阱。看似代码没问题,实则有问题。

PIDout = (Vvars.Out <= Ivars.Out)?Vvars.Out:Ivars.Out;这个代码有时候不工作,换成if语句逐个判断就能工作。有时候是相反的。

还有,有时候逐个的if语句不能工作,if else能工作,真的是特别奇怪。

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

10#:

回复 Jianxu Yang:

http://processors.wiki.ti.com/index.php/C2000_CLA_C_Compiler#CLA_C_Language_Implementation

不好意思,刚刚这个是内部链接,这个wiki应该是可以的。更多资源可以查看:

http://processors.wiki.ti.com/index.php/Category:Control_Law_Accelerator_for_C2000

http://processors.wiki.ti.com/index.php/Control_Law_Accelerator_Resources

http://processors.wiki.ti.com/index.php/Control_Law_Accelerator_(C2000_CLA)_FAQ

http://processors.wiki.ti.com/index.php/Control_Law_Accelerator_(C2000_CLA)_Debug_on_CCS_FAQ

CLA它并不是C28x这样一个通用的CPU,所以确实有比较多的限制,对于上面的语句,建议使用更高效的专用汇编指令完成,而你实际是使用TI提供的C/C++ Compiler Intrinsics函数,参考编译器手册的Table 10-1. C/C++ Compiler Intrinsics for CLA.

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

Jianxu Yang:

回复 10#:

感谢您的耐心解答,之前我也想过用汇编来实现,后来查看了编译器手册,我也尝试过用__maxf32()和__minf32()来完成限幅工作,但是事与愿违,使用这两个语句依然无法工作!糟心吧,本人表示很糟心,最后用if语句逐个比较大小实现的。

大家好,我想请教个问题,我现在使用28035的CLA模块,在做除法运算时出现问题,在cla模块中大概的代码如下:

res1 = 123/10;这个代码可以运行,通过仿真器可以观察到结果,但是

res = 10;  res1 = 123/res;时出现问题,res1的运行结果为0.0.请问这是怎么回事?变量所在的RAM区没有问题,实在很困惑,请高手指点一二

Jianxu Yang:

回复 10#:

对了,我忘了说一个很重要的信息,就是当我环路里只有电压环工作的时候,是没问题的,后来加了电流环,两个环都出了问题,PI没有输出,后来才动的PI限幅代码,就可以了。我把编译器也升级到了最新版本了,问题依旧。

赞(0)
未经允许不得转载:TI中文支持网 » CLA除法运算问题
分享到: 更多 (0)