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

TMS320F28027: 数值转换以及运行周期的问题

Part Number:TMS320F28027Other Parts Discussed in Thread:C2000WARE

1.目前是程序中需要使用到乘法,但乘法结果会超过原本变量的范围,请问怎么转换?

volatile uint16_t inv_VbusInst;volatile uint16_t inv_VbusAvg;

上面两个变量是结构体inv_var中的两个变量,
if(inv_var.inv_VbusInst>15){
inv_var.inv_VbusAvg =(uint16_t)( ( ( (uint32_t)inv_var.inv_VbusInst-10 ) *62 ) >>8);

}

计算的语句如下:

inv_var.inv_VbusAvg=(inv_var.inv_VbusInst-10 )*62>>8;

当inv_var.inv_VbusInst=2000时发现(inv_var.inv_VbusInst-10 )*6结果大于uint16_t 数据的最大值65536,请问这时乘法的结果是自动为uint16_t 类型还是保持原结果不变?

2.数据强制转换

(uint32_t)inv_var.inv_VbusInst因为原本inv_var.inv_VbusInst为uint16_t类型这样的操作在计算过程是几个指令周期?

3.在debug中发现断点数量无法超过两个?请问能否设置多个断点数量?在debug中有没有运行时间提示(我想查看代码从一个位置到另一位置的执行时间)?

4.IQ问题

IQ的_IQmpy(A,B),IQsin(A),_IQ(float F)指令周期分别是多少?

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。

,

jun liu:

谢谢 

,

Cherry Zhou:

您好,

jun liu 说:当inv_var.inv_VbusInst=2000时发现(inv_var.inv_VbusInst-10 )*6结果大于uint16_t 数据的最大值65536,请问这时乘法的结果是自动为uint16_t 类型还是保持原结果不变?

您能否将 VbusAvg 声明为 uint32_t? 乘法运算的结果为32位,当您键入 uint16时,该值会被截断。 

jun liu 说:(uint32_t)inv_var.inv_VbusInst因为原本inv_var.inv_VbusInst为uint16_t类型这样的操作在计算过程是几个指令周期?

请参阅C200 instruction set and C2000 Extended instruction Set 文档。您可以查看代码反汇编并同时参考文档来验证时钟周期。 或者您可以使用 CCS 时钟(运行->时钟)来检查时钟周期的数量。

jun liu 说:3.在debug中发现断点数量无法超过两个?请问能否设置多个断点数量?在debug中有没有运行时间提示(我想查看代码从一个位置到另一位置的执行时间)?

C2000仅使能2个调试断点。 关于运行提示的问题,我们会再询问下相关工程师。

jun liu 说:IQ的_IQmpy(A,B),IQsin(A),_IQ(float F)指令周期分别是多少?

请参阅 c2000ware IQMath 库中的文档:<c2000ware>/libraries/math/IQmath/c28/docs。 

,

Cherry Zhou:

您好,关于断点问题:

jun liu 说:3.在debug中发现断点数量无法超过两个?请问能否设置多个断点数量?在debug中有没有运行时间提示(我想查看代码从一个位置到另一位置的执行时间)?

您可以设置无限量的软件断点。 如果代码是从闪存运行,那么您只能使用硬件断点,并且 C28x 器件上只支持2个硬件断点的限制。 请参阅以下链接,其中详细说明了我们为何有限制:

https://software-dl.ti.com/ccs/esd/documents/ccs_breakpoint_watchpoint_c2000.html

在较新的器件,比如F28004x上,我们有另一个名为 ERAD 的 IP,它扩展了对硬件断点的支持,并提供了更多的诊断和调试功能。 

,

jun liu:

文档哪里说明了?

,

jun liu:

VbusAvg 声明为 uint32_t? 那我所有涉及到VbusAvg的指令周期是一个还是两个?我想程序尽量快点

还有浮点数的时候IQ一定比普通的浮点数与整数相乘的结果运算速度快?

此外当采取左移,右移指令的时候请问16位,32位数据类型是否运算速度是一样的?

,

Cherry Zhou:

我们跟进给工程师看下。

,

Cherry Zhou:

您好,

jun liu 说:VbusAvg 声明为 uint32_t? 那我所有涉及到VbusAvg的指令周期是一个还是两个?我想程序尽量快点

这个是跟随优化设置而变化的。 最好的检查方法是查看反汇编视频中的汇编指令并查阅 CPU 指令集: 

https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_C2000_spru430f.pdf

以及extended instruction set: https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_C2000_spruhs1c.pdf

jun liu 说:还有浮点数的时候IQ一定比普通的浮点数与整数相乘的结果运算速度快?

对于两个32个浮点数相乘,MPY32需要大约3个pipeline周期。 IQNmpyI32需要4个周期。 有关周期数,请参阅 IQMath 文档。 您可以在<c2000ware>\libraries\math\IQmath\c28\docs 中找到该文档。

jun liu 说:此外当采取左移,右移指令的时候请问16位,32位数据类型是否运算速度是一样的?

是的。具体请参阅以上答复中的文档以了解确切的周期计数详细信息。 

,

jun liu:

请问单独的10*IQtoF(_IQ(0.01))与10*0.01哪种速度快?

,

jun liu:

汇编指令手册不仅是全英文而且还那么多内容?能否标注下我所寻找的内容的页数或者关键字?

,

Cherry Zhou:

jun liu 说:请问单独的10*IQtoF(_IQ(0.01))与10*0.01哪种速度快?

这个我们跟进给工程师问下哈。

抱歉目前我们的文件以及参考资料有些只有英文版本的,我们只提供技术支持,语言方面可能还是需要您自己解决哈。给您带来的不便敬请谅解!

,

jun liu:

请问单独的10*IQtoF(_IQ(0.01))与10*0.01哪种速度快?这个问题麻烦解决下 这种应该不算英文和中文的问题吧 

,

Cherry Zhou:

10*0.01的速度会更快,因为没有 IQMath 转换开销。 

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28027: 数值转换以及运行周期的问题
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1