【发布时间】:2021-08-14 08:43:39
【问题描述】:
我正在使用 esp32(带有 esp-idf 的 c,而不是 arduino)用于我的一个爱好项目。我目前正在编写一个可以用智能手机控制的小型无人机。一切正常。
但现在我需要为持久设置和参数创建系统。例如 pid 调整参数或启用了哪些传感器等等。一般的想法是在启动时读取闪存中的设置文件。然后可以在程序的各个模块中使用这些设置。现在我还想在运行时更改这些设置。例如 pid 调整参数。我不想仅仅为了改变一个小参数而重启系统。
所以现在我的问题是:如何在运行时处理对这些设置的更改?
-
一个想法是让模块定期询问一个特殊的 “设置模块”(如果有任何更改)。然后它会改变它的 相应的内部设置。因为设置不应该改变它 通常我认为不断要求更新的开销是相当大的 没必要。
-
一个更极端的想法是,给一个指向变量的指针 对“设置模块”的问题。如果必须进行任何更改 设置模块会直接改变变量。
-
或者也许是一个回调系统?
这些想法似乎可行,但我不知道是否有任何最佳实践或更好的选择。
你们中有人知道我可以在谷歌上搜索的技术的名称,或者可能提供类似功能的库吗?
谢谢!
【问题讨论】:
-
您有一个程序还是多个程序?如果是单个程序,则将设置加载到结构中,并让程序的所有部分访问该结构。创建一个函数以将该结构保存到闪存中。使用结构的一个成员作为一个简单的计数器,每次更改都会递增。程序的一部分可以检查该计数器并与他们自己的副本进行比较。如果不同,则发生更改并可以采取适当的措施。
-
@fpiette 代码是模块化的,并作为由 FreeRTOS 管理的多个任务运行。如果我理解正确,您说将所有设置都放在全局可访问的结构中?有没有一种简单的方法来模块化这个?
-
任务是在不同的线程中运行,还是单线程协同多任务?这对于以安全的方式管理对数据的访问非常重要。
-
不是您的问题,但请记住闪存的写入周期数有限。不要频繁写入,否则会毁掉闪存!阅读this artcile。
标签: c embedded settings esp32 freertos