首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在小型嵌入式设备中编程出厂复位开关

如何在小型嵌入式设备中编程出厂复位开关
EN

Stack Overflow用户
提问于 2016-03-04 18:40:02
回答 4查看 627关注 0票数 0

我正在构建一个小型嵌入式设备。我正在使用复位开关,当按下这个开关超过5秒时,整个设备应该复位并清除所有数据,并进入出厂复位状态。当此事件发生时,我知道要清除什么。我想知道的是如何引发此事件?我的意思是,当按下开关时,我如何设计系统才能知道5秒已经过去,我必须现在重置。我需要任何定时器和中断的高水平设计。谁能帮帮我?

EN

回答 4

Stack Overflow用户

发布于 2016-03-04 18:49:30

取决于设备。但有几个粗略的想法:

设备手册可能会说“按下开关”(switch down)所产生的每秒中断次数。如果你有这个值,你可以很容易地计算出5秒。

如果不是,你也需要使用计时器。当您收到第一次"switch down“中断时,启动计时器,并计时至5秒。

请注意,您还应该监控"switch up",即“switch of switch”。我希望这也会有一个中断。(可能具有不同的状态值)。所以当你看到这个中断时,你应该中断上面的循环(你不应该做重置)。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-03-04 22:03:25

中断驱动意味着低电平,接近硬件。一个中断驱动的解决方案,例如一个裸机微控制器,看起来像这样:

  • 与读取任何其他开关一样,对开关采样n次,并过滤掉信号反弹(和潜在电磁干扰)。
  • 启动硬件计时器。通常,片上定时器太快,不能计算完整的5秒,即使您将其设置为尽可能慢地运行。因此,您需要使用预缩放值来设置计时器,以便一个完整的计时器周期等于一个已知的时间单位(例如10毫秒)。
  • 定时器溢出时,触发中断。在中断内,检查开关是否仍处于按下状态,然后增加计数器。当计数器达到给定值时,执行复位代码。例如,如果您每隔10毫秒获得一个计时器溢出,您的计数器应该计数到5000ms/10ms = 500。
  • 如果在经过该时间之前释放开关,请重置计数器并停止定时器中断。
  • 如何重置系统高度依赖于系统。您应该将系统置于安全的系统中,然后通过使用NVM中其他位置存储的一些默认出厂设置覆盖NVM来覆盖您当前的设置。完成此操作后,您应该强制处理器自行重置并使用新的设置重新启动。
  • 这意味着您必须拥有一个具有电子可擦除NVM的系统。根据数据的大小,此NVM可以是微控制器中的片内数据闪存,也可以是某个外部存储电路。
票数 0
EN

Stack Overflow用户

发布于 2016-03-06 05:19:09

检测5S或30S超时可以使用中断上的GPIO来完成。

如果使用rtos,。中断将把线程从睡眠中唤醒并禁用其自身,

。所有线程所做的就是计算按下开关的时间(您以固定的时间间隔扫描开关)

如果按下开关所需的时间,则在中设置全局变量/设置,这将触发出厂复位功能

否则将再次启用中断并使线程进入休眠状态

。此外,使用去反跳电路以避免出现问题。

还要定义什么是出厂重置?

通常有两种情况,这两种情况我将帮助使用eeprom

  1. 恢复所有配置(低成本、更简单)

在这种情况下,您对eeprom进行分区,具有工作配置和出厂配置。您将出厂配置复制到工作分区并执行软件重置

  1. 恢复完整固件(成本高昂,需要更多测试)这比较棘手,但可以通过允许从eeprom/或SD卡进行闪存的引导加载程序来完成。

在这种情况下,二进制固件blob还将与出厂配置一起存储在安全分区中,并将用于闪存控制器闪存和配置。

这一切都取决于大小/内存和成本。可以用更多的方式来设计,我只是列出了最简单的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35793905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档