Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 闪烁;“阿杜伊诺斯”;生产中_Arduino_Esp8266_Nodemcu - Fatal编程技术网

Arduino 闪烁;“阿杜伊诺斯”;生产中

Arduino 闪烁;“阿杜伊诺斯”;生产中,arduino,esp8266,nodemcu,Arduino,Esp8266,Nodemcu,所以我的问题是围绕着用ardunio代码编程一堆esp8266 ESP-12 主要问题是,每个esp8266都需要一个令牌,允许它通过我们的服务器进行身份验证,但是每次通过和更改令牌=\uuuuuuuuuuuuuuuuuu都需要完全重新编译,并且从开始到完成几乎需要一分钟的时间(这在闪烁1000块板时非常多) 简而言之是否有一种更简单的方法来包含运行时变量,而不需要重新编译整个过程 我不熟悉ESP8266,但大多数MCU都可以执行以下一项或多项操作,具体取决于程序员是否允许单独编程闪存的各个部分

所以我的问题是围绕着用ardunio代码编程一堆esp8266 ESP-12

主要问题是,每个esp8266都需要一个令牌,允许它通过我们的服务器进行身份验证,但是每次通过和更改
令牌=\uuuuuuuuuuuuuuuuuu
都需要完全重新编译,并且从开始到完成几乎需要一分钟的时间(这在闪烁1000块板时非常多)


简而言之是否有一种更简单的方法来包含运行时变量,而不需要重新编译整个过程

我不熟悉ESP8266,但大多数MCU都可以执行以下一项或多项操作,具体取决于程序员是否允许单独编程闪存的各个部分,或者它是否具有外部可编程EEPROM:

  • 将令牌放入EEPROM并编程,作为刷新程序存储器的附加步骤
  • 将其放在主程序外部的程序闪存中的固定内存位置,并使用该位置的偏移量作为第二步进行编程
  • 打开已编译的十六进制,在程序闪存中查找令牌的偏移量,并仅作为第二步对这些字节进行编程,在程序闪存后覆盖默认值
  • 打开已编译的十六进制,找到令牌的偏移量,然后在闪存每个模块之前,运行脚本创建一个新的十六进制,替换令牌,然后一次性编程闪存
  • 为十六进制中不会出现的令牌使用良好的默认值,然后在闪存每个模块之前,使用搜索和替换脚本创建一个新的十六进制,替换令牌,然后一次性编程闪存

您可以将ID放入EEPROM,但如果您真正想要闪存一个文件(闪存内容),您可以使用
static const uint32\u t UniqueID\uuuu属性(section(“.progmem”))=0x12345678但您将不知道闪存中的地址,并且在重新编译时地址可能会更改。

您还可以在闪存中定义一个已知地址的部分(可能在内存的末尾)。我知道这可以在GCC中使用,但从未在Arduino IDE中测试过

static const uint32\u t UniqueID\u\u属性(section(“.mySection”))=0x12345678

最后一个解决方案是简单地在代码中定义一个地址,使用
pgm\u read.*

然后可以使用
srec_cat
轻松修改.hex文件以更改ID,然后刷新。
这可以在生产中用于为每个芯片提供唯一的ID。

如何使用ESP芯片ID?但它必须有一些注册。确切地说,每个令牌都必须散列并存储在服务器上。否则的话,你的服务器需要知道每个令牌,对吗?因此,令牌的语义值是什么并不重要,只要它对一个设备来说是唯一的,在运行时不会改变,并且在服务器上注册?在连接服务器之前,它必须注册,这将增加从板上获取芯片Id的层?当然,SDK有
system\u get\u chip\u Id()
(例如,哪个NodeMCU公开为
node.chipid()
)。如果您可以在设备上获得带有或不带有额外“层”(Arduino、NodeMCU等)的SDK,则可以访问该id。我相信您可以将其添加到构建和部署链中。