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 转换开销。