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.

[参考译文] CCS/F28M36P63C2:包含 F28M36的 sprintf

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/707008/ccs-f28m36p63c2-sprintf-with-f28m36

器件型号:F28M36P63C2

工具/软件:Code Composer Studio

您好!

尝试使用协处理器器件中的 SPI 在 LCD 上打印电压和电流读数。 这些读数是实时变化的浮点值、因此我一直在尝试通过使用 sprintf 和格式化字符串、然后将格式化字符串作为 SPI 数据传输的一部分传递来实现这一点。 但它打印的是垃圾值而不是字符串。 我想知道我是否正确使用 sprintf 函数。 下面是涉及 sprintf()的一段代码。

字符串 A[17];
浮点 Vref1、Iref1;
sprintf (stringA、"%f VDC %f a"、Vref1、Iref1); 

我在 SPI 传输函数中将 stringA 作为参数传递。 我看不到任何令人信服的输出、只是一组与字符串长度相同的随机字符。 我只想确认其他一切都正常。 我可以打印常规字符串、而不会出现任何问题。

问题仅在于打印字符串中包含实时浮点变量。 一直在使用 sprintf()来完成此操作,但没有结果。 我做得不正确吗? 或者这是否无法使用 sprintf()实现?? 我将库函数假设设置为最小 sprintf()用法。

非常感谢您的任何建议、感谢您的参与。

Srini.

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

    Srini,

    如果您在"Expressions"窗口中添加这些变量并启用实时更新、您是否能够查看这些变量的正确值?

    此致、

    Ozino

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

    感谢您的参与和帮助。 是的、如果实时更新意味着这些变量的值是正确的、我可以在连续刷新模式下查看这些变量的值。 我可以在 sprintf 上完美地打印整数、只能使用实时浮点进行打印。 它甚至可以完美地打印实数 Tim 整数变量。 非常困惑为什么浮子不起作用。

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

    Srini,

    您是否在项目中启用了浮点支持? 如果没有、您可以在工程属性中执行此操作。 此外、请尝试在调用 sprintf 的任务中增大堆栈的大小。

    您可以查看此论坛 帖子 和此 post_2 以了解有关 sprintf()和 float 的更多信息。

    e2e.ti.com/.../2606547

    此致、

    Ozino

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、Ozino。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不用客气。 很高兴我能提供帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我请你,Ozino。 从今天上午我运行代码的每隔一段时间开始,它在 InitSysCtrl()处停止。

    *(unsigned int*) 0x4E58 = 7;//针对 InitAnalogSystemClock() Advisory 的权变措施
    if (((** InitAnalogSystemClock)(ACLKDIV4)| 0x8000)!= 0xA005){
    //如果返回值不是0xA005,则模拟子系统未正确初始化
    ASM (" ESTOP0");
    for (;;)
    ;} 

    它在 ESTOP0处停止。 这是因为模拟系统未正确初始化吗? 如何调试它

    通常会导致这种情况发生的原因是什么? 它仅在每次交替时发生。 它运行一次很好。 下次在 InitSysCtrl()停止时。 因此我停止该进程并再次运行它、它运行正常。这种情况会不断重复。 它真的很难理解

    Srini.

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

    有一个勘误表解释了该问题、并提供了配置模拟子系统时钟时的权变措施。 本论坛博文和文档对此进行了详细介绍。
    e2e.ti.com/.../1065715
    www.ti.com/.../sprz357

    以下是一些论坛帖子、可提供对解决方案的一些见解:
    e2e.ti.com/.../200033
    e2e.ti.com/.../1404075

    如果您仍然需要其他帮助、我建议您创建另一个帖子、以便您的问题由合适的专家正确回答。

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