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.

CLA每传送一个数据的时间为什么要好几个us?

Dear 亲们,请问CLA给主CPU中断每传送一个数据的时间为什么要好几个us?我实际程序有30个变量,这样cput读数据的时间都有100u+了,导致cpu中断时间都不对了。程序见附件。急等帮忙解决,非常感谢!

CLA Data issue.rar
  • 为什么要这样传送呢?

    是否可以直接在“CLA-to-CPU Message RAM”中定义一个数组,CLA写,CPU读走?

  • 非常感谢您的回复。这个是我参考例程上面这么定义,然后传送的。请问在CLA-to-CPU Message RAM定义一个数组与我们定义变量有什么区别,不都是放在Cla1ToCpuMsgRAM里面的吗,实际CLA给cpu传的变量有30多个,都要用数组定义?能否帮忙直接在程序中修改?感谢!

  • 我的意思是,既然CPU有权限去读 CLA-to-CPU的权限,直接用这些数据就好了,你为什么还需要再赋值一遍呢?

  • 因为cpu中断希望在进入中断时把CLA的数据拿过来用,在cpu中断过程中这些数据都不会发生改变。如果不在刚进入cpu中断时赋值,可能导致cpu中断运行中采到的数值会发生变化,因为CLA与cpu是同步运行的。如下面cla程序中的Ua_s,可能导致cpu中断有时用到的是Ua_s=Uabcs_const*Ua_s1-votagebias结果,有时用到的是Ua_s=Ua_s-Ua_ref结果,这样应该有问题吧?   另外,奇怪的是都是在.c文件下,且都在ram中,为什么把CLA中的变量赋值给cpu,会需要花几十us,正常不是几个system时钟就赋值完了吗?如果不是CLA的变量,而是cpu之间的变量赋值就正常的几个system时钟就搞定了。

    Ua_s=Uabcs_const*Ua_s1-votagebias;

    Ua_s=Ua_s-Ua_ref;

  •  还有就是CLA的数据都是float的,而cpu用到的数据大多都是IQ类型的,所以希望在void DATA_CLAtoCPU()函数中直接把CLA的数据统一都转化为cpu可以使用的类型。谢谢

  • 请问这个问题解决了吗?

  • 没有打开你的代码,只是看到你说的“CLA的数据都是float的”,我就想起以前我也有此经历。当时写了一个程序,本来电机跑得很欢快,后来突然变慢了,原因就是从CLA中取出float数据然后转成long,就加入了这一句代码而已,居然可以直接把电机的速度拖慢到肉眼可以看出来。

    CLA传给CPU的数据,考虑都统一成long型再传出来吧,这样快很多,现在我就是这么做的。CPU传递给CLA的,倒是可以考虑用float,感觉还过得去,注意只是传递,不要做任何运算和转换。这个需求源于一个限制,CLA的空间只有6K,如果要查一个大表,根本无法放在CLA中,所以可以在Flash中建立表,表的数据可以是float的,然后用一个flaot类型变量,就是CPU to CLA的变量,从flash中读出来传给CLA,就这个还不算慢。

    以前我还在这里问过一个问题,就是关于float和long的转换,因为CPU实在搞不起float,而long在CLA中占用的空间比float还大,所以CLA和CPU之间务必有一个转换过程,那么数据转换应该放在CLA中还是放在CPU中呢?那时没人回复,我当时也还不懂测试代码运行时间,后来凭感觉,还是放在CLA中比较快。