天天看點

Keil不能正确生成.bin檔案的解決辦法

轉自:http://www.elecfans.com/d/828601.html

前段時間我寫過如何利用CW、IAR和Keil生成image檔案,效果還不錯,有些使用者回報挺有幫助的,畢竟待項目開發到最後是需要生成image檔案用來量産燒寫,我們總不至于到最後使用調試下載下傳吧(不過還别說,用量比較小的使用者還真有可能用調試的方法來下載下傳,當然這個隻能說是小批量燒寫,如果真是大批量燒寫,這效率估計得把老闆愁死,呵呵)。不過最近同僚遇到了用keil生成bin檔案時不能正确生成.bin檔案而是生成.bin檔案夾的問題,這個問題最開始感覺比較怪異,後來問題解決了還是豁然開朗了,Keil還是蠻有意思的,呵呵。

其實這個問題順藤摸瓜還是比較容易找到根結的(還是那句話,授之以魚不如授之以漁才是俺的風格,問題解決隻是結果,但是我更希望跟大家說明白解決問題的方法,結果是給老闆看的,但對自己來說方法和過程很重要,學會了方法會讓你在處理問題上遊刃有餘),既然問題出在生成檔案上,那我們就隻能找fromelf這個檔案轉換工具的麻煩了(啥?不知道啥叫fromelf,咳咳,先去面壁2小時然後百度一下吧,呵呵),打開keil IDE,然後打開help->uVison Help,搜尋fromelf關鍵字如下圖1:

Keil不能正确生成.bin檔案的解決辦法

然後再進入到右下角的索引找到fromelf指令行的文法和選項,找到—bin的說明如下,如紅色标注所說,正是症結所在,即如果連結檔案中定義了多個加載段的話,fromelf會以目标檔案名來建立一個檔案夾并将每個加載段都生成一個相應的檔案存放在該檔案夾下,問題的原因是找到了,但是另外兩個問題又來了(咳咳,問題咋這麼多捏),一是我的工程為啥會有多個加載段,另一個問題是如果出現這種加載段我們怎麼生成我們想要的bin檔案呢,不要捉急,咱們一個一個聊。

Keil不能正确生成.bin檔案的解決辦法

第一個問題,我們打開Keil->Options->Linker頁籤如下圖,可以看到本工程中沒有使用Options->Target下頁籤對記憶體映射的配置,而是使用自己的.scf連結檔案,打開該檔案一看就明白了,其定義了很多個記憶體段是以造成上述情況的發生,如果使用Target Dialog應該不會出現此類問題(但是此時工程會編譯錯誤,因為工程中某些原檔案用了自定義.scf中某些段名)。

Keil不能正确生成.bin檔案的解決辦法

第二個問題,既然問題找到了,我們該使用哪種方法來正确生成想要的.bin二進制檔案呢,通過檢視fromelf所支援的指令集,終于找到了解決辦法,即使用—bincombined指令可以實作将使用多加載段的工程生成真正的.bin檔案,具體用法如下:

Keil不能正确生成.bin檔案的解決辦法

繼續閱讀