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.

[参考译文] CODECOMPOSER:如何将宏计算转换为适合 C2000的 uint16_t

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1488400/codecomposer-how-to-cast-macro-calculation-to-fit-uint16_t-for-c2000

器件型号:CODECOMPOSER
Thread 中讨论的其他器件:C2000WARE

工具与软件:

我收到警告"警告#175-D:浮点值不适合所需的整数类型"

我正在尝试更新16位的 ePWM TBPRD 寄存器、如下所示:

#define  USER_EPWMCLK_FREQ_MHz 100000000

#define USER_TARGET_FREQ_kHz 200000

EPWM_setTimeBasePeriod (EPWM1_BASE、(uint16_t)(USER_EPWMCLK_FREQ_MHZ /(USER_TARGET_FREQ_kHz * 1000)- 1));

关于如何转换/重新配置此命令以避免警告的任何建议?  我尝试了几种变体、到目前为止都没有成功。

谢谢!

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

    看起来您进行一些浮点运算、这些运算会使数字变得很大、以表示为 uint16_t  您能否看到在执行操作之前对#defines 进行类型转换是否合理?  

    有关详细信息、请参阅此论坛帖子。

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

    最终结果应该是"499"、所以最终结果应该没有转换为 uint16_t 的问题   

    解决方法是、我只是对499进行硬编码、但我想让宏在没有警告的情况下正常工作、以实现未来的灵活性。

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

    好的、我把这篇文章转发给编译器团队以便进一步评论。

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

    我无法重现诊断...

    [quote userid="513451" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1488400/codecomposer-how-to-cast-macro-calculation-to-fit-uint16_t-for-c2000警告#175-D:浮点值不适合所需的整数类型

    请展示该函数的原型  EPWM_setTimeBasePeriod .  对于在发出该诊断时生成的文件、请 显示编译器选项的文本。  将其从 Code Composer Studio 的"Console"视图中复制。  请复制并粘贴文本、不要使用任何屏幕截图。

    谢谢。此致、

    -George.

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

    编译器的版本是什么(而不是 CCS)?

    谢谢。此致、

    -George.

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

    您好、George:

    函数原型为 静态内联 void
    EPWM_setTimeBasePeriod (uint32_t base、uint16_t periodCount)  

    这来自 C2000 Ware_Motor SDK 自带 sdk_5_02_00_00\c2000ware\driverlib\f2837xd\driverlib\epwm.h

    构建命令和输出是

    构建文件:"../EPWM_setup.c"
    调用:C2000编译器
    "c:/ti/ccs1270/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/bin/cl2000 sdk"-v28 -ml -mt /ti/ccs1270/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/include --cla_support=cla1 /workspace/Project - float_support=fpu32 /ti/c2000/C2000--tmu_support=tmu0 Ware_Motor - vcu_support=vcu2 /ti/c2000/C2000Ware_Motor /ti/c2000/C2000Ware_Motor /ti/c2000/C2000Ware_Motor /ti/c2000/C2000Ware_Motor /ti/c2000/C2000Ware_Motor /ti/c2000/C2000Ware_Motor /ti/c2000/C2000Ware_Motor /ti/c2000/C2000Ware_Motor
    "../ePWM_setup.c"、第92行:警告#175-D:浮点值不适合所需的整数类型
    完成构建:"../epwm_setup.c"

    编译器版本为 v22.6.0.1.LTS

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

    不幸的是、我仍然无法重现这个问题。  指定源文件的映射 epwm_setup.c 、 请按照 如何提交编译器测试用例一文中的说明进行操作。

    谢谢。此致、

    -George.

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

    感谢您的试用。  我将看看我是否可以生成重新生成问题的测试项目。  我可能需要一周左右的时间才能回到这个问题上来。