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.

[参考译文] MSP430FR2355:枚举类型在运行后通过 sprintf 命令进行更改??

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1170627/msp430fr2355-enum-type-getting-changed-by-sprintf-command-after-it-has-run

器件型号:MSP430FR2355

大家好...

我有一个运行的 sprintf 语句...如果我在语句上停止调试器看起来一切正常...当我单步执行语句时,它会更改枚举类型的值。  此枚举仅在按钮之后分配。

我验证调试器何时停止,是否没有设置 ISR 标志来指示按钮按压...有人能告诉我这里可能会发生什么情况吗??  请注意带帮助备注...如果我不将该语句放入代码中,则 SW.CntScreen 将采用另一个值.....

switchTracker_t sw = {GPS_SCREEN,0,F};

typedef enum {GPS_SCREEN = 0, AD_SCREEN, NULL_SCREEN} screen;
typedef struct switchTracker_t
{
    screen CntScreen;
    uint8_t CntSubMenu;
    uint8_t subMenuActive;
}switchTracker_t;

            if(sw.subMenuActive && (sw.CntScreen == AD_SCREEN))
            {
                LCD_clear();
                /*
                 * Publish data to LCD
                 */
                current = (prtnVals->motorCurrent * 3.3) / 4095;
                sprintf(mtr,"%04.2f", current);

                sw.CntScreen = AD_SCREEN; //BANDAID!!!!
                DatatoI2C.p = (uint8_t *) &mtr;
                DatatoI2C.size = sizeof(mtr);
                LCD_write(3, 8, &DatatoI2C);
            }

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

    这里有一些奇怪的事情发生在"MTR"上。 声明在哪里?

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

    声明/初始定义:

    char NMEAData[GPS_BUFF_DEPTH] = {0}, mtr[4] = {0};

    BTW...在此结束时,如果我进行以下替换(对于 Screen1和 Screen2),则所有编译和工作均按预期进行:

    mainScreen_t lvl_1[LCD_MAIN_MENUS] = {{0, 10, {"GPS"}}, {1, 10, {"A/D"}}};

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

    您的编译器可能会为 MTR 和&MTR 提供相同的结果、但这不是一个安全的选择。

    sprintf 格式对于字符串太大。 它将会清除下面的所有内容。

    sizeof()似乎是一个糟糕的选择,我怀疑你真的想要 strlen()

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

    感谢您的深入见解。。。 你是对的……我把 “%04.2f”改为 “%03.1f”,一切看起来都很好……是的,strlen 是我想要的!