徐勁松,湯新柱,管燕萍
(中興通訊上海研發(fā)中心,上海201203)
隨著通信技術(shù)的迅速發(fā)展,各種新業(yè)務(wù)層出不窮,電信運(yùn)營(yíng)商對(duì)通信設(shè)備的功能需求日益增多。因此,通信設(shè)備經(jīng)常需要升級(jí)軟件版本。而隨著功能的日趨完善,軟件版本所需的存儲(chǔ)空間越來(lái)越大。另一方面,激烈的競(jìng)爭(zhēng)促使各通信設(shè)備制造商盡可能采用物美價(jià)廉的器件以降低設(shè)備成本。一些高性?xún)r(jià)比的處理器獲得了廣泛的應(yīng)用,這類(lèi)處理器可能內(nèi)置了少量的FLASH存儲(chǔ)空間。為了降低成本,通信設(shè)備制造商在制造設(shè)備時(shí),可能不再另外添置外置的FLASH,而僅僅是配置一定容量的外置RAM,從外置RAM中劃出一部分空間用于存放設(shè)備的應(yīng)用程序,其余的用作設(shè)備運(yùn)行中的數(shù)據(jù)空間。
以AT89C52[1]處理器為例,它內(nèi)置有8KB大小的FLASH,另外具備64KB外置FLASH以及64KB外置RAM的尋址能力。通信設(shè)備制造商在制造設(shè)備時(shí),僅僅是配置64KB的外置RAM,用于存儲(chǔ)程序和數(shù)據(jù),例如前32KB用于存放數(shù)據(jù),后32KB用于存放應(yīng)用程序。一種常用的實(shí)現(xiàn)方式是,內(nèi)置FLASH用于存儲(chǔ)很小的內(nèi)核程序,在系統(tǒng)上電時(shí),從服務(wù)器下載容量更大的應(yīng)用程序,存放在外置RAM中;下載結(jié)束后,跳轉(zhuǎn)外置RAM的程序區(qū)執(zhí)行。然而,隨著系統(tǒng)功能的增加,原來(lái)用于存放應(yīng)用程序的32KB空間已經(jīng)不夠存放應(yīng)用程序,而數(shù)據(jù)區(qū)的使用可能不到32KB,例如只使用了20KB。一種解決辦法是重新制作存儲(chǔ)在內(nèi)置FLASH中的內(nèi)核程序,擴(kuò)大應(yīng)用程序區(qū)的存放范圍,使得內(nèi)核程序在下載應(yīng)用程序時(shí)將后44KB的空間都作為應(yīng)用程序存儲(chǔ)區(qū)。然而,對(duì)于現(xiàn)網(wǎng)應(yīng)用的大量設(shè)備而言,要更新內(nèi)核程序的版本,意味著必須把單板斷電、重新燒入內(nèi)置的FLASH內(nèi)核程序,顯然是不現(xiàn)實(shí)的。
本文提供一種優(yōu)化地址空間的版本下載方法,應(yīng)用于通信領(lǐng)域嵌入式系統(tǒng),以解決應(yīng)用程序的存儲(chǔ)空間不夠,而數(shù)據(jù)的存儲(chǔ)空間富余的問(wèn)題。所述的版本下載方法,包括如下步驟:
①將應(yīng)用程序版本制作成主版本和輔助版本,并保存在服務(wù)器上,使得主版本的大小不超過(guò)設(shè)備分配給應(yīng)用程序的存儲(chǔ)空間大??;
②設(shè)備上電后,該設(shè)備內(nèi)核程序?qū)?yīng)用程序的主版本從服務(wù)器上下載到設(shè)備分配給應(yīng)用程序的存儲(chǔ)空間,下載程序完畢后,跳轉(zhuǎn)到應(yīng)用程序的主版本運(yùn)行;
③應(yīng)用程序的主版本執(zhí)行了設(shè)備的初始化以后,與服務(wù)器通信,請(qǐng)求下載應(yīng)用程序的輔助版本;
④應(yīng)用程序的主版本將輔助版本下載到設(shè)備分配給數(shù)據(jù)的存儲(chǔ)空間中的富余空間內(nèi),下載完成后繼續(xù)往下正常執(zhí)行。此時(shí),在輔助版本中的新增功能可以正常使用。
下面以AT89C52處理器的設(shè)備為例來(lái)說(shuō)明上述版本下載方法的實(shí)現(xiàn)。
圖1是采用AT89C52處理器的設(shè)備存儲(chǔ)空間的分布圖。這里只是一個(gè)示例,實(shí)際的空間分布大小不一定與此處的示例相同,但不影響本文所述版本下載方法的實(shí)現(xiàn)。AT89C52處理器內(nèi)置的8KB FLASH用于存放內(nèi)核程序;設(shè)備另外配置有64KB的外置RAM,其中,前32KB用于存放數(shù)據(jù),后32KB用于存放程序。在系統(tǒng)上電時(shí),內(nèi)核程序負(fù)責(zé)從服務(wù)器下載應(yīng)用程序,存放在外置RAM的后32 KB應(yīng)用程序存儲(chǔ)空間中,然后跳轉(zhuǎn)到應(yīng)用程序執(zhí)行。
圖1 采用AT89C52的設(shè)備存儲(chǔ)空間分布圖
圖2是采用本文所述版本下載方法后,采用AT89C52處理器的設(shè)備存儲(chǔ)空間的分布圖。假定設(shè)備原用于存放數(shù)據(jù)的32KB外置RAM實(shí)際只用到20KB,還有12KB的剩余空間。在系統(tǒng)上電時(shí),存儲(chǔ)在內(nèi)置FLASH中的內(nèi)核程序負(fù)責(zé)從服務(wù)器下載應(yīng)用程序的主版本,存放在外置RAM的后32KB存儲(chǔ)空間中。之后,應(yīng)用程序的主版本負(fù)責(zé)將輔助版本下載到外置RAM原來(lái)用于存放數(shù)據(jù)的空間中的剩余12KB空間。在制作主版本和輔助版本時(shí),對(duì)于主版本和輔助版本之間的功能模塊采用絕對(duì)定址的方式相互調(diào)用。
圖2 優(yōu)化地址空間后采用AT89C52的設(shè)備存儲(chǔ)空間布圖
圖3是本文實(shí)例采用AT89C52處理器的設(shè)備版本下載應(yīng)用方法流程圖,包括如下步驟。
①制作應(yīng)用程序版本時(shí),根據(jù)其功能的劃分制作主版本和輔助版本并保存在服務(wù)器上,使得主版本的大小不超過(guò)32KB,輔助版本的大小不超過(guò)12KB;在制作主版本和輔助版本時(shí),對(duì)于主版本和輔助版本之間的功能模塊采用絕對(duì)定址的方式相互調(diào)用。
②設(shè)備上電后,存儲(chǔ)在內(nèi)置FLASH中的內(nèi)核程序負(fù)責(zé)從服務(wù)器下載應(yīng)用程序的主版本,存放在外置RAM的后32 KB存儲(chǔ)空間中,然后跳轉(zhuǎn)到應(yīng)用程序的主版本運(yùn)行。
③對(duì)設(shè)備進(jìn)行初始化,與服務(wù)器通信,請(qǐng)求下載應(yīng)用程序的輔助版本。
④應(yīng)用程序的主版本負(fù)責(zé)將輔助版本下載到外置RAM原來(lái)用于存放數(shù)據(jù)的空間中的剩余12KB空間。
⑤下載應(yīng)用程序的輔助版本成功后,主版本才繼續(xù)往下正常執(zhí)行,此時(shí),應(yīng)用程序的主版本可以正常調(diào)用輔助版本的功能模塊。
圖3 采用AT89C52處理器的設(shè)備版本下載應(yīng)用方法流程圖
本文描述了一種優(yōu)化地址空間的版本下載方法,即二次版本下載的方法,充分利用現(xiàn)有設(shè)備分配給數(shù)據(jù)的存儲(chǔ)空間中的剩余空間,擴(kuò)大了應(yīng)用程序的存儲(chǔ)空間,避免了必須為現(xiàn)有設(shè)備更換內(nèi)核程序才能擴(kuò)大應(yīng)用程序存儲(chǔ)空間的弊端。此外,本文所述的方法并不局限于AT89C52處理器。
[1] 8-bit Microcontroller with 8KBytes Flash-AT89C52[EB/OL] .[2014-11] .http://www.atmel.com/images/doc0313.pdf.