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**** 2538960 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/909968/msp430fr2355-jump-to-specific-code-after-reset

器件型号:MSP430FR2355

点击重置按钮后、我想运行一个小例程、然后跳转到代码中的特定行。  是否有人可以分享如何做到这一点?

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

    也许您应该解释您的目标是什么。 如果说 C 已经提供了这个代码,那只需要稍微的 glib——特定的代码行是 main()的第一行。

    如果要在调用 main 之前执行某些操作、可以使用其中一个"引导挂钩"、例如_system_pre_init [参考 CC 用户指南(SLAU132S)第6.9.1]节。

    C 不允许您从某个函数中的某一行跳转到另一个函数中的某个(其他)行。 您可以编写汇编代码来执行此操作、但处理栈和寄存器分配是您的问题。

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

    我有一个对讲机上有一个组 ID。  此 ID 也存在于 MSP 中。  我在 MSP 中有一个特定位置、在该位置、如果用户希望执行"重新启动"排序并重新开始、则还存在默认组 ID。  我想按重置、但在 MSP 上、跳转至 NMI (或类似矢量)、此时我清除现有组 ID 并将默认组 ID 重新加载到对讲机上... 我已经有一个例程来写入对讲机。  我希望在 ISR 内我可以清空 FRAM 空间,然后我可以跳转到 main,并且从这里有一个标志可以调用无线电例程来重新配置该特定的无线电寄存器.....

    1. 我想使用哪种 ISR?

    2. 我是否可以让 ISR 在内部执行一些小任务、然后跳转到 main、或者我基本上需要将所有这些都放在 main 的条件中?

    谢谢

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

    虽然 C 确实提供了一种可以跳转到任何位置的机制,但它要求您首先执行 setjum(),以便它可以存储执行该跳转所需的信息。

    但您真正需要的是一种在复位时执行特殊操作的方法。 我处理这个问题的方法是在复位后检查一个特殊条件。 例如、我有4个按钮供用户按下、但通常一次按下一个。 在上电时、我检查是否按下了两个特定的按钮。 如果是、我调用配置代码。 一旦完成、操作将照常恢复。

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

    这听起来像是恢复出厂设置、或者可能是一次性注册的机制。 对于这些、您不希望它定期或意外发生。 系统重置(假定)始终发生-电池电量耗尽、有人在附近产生火花、猫在重置按钮上行走。

    还有其他按钮吗? 我看到的一件事是、您按下该按钮、然后按下"Reset"按钮;main 将查看该按钮是否被按下(可能持续一段时间)并相应地执行操作。 如果您有一个 UART 命令解释器、则可能有一个命令擦除相关 FRAM、然后生成一个软件生成的复位(通过您最近的问题之一)。 目标是使它变得足够麻烦、以免意外发生。

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

    嗯… 我没有任何额外的按钮,所有按钮都有多种含义(即它们都有“一元”功能,它们都有“> 2秒”功能......)

    我想从一开始就不是完全理解生成 NMI....user 指南的机制,但从阅读它开始,我不知道在这里可以利用 SYSNMI 还是 UNMI。。。 在我看来、在 NMIIE 被启用后、按下复位按钮(BOR)应该跳转到其中一个 ISR、但它不……

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

    我没有尝试过这种方法(我不够聪明、不能放弃 RST 按钮)、但我将从 UG 章节1.7和表1-11中的建议开始。  

    您是否已断开调试器连接?

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

    我是根据你之前的建议来的,似乎工作得很好,就是我的统计功能中已经有一个陷阱,因为如果两个按钮被按住超过2秒钟,同时还有那些按钮是罪魁祸首,我决定现在就把它作为一个重置的标志 然后我只需执行以下操作:

    WDCTL |= 0xDEAD;  

    然后重新配置无线电寄存器  

    一切似乎都正常  

    感谢您的帮助!