闪烁" Arduinos"在生产中

时间:2016-08-25 05:49:00

标签: arduino esp8266 nodemcu

所以我的问题是围绕使用ardunio代码编写一组esp8266 ESP-12。

主要问题是每个esp8266都需要有一个令牌,允许它通过我们的服务器进行身份验证,但是每次都需要完全重新编译并且从开始到结束需要几分钟后才能通过并更改token = ___(闪存1000多块电路板时很多。

简而言之是否有更简单的方法来包含不会重新编译整个事情的运行时变量?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可以将ID放入EEPROM中,但如果您想要闪存一个文件(Flash内容),则可以使用 static const uint32_t UniqueID __attribute__((section(".progmem"))) = 0x12345678;但你不会知道flash中的地址,并且在重新编译时它可能会改变。 PROGMEM reference

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

static const uint32_t UniqueID __attribute__((section(".mySection"))) = 0x12345678;

最后一个解决方案是在代码中定义一个地址,用pgm_read_*

来读取

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