2015年11月9日 星期一

How to get code version from binary file on IAR EWARM?

1. 當在與客戶開發專案的時候, 雙方的hex或是bin檔案可能都會來來回回寄個幾十個版本,
    而大部分皆是直接在檔名上修改個版號(ex: 001.bin....), 或是在程式中修改版號, 當程式跑
    起來後, 透過類似I2C/UART/SPI....等的溝通得到目前的版號.

2. 而往往出錯的皆是類似像上述的方式, 可能忘了改檔名或是為了快點修改Bug,而忘了修改
    程式中的版號, 導致許多問題產生, 因此如果有可以直接從build出來的binary來得到版號的
    話,應該可以減少一些無謂的時間浪費.

3. 現在要介紹的是利用vector_table中的reserved area來放版本號的方式:


  • 開啟IAR Project後, 先在程式中新增一個CodeVersion.h檔案.

  • 先輸入一個預設的版號, ex: 0x12345678
  • 開啟startup_stm32f401xx.s檔案, 並include CodeVersion.h, 且在reserved area中放入我們預設的版號.
  • 若是直接build code的話, 一定會有error, 因為我們在組語的部份加入CodeVersion.h的路徑給程式知道.
  • 輸出檔案的部份, 可以先使用binary來輸出.

  • 當程式編譯過後, 可以在輸出的目錄下找到Template.bin
4. 我們可以使用可以開啟binary檔案的編譯器來觀察, 例如使用Ultraedit來開啟Template.bin, 開
    啟後可以看到我們之前設定的版號0x12345678, 且位置均固定, 因此再也不需要等待程式跑
    起來後才能去得知版本號了.


5. Test Platform: STM32F401 Discovery Board.

6. 完整測試檔案連結如下:













沒有留言:

張貼留言