IAR IDE學(xué)習(xí)之---啟動(dòng)文件(cstartup)與輸入\輸出重定向方法
1、DLIB,我猜應(yīng)該是Dynamic Library。DLIB runtime environment就是運(yùn)行時(shí)環(huán)境。
2、什么是運(yùn)行時(shí)環(huán)境。IAR給出的官方回答是:
The runtime environment is the environment in which your applic ation executes. The?
runtime environment depends on the target ha rdware, the software environment, and the?
application code.
?
簡(jiǎn)單說(shuō),運(yùn)行時(shí)環(huán)境為用戶(hù)的應(yīng)用程序(main函數(shù))提供以下基礎(chǔ)功能:
1)首先是實(shí)現(xiàn)C/C++標(biāo)準(zhǔn)庫(kù),比如常見(jiàn)的格式化輸入/輸出;
2)應(yīng)用程序運(yùn)行前的初始化,應(yīng)用程序退出后的退出處理,比如全局靜態(tài)變量的初始化、C++全局對(duì)象的創(chuàng)建、銷(xiāo)毀等。
3、IAR同時(shí)提供庫(kù)形式和源代碼形式的C/C++標(biāo)準(zhǔn)庫(kù)函數(shù)的實(shí)現(xiàn),分別位于安裝目錄armlib以及armsrclib下。
4、C/C++標(biāo)準(zhǔn)庫(kù)函數(shù)的實(shí)現(xiàn)依賴(lài)于具體的目標(biāo)系統(tǒng),比如標(biāo)準(zhǔn)輸入/輸出需要具體硬件的輸入設(shè)備操作函數(shù)和輸出設(shè)備操作函數(shù)。C/C++標(biāo)準(zhǔn)庫(kù)函數(shù)使用基礎(chǔ)(低級(jí))函數(shù)集來(lái)和目標(biāo)系統(tǒng)交換,將這些基礎(chǔ)(低級(jí))函數(shù)集合成為“庫(kù)基礎(chǔ)接口”。為實(shí)現(xiàn)真正的C/C++標(biāo)準(zhǔn)庫(kù),應(yīng)用程序的開(kāi)發(fā)者必須重新實(shí)現(xiàn)(定義)這些基礎(chǔ)(低級(jí))函數(shù)。可重寫(xiě)的基礎(chǔ)(低級(jí))函數(shù)位于IAR安裝目錄armsrclib下。
5、應(yīng)用程序開(kāi)發(fā)者重新實(shí)現(xiàn)基礎(chǔ)(低級(jí))函數(shù)的方法步驟:
1)將需要修改的、IAR提供的基礎(chǔ)函數(shù)模板復(fù)制到一個(gè)新建的源文件;
2)按實(shí)際要求修改相應(yīng)函數(shù),一般不需要改動(dòng)接口定義;
3)將新建的源文件加入工程中。
按照以上方法步驟及可實(shí)現(xiàn)基礎(chǔ)(低級(jí))函數(shù)的重新實(shí)現(xiàn)。因?yàn)橛脩?hù)重寫(xiě)了部分基礎(chǔ)(低級(jí)函數(shù)),在工程編譯鏈接時(shí)優(yōu)先鏈接到用戶(hù)定義實(shí)現(xiàn)的基礎(chǔ)(低級(jí))函數(shù)。
6、對(duì)于系統(tǒng)程序開(kāi)發(fā)者而言,常常需要按照實(shí)際要求改變啟動(dòng)引導(dǎo)文件,如cstartup。在IAR中,可以將armsrclib目錄下的cstartup.s文件復(fù)制到用戶(hù)工程中,并加入工程,系統(tǒng)開(kāi)發(fā)者可以根據(jù)需要修改此文件實(shí)現(xiàn)啟動(dòng)引導(dǎo)程序重寫(xiě)。
總結(jié):作為系統(tǒng)開(kāi)發(fā)者,最關(guān)心的是啟動(dòng)代碼在哪里?如何修改并鏈接到實(shí)際的執(zhí)行鏡像中。在IAR IDE中,啟動(dòng)代碼以DLIB庫(kù)函數(shù)形式提供,系統(tǒng)開(kāi)發(fā)者可以通過(guò)在工程中加入cstartup.s 文件并重新改寫(xiě)啟動(dòng)代碼即可定制自己需要的啟動(dòng)方式。此外,系統(tǒng)開(kāi)發(fā)者還可以重新定義格式化輸入輸出的基礎(chǔ)(低級(jí))函數(shù),來(lái)實(shí)現(xiàn)輸入輸出重定向到LCD或者UART中。