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.

[参考译文] TMS320F28027:数字转换和运行周期问题

Guru**** 2782615 points

Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1110781/tms320f28027-number-conversion-and-operating-cycle-issue

器件型号:TMS320F28027
主题中讨论的其他器件:C2000WARE

大家好、

以下是客户可能需要您帮助的几个问题:

1) 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) 3)在调试期间、它发现断点的数量不能超过2个。 是否可以设置多个断点? 调试中是否有运行时提示? (客户希望查看代码何时从一个位置执行到另一个位置)  

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

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 userid="496057" url="~/support/microriers/C2000-microset-group/C2000/f/C2000-microset-forum/1110781/tms320f28027-number-conversion and opering-cycley-issu"] inv_var.inv_VbusAvg =(uint16_t)(((((((uint32_t) inv_var.inv_VbusInst-10)*62))*8>quote[];

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

    ~引用 userid="496057" URL"μ C/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1110781/tms320f28027-number-conversion 和 opering-cycle-issue"]、因为 inv_var.inv_VbusInst 是 uint16_t 类型。 计算中需要多少个指令周期?  [/报价]

    请参阅 C200指令集 和 C2000扩展指令集 文档。 您可以查看代码反汇编并与文档交叉检查以验证时钟周期。 或者、您可以使用 CCS 时钟(运行->时钟)来检查时钟周期的数量。  

    ~引用 userid="496057" URL"μ C/support/microrims/C2000-microset-group/C2000/f/C2000-microset-forum/1110781/tms320f28027-number-conversion 和 opering-cycle-issue"]在调试过程中、发现断点数量不能超过两个。 是否可以设置多个断点? 调试中是否有运行时提示? (客户希望查看代码何时从一个位置执行到另一个位置) 

    C2000仅启用2个调试断点。 对于运行时提示、 我将为此分配一名 CCS 专家。  

    [~ userid="496057" url="支持/microsystems/c2000-microsystem-group/c2000-f/c2000-microsystem-forum/1110781/tms320f28027-number-conversion 和 opering-cycle-issue]4) _IQmpy (a、b)、IQsin (a)、_IQ (float)指令周期分别是多少?  [/报价]

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

    -Shantanu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    樱桃

    关于断点、

    ~引用 userid="496057" URL"μ C/support/microrims/C2000-microset-group/C2000/f/C2000-microset-forum/1110781/tms320f28027-number-conversion 和 opering-cycle-issue"]在调试期间、发现断点数量不能超过两个。 是否可以设置多个断点? 调试中是否有运行时提示? (客户希望查看代码何时从一个位置执行到另一个位置) 

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

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

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

    谢谢、此致、

    桑托什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、Shantanu 和 Santosh、

    感谢您的支持!  

    A. VbusAvg 被声明为 uint32_t、那么涉及 VbusAvg 的所有指令周期是一个还是两个指令周期? 客户需要程序尽快进行。

    B. IQ 是否比正常浮点数乘以整数更快?  

    C. 当执行向左/向右移位指令时、16位和32位数据类型的运行速度是否相同?  

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    樱桃

    我不知道 Shantanu 是否有机会去看看。 请在周一之前回复。

    谢谢、此致、

    桑托什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    樱桃

    [~ userid="496057" url="支持/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1110781/tms320f28027-number-conversion 和 opering-cycle-issue/4122446#4122446"]a. VbusAvg 被声明为 uint32_t、那么涉及 VbusAvg 的所有指令周期是一个还是两个指令周期? 客户需要尽快执行该程序。[/quot]

    这会随优化设置而变化。 最好的检查方法是查看反汇编视频中的汇编指令并查阅 CPU 指令集: https://www.ti.com/lit/ug/spru430f/spru430f.pdf?ts=1656317582355&ref_url=https%253A%252F%252Fwww.google.com%252F 和扩展指令集: https://www.ti.com/lit/ug/spruhs1c/spruhs1c.pdf?ts=1656317609983&ref_url=https%253A%252F%252Fwww.google.com%252F 手册


    [~ userid="496057" url="支持/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1110781/tms320f28027-number-conversion and opering-cycleal-issue/4122446#4122446"b. IQ 是否比正常浮点数乘以整数更快?  [/报价]

    对于多个两个32个浮点数、MPY32需要大约3个流水线周期。 IQNmpyI32需要4个周期。 有关周期数、请参阅 IQMath 文档。 您可以在中找到相关文档 \libraries\math\IQmath\c28\docs

    [引用 userid="496057" URL"~μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1110781/tms320f28027-number-conversion and opering-cycleal-issue/4122446#4122446"]在移位/右移位指令时、16位和32位数据类型是否以相同的速度运行?  [/报价]

    是的。 同样、请参阅上述文档以了解确切的周期计数详细信息。

    -Shantanu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shantanu、

    分离10*IQtoF (_IQ (0.01))和10*0.01,哪种速度快?  

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    樱桃

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

    -Shantanu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Shantanu、

    ~您没有 IQMath 转换开销、因此请引用 userid="419856" URL"μ C/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1110781/tms320f28027-number-conversion 和 opering-cycle-issue/4127230#4127230"]。[/quote

    正如您所说的,10*0.01速度更快,IQMath 运算的目的是什么,以及何时使用 IQmath?  

    此外、当程序未调试时、是否可以查看汇编代码?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="496057" url="支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1110781/tms320f28027-number-conversion 和 opering-cycle-issue/4131461#4131461"] IQMath 操作的目的和使用时间是什么?  [/报价]

    如果您的程序使用定点、IQMath 对于在定点中执行运算非常有用、无需转换为浮点、然后使用 FPU32。 例如、某些外设数据输出可以是定点的。

    [~ userid="496057" URL" URL"μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1110781/tms320f28027-number-conversion and opering-cycleal-issue/4131461#4131461"]如果程序未调试、是否可以查看汇编代码[?]

    您可以使用 C:\ti\ccs1100\ccs\tools\compiler\ti-cgt-C2000_21.6.0.LTS \bin 中的 dis2000工具

    -Shantanu