Part Number:TMS320F280039C
CLA任务task1中,进行乘法运算,将运算结果赋值一个全局变量(属于CLAdata区),增加了这句话,一下子增加了CLA任务执行时间,代码如下:
附图1,加上这句话:执行时间为200us
附图2,未加上这句话:执行时间80ns
Yale Li:
qiang wang 说:
附图1,加上这句话:执行时间为200us
附图2,未加上这句话:执行时间80ns
这两张图片不清晰,请重新上传一下。
,
qiang wang:
就是执行的时间:任务进入IO拉高,任务退出前IO拉低。加上那句话,差别很大。
现在发现是这样的
1、未加那句话的时候,乘法的运算,在汇编里就默认未进行,导致时间很短
2、加上那句话,乘法的运算,汇编里正常,导致时间长。
请问,这个乘法运算这么占时间吗?怎么解决呢
,
Aiden zhang:
把你的运算变量全部改成float型,再测试一下。
,
Yale Li:
qiang wang 说:1、未加那句话的时候,乘法的运算,在汇编里就默认未进行,导致时间很短
因为编译器检测到最终的运算结果并没有被引用,所以相关运算就被优化掉了。你可以检查一下编译器控制台有没有输出相关警告;
qiang wang 说:
附图1,加上这句话:执行时间为200us
qiang wang 说:就是执行的时间:任务进入IO拉高,任务退出前IO拉低。
qiang wang 说:这个乘法运算这么占时间吗?
其实是没有任何问题的。
根据你的设计,这个乘法在for()循环中要执行1000次,粗略的算一下,假设系统时钟是100MHz,1个时钟周期就是10ns。for()循环之外的声明定义、赋值以及翻转IO的操作,相比之下可以忽略不记,那么每次for()循环的执行时间大概就是200ns,即20个时钟周期;如果按一条汇编指令需要2~3个时钟周期来算,这么长时间大概就有6~10条汇编指令,这个是在合理的范围之内的。更何况0039最大能跑到120MHz。
综上。
(另外,你上传的所有图片,除了第一张正常外,其余的都是类似于缩略图的样子,不清晰,你可以自己看下)