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:是否有位字段问题?

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/963532/msp430fr2355-bit-field-questions

器件型号:MSP430FR2355

想要创建一个字符(8位)、其中每个位代表布尔标志 T 或 F。 如何执行此操作?  其次、它是否仅占用存储器中的一个字符?  我终于读了、似乎应该使用 unsigned char?

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

    位字段是非常明确的实现定义、您实际上必须尝试它并查看它。 如果您要执行此路由、则可以使用 unsigned char。 我认为更好的选择是使用标准无符号字符并滚动您自己的位设置和测试操作、这与 TI 针对控制寄存器的操作非常相似。

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

    这是我的代码,看起来很有效。。。 您是否看到任何红色标记:

    在头文件中:

    struct userWakeFlags
    {
    volatile unsigned char timerFlag:1;
    volatile unsigned char adFlag:1;
    volatile unsigned char keySwitchFlag:1;
    volatile unsigned char timeMeasureFlag:1;
    };
    

    在 main 中初始化:

    struct userWakeFlags ={0};
    

    在 main 中使用:

    if (flags.timerFlag)//比较
    {
    flags.timerFlag = F;
    

    F 和 T 的设置可能是红色标志?? 但它似乎是在自动断电

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

    我不知道 F 和 T 是什么、但这应该起作用。 问题是、它是否比您自己的滚动更有效。

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

    此外、一次不能设置多个。 这是通过[Ref Freescale]定义机器寄存器时的基本弱点。 在他们的最佳状态下,他们只不过是合成糖-- CPU 仍然必须执行 RMW 周期。