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/MSP430FR5959:看门狗实现

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/798041/ccs-msp430fr5959-watchdog-implementation

器件型号:MSP430FR5959

工具/软件:Code Composer Studio

尊敬的先生:

我们使用的是 msp430fr5959控制器、我想在我们的现有代码上实现看门狗功能、这样、如果我的代码卡在某个位置、看门狗就会发生、它将从开始执行、但所选变量不应复位。 它应保留该值。 这样最终用户就不知道看门狗实施。

那么、我如何在代码上实现它呢?

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

    要初始化 WDT、可在以下位置找到一些代码示例: dev.ti.com/.../node

    我认为通过复位来保留变量的最佳方法是使用 #pragma NOINIT。 这会将变量放置在将位于 FRAM 中的.TI.noinit 组中。 此变量在复位时将假定没有初始化值(但通常在器件重新刷写时清除。) 这将允许您保留该变量值。

    在本主题中、我们还将进一步讨论此主题: e2e.ti.com/.../507393

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

    你好 JD,

     

    假设我在没有初始化段(#pragma NOINIT)上保留变量、那么每次加电时变量的值是多少?

    示例–

    情况1 (上电复位)

                  假设我有一个默认值为10的变量,其值在进程中不断变化。 如果我将此变量放在 no init 段中,那么在上电时我将得到什么? 它的默认值10还是最后一个过程值?

    情况2 (看门狗复位)

                  如果看门狗发生并重新启动,我将得到什么? 其默认值或最后的进程值。

    我只想在看门狗发生时保留变量的值(例如情况2)、而不是每次打开电源时保留变量的值。(情况1)。

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

    No-Init 变量未初始化。 IE:声明中没有默认值。

    您可以在固件中创建一个函数、该函数查看复位源并决定将这些变量初始化为已知值或将其保留为未知/其先前值。

    这在从 x.5睡眠模式唤醒时很常见、因为这些模式通过复位唤醒。 如果您在上面的链接中查看 LPM4.5示例、您将看到一个有关如何在复位源上分支的示例。

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

    你好,先生  

    正如您在中提到的将 preserve 变量保存到 FRAM 中的 no init 段,那么我们可以将变量存储到 no init 段中的最大大小(字节)是多少?  数据表建议的 FRAM 大小(64kb)= 程序+数据+存储 、这有点令人困惑。  

    我已经使用了多达80字节,它的工作正常,但最大大小是多少?  

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

    没有特定的最大尺寸。 该器件具有64KB 的 FRAM、这是一个统一的存储器。 这个整个64KB 被拆分、并在您的实际程序大小、变量和数据存储量之间共享。 因此、它实际上取决于程序的大小等 程序越大、存储数据所需的剩余 FRAM 就越少。

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

    即使我对代码的第1行进行注释、也不会在代码上生成看门狗复位

    WDTCTL = WDTPW + WDTHOLD;

    通过注释此行、在所选时间间隔到期后、应触发 PUC、但在我的代码中未发生。
    那么、我的代码中有什么问题呢?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Anushka、

    您如何检查它是否未发生? 您是否已连接并进行调试? 调试时、可能已禁用此功能。

    如果您自由运行或仅进行编程、然后在没有调试器的情况下重置电路板、则应将其重置。 您可能应该切换和 LED/GPIO 以从外部通知您。

    如果您仍然没有看到 WDT 复位、请告诉我。

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

    感谢您的指导。 我已使用调试器对其进行了检查。 在编程和复位之后、它可以正常工作。