配置ESP8266 NONOS SDK時因爲工具鏈版本差別引起的故障

  前幾天部署ESP8266_NONOS_SDK時遇到了一個看似奇怪的問題,描述以下:git

  examples例程能夠經過編譯,但燒寫到ESP8266模塊後,程序沒法正常運行,編譯和燒寫的相關配置均無誤。在boot模式下編譯,串口輸出jump to run user1後,觸發Fatal Exception (29)。進一步測試其它例程,運行結果徹底相同。串口輸出日誌以下:github

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)
load 0x40100000, len 2408, room 16 
tail 8
chksum 0xe5
load 0x3ffe8000, len 776, room 0 
tail 8
chksum 0x84
load 0x3ffe8310, len 632, room 0 
tail 8
chksum 0xd8
csum 0xd8
2nd boot version : 1.6
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 4Mbit(1024KB+1024KB)
no GPIO select!
jump to run user1 @ 1000


Fatal Exception (29)

epc1=0x4000df64, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

Fatal Exception (29)

epc1=0x4000df64, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

Fatal Exception (29)

epc1=0x4000df64, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

 

  在這裏開一文記錄解決該問題的思路,以供遇到類似問題的朋友參考,避免入坑。工具

 

  鑑於例程自己的可靠性能夠保證,只剩下SDK或者工具鏈的問題。考慮到espressif並無徹底開源其技術細節,在SDK中仍留有閉源的archive靜態連接庫文件(參見lib目錄),而這些靜態庫可能連接同時依賴於工具鏈中的庫(例如libc、libhal等),而若當前使用的工具鏈版本SDK官方使用的工具鏈版本不一樣時,可能會出現兼容性問題。測試

  經過仔細閱讀NONOS_SDK的文檔,發現官方原始使用的工具鏈gcc版本信息以下(SDK v3.0):spa

xtensa-lx106-elf-gcc (crosstool-NG 1.20.0) 4.8.2日誌

  而當前我所使用的交叉編譯工具鏈中gcc版本信息爲:code

xtensa-lx106-elf-gcc.exe (crosstool-NG crosstool-ng-1.22.0-92-g8facf4c0) 5.2.0blog

  因而嘗試將當前交叉編譯工具鏈回退版本到4.8.2,從新編譯後,故障消除。文檔

 

備註: NONOS_SDK v3.0能夠在espressif release頁面上找到:https://github.com/espressif/ESP8266_NONOS_SDK/releases。部署

相關文章
相關標籤/搜索