2016-08-25 47 views
1

所以我遇到的問題圍繞着編程一堆esp8266 ESP-12 ardunio代碼。閃爍「Arduinos」在生產

主要問題是,每個esp8266都需要一個令牌,它允許它與我們的服務器進行身份驗證,但每次都要經過並更改token = ___需要完整的重新編譯,並且從開始到結束需要幾分鐘的時間(這是一個很多時候閃爍1000年的電路板)。

總之有沒有更簡單的方法來包含運行時間變量,不涉及重新編譯整個事情?

+1

怎麼樣使用ESP芯片ID呢?但是必須有一些註冊。 – KIIV

+0

每個令牌都必須被散列並存儲在服務器上。否則,這將工作完美 –

+0

無論如何,您的服務器需要知道每個令牌,對嗎?所以,只要一個設備是唯一的,它的語義值是什麼並不重要,在運行時不會改變,並在服務器上註冊? –

回答

1

我不熟悉ESP8266,但大多數微控制器,你可以做一個或多個以下的,這取決於程序員是否允許閃存編程部分單獨或者它是否有一個外部可編程EEPROM:

  • 把令牌在EEPROM和程序作爲一個額外的步驟,以閃爍程序存儲器
  • 把它在程序閃存這是主要的程序以外的固定存儲器位置,以及程序它作爲一個第二步驟中,使用該位置的偏移量
  • 打開編譯十六進制,找到令牌的程序閃存的偏移d程序這些字節僅作爲第二步覆蓋默認程序已被閃
  • 打開編譯十六進制,找到令牌的偏移之後,每個模塊閃爍在那之前運行一個腳本來創建一個新的十六進制替換爲令牌,然後一次編程閃光燈。
  • 使用一個很好的默認值,不會否則發生在十六進制的令牌,則每個模塊閃現之前使用的搜索和替換腳本來創建與更換令牌一個新的十六進制,那麼程序一氣呵成閃光燈。
1

你可以把ID爲EEPROM,但如果你精心想閃一個文件(Flash內容),可以使用 static const uint32_t UniqueID __attribute__((section(".progmem"))) = 0x12345678;但你不會知道在閃光燈的地址,當你重新編譯它可能會改變。 PROGMEM reference

您也可以在Flash中定義一個已知地址的段(可能在內存的末尾)我知道這適用於GCC,但從未在Arduino IDE中進行過測試。

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

最後的解決方案是簡單地在代碼中定義的地址其中具有pgm_read_*

讀取.hex文件然後可以很容易地與srec_cat修改以改變它的ID,然後被閃蒸。 這可用於生產爲每個芯片提供唯一的ID。