本發(fā)明涉及存儲(chǔ)器技術(shù)領(lǐng)域,尤其涉及一種訪問存儲(chǔ)器的方法及內(nèi)存管理器。
背景技術(shù):
隨著通訊網(wǎng)絡(luò)的不斷發(fā)展,人們對(duì)基帶芯片的性能要求也在不斷地提升,一般基帶芯片上具有兩個(gè)存儲(chǔ)器,分別為第一與第二存儲(chǔ)器。比如所述第一存儲(chǔ)器可以為內(nèi)部?jī)?nèi)存(internal-ram,iram),第二存儲(chǔ)器為雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(doubledatarate,ddr)。為了滿足基帶芯片的性能,除了提升中央處理器(centralprocessingunit,cpu)的性能外,ddr性能的提升也必不可少。隨著ddr性能的提升,隨之帶來的功耗開銷也愈大。為了解決ddr帶來的功耗,使得代碼盡可能地存放及運(yùn)行在iram上,從而達(dá)到不開啟ddr,也就是使得ddr處于低功耗模式(lightsleep,ddrcontrollerstop,ddrself-refresh)下。這樣一來,就會(huì)出現(xiàn)在cpu處于工作情況下,ddr已經(jīng)進(jìn)入低功耗模式。
為了能夠在ddr處于低功耗模式下,捕捉到訪問ddr的操作,并讓ddr提前退出低功耗模式,目前,通過尋找可能會(huì)執(zhí)行訪問ddr操作的區(qū)域,并在所述區(qū)域中插入可以使得ddr退出低功耗模式的函數(shù)。
但是,在這種情況下,會(huì)增加大量的代碼,并且由于大量的函數(shù)被插入,會(huì)破壞原來的代碼結(jié)構(gòu),同時(shí)還會(huì)造成該函數(shù)多次調(diào)用,造成數(shù)據(jù)訪問的效率低下,且還造成代碼穩(wěn)定性及可移植性差,還會(huì)導(dǎo)致系統(tǒng)功耗大。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明解決的問題是如何盡可能高效地使用內(nèi)部?jī)?nèi)存,降低系統(tǒng)功耗,并提高訪問存儲(chǔ)器的效率。
為解決上述問題,本發(fā)明實(shí)施例提供一種訪問存儲(chǔ)器的方法,所述存儲(chǔ)器包括第一存儲(chǔ)器及第二存儲(chǔ)器,所述方法包括:當(dāng)所述第二存儲(chǔ)器處于低 功耗模式且檢測(cè)到cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),觸發(fā)所述cpu進(jìn)入異常處理流程,包括:判斷引起所述異常處理的原因是否為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求;當(dāng)確定引起所述異常處理的原因?yàn)閷?duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從第一頁(yè)表切換至第二頁(yè)表;述第一頁(yè)表為所述cpu設(shè)置所述第二存儲(chǔ)器進(jìn)入低功耗模式時(shí)所對(duì)應(yīng)的頁(yè)表,設(shè)置于所述第一存儲(chǔ)器上,且配置為適于訪問第一存儲(chǔ)器且不能訪問所述第二存儲(chǔ)器;所述第二頁(yè)表配置為適于訪問所述存儲(chǔ)器。
可選地,所述方法還包括:記錄所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息;根據(jù)所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息,調(diào)整所述第一存儲(chǔ)器及所述第二存儲(chǔ)器內(nèi)的數(shù)據(jù)。
可選地,所述根據(jù)所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息調(diào)整所述第一存儲(chǔ)器及所述第二存儲(chǔ)器內(nèi)的數(shù)據(jù),包括:當(dāng)所述cpu對(duì)所述第二存儲(chǔ)器中的程序訪問的次數(shù)超過預(yù)設(shè)的次數(shù),并且所述程序小于預(yù)設(shè)的存儲(chǔ)閾值時(shí),將所述程序從所述第二存儲(chǔ)器遷移至所述第一存儲(chǔ)器。
可選地,采用如下任意一種方式配置所述第一頁(yè)表:在所述第一頁(yè)表內(nèi)配置所述第二存儲(chǔ)器的頁(yè)表項(xiàng)為空;或者將所述第二存儲(chǔ)器的頁(yè)表項(xiàng)配置為不可讀寫。
可選地,所述方法還包括:當(dāng)確定引起所述異常處理的原因并非為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),觸發(fā)所述cpu進(jìn)入斷言處理流程。
可選地,所述退出函數(shù),適于通過將控制信號(hào)設(shè)置為假,觸發(fā)所述第二存儲(chǔ)器退出低功耗模式。
可選地,所述第一存儲(chǔ)器為內(nèi)部?jī)?nèi)存,所述第二存儲(chǔ)器為雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器。
本發(fā)明實(shí)施例提供了一種內(nèi)存管理器,所述內(nèi)存管理器適于管理存儲(chǔ)器,所述存儲(chǔ)器包括第一存儲(chǔ)器及第二存儲(chǔ)器,所述內(nèi)存管理器包括:第一檢測(cè)單元,適于檢測(cè)所述第二存儲(chǔ)器是否處于低功耗模式;第二檢測(cè)單元,適于檢測(cè)cpu是否執(zhí)行訪問所述第二存儲(chǔ)器的操作;觸發(fā)單元,適于當(dāng)所述第一 檢測(cè)單元檢測(cè)到所述第二存儲(chǔ)器處于低功耗模式,且所述第二檢測(cè)單元檢測(cè)到所述cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),觸發(fā)所述cpu進(jìn)入異常處理流程;判斷單元,適于判斷觸發(fā)所述異常處理的原因是否為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求;函數(shù)調(diào)用單元,適于當(dāng)所述判斷單元確定引起所述異常處理的原因?yàn)閷?duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從第一頁(yè)表切換至第二頁(yè)表;所述第一頁(yè)表為所述cpu設(shè)置所述第二存儲(chǔ)器進(jìn)入低功耗模式時(shí)所對(duì)應(yīng)的頁(yè)表,設(shè)置于所述第一存儲(chǔ)器上,且配置為適于訪問第一存儲(chǔ)器且不能訪問所述第二存儲(chǔ)器;所述第二頁(yè)表配置為適于訪問所述存儲(chǔ)器。
可選地,所述內(nèi)存管理器還包括:記錄單元,適于記錄所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息;調(diào)整單元,適于根據(jù)所述記錄單元記錄的所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息,調(diào)整所述第一存儲(chǔ)器及所述第二存儲(chǔ)器內(nèi)的數(shù)據(jù)。
可選地,所述調(diào)整單元,適于當(dāng)所述cpu對(duì)所述第二存儲(chǔ)器中的程序訪問的次數(shù)超過預(yù)設(shè)的次數(shù),并且所述程序小于預(yù)設(shè)的存儲(chǔ)閾值時(shí),將所述程序從所述第二存儲(chǔ)器遷移至所述第一存儲(chǔ)器。
可選地,所述內(nèi)存管理器還包括:配置單元,適于配置頁(yè)表,所述頁(yè)表包括第一頁(yè)表和第二頁(yè)表;所述配置單元適于采用如下任意一種方式配置所述第一頁(yè)表:在所述第一頁(yè)表內(nèi)配置所述第二存儲(chǔ)器的頁(yè)表項(xiàng)為空;或者將所述第二存儲(chǔ)器的頁(yè)表項(xiàng)配置為不可讀寫。
可選地,所述觸發(fā)單元,還適于當(dāng)所述判斷單元確定引起所述異常處理的原因并非為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),觸發(fā)所述cpu進(jìn)入斷言處理流程。
可選地,所述退出函數(shù),適于通過將控制信號(hào)設(shè)置為假,觸發(fā)所述第二存儲(chǔ)器退出低功耗模式。
可選地,所述第一存儲(chǔ)器為內(nèi)部?jī)?nèi)存,所述第二存儲(chǔ)器為雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器。
與現(xiàn)有技術(shù)相比,本發(fā)明的技術(shù)方案具有以下優(yōu)點(diǎn):
當(dāng)?shù)诙鎯?chǔ)器處于低功耗模式且檢測(cè)到所述cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),通過調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從不適于對(duì)第二存儲(chǔ)器進(jìn)行訪問的第一頁(yè)表切換至可適于對(duì)第二存儲(chǔ)器進(jìn)行訪問第二頁(yè)表,可以使得所述cpu按照所述第二頁(yè)表對(duì)所述第二存儲(chǔ)器進(jìn)行訪問。也就是說,在第二存儲(chǔ)器處于低功耗模式時(shí),可以準(zhǔn)確地捕捉到訪問第二存儲(chǔ)器的操作,并通過統(tǒng)一的一個(gè)退出函數(shù)觸發(fā)第二存儲(chǔ)器提前退出低功耗模式,可以避免插入大量的退出函數(shù),并且無須一一尋找可能訪問第二存儲(chǔ)器的位置,從而可以提高效率,且還能提高代碼穩(wěn)定性及可移植性。并且,通過這種方法可以高效地使用第一存儲(chǔ)器,避免一直使用所述第二存儲(chǔ)器,可以有效地降低系統(tǒng)的功耗。
進(jìn)一步,通過記錄cpu對(duì)第二存儲(chǔ)器進(jìn)行訪問的信息,并根據(jù)記錄結(jié)果,來調(diào)整第一存儲(chǔ)器及所述第二存儲(chǔ)器內(nèi)的數(shù)據(jù),可以便于代碼的優(yōu)化及調(diào)試。
進(jìn)一步,在確定引起所述異常處理的原因并非為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),通過設(shè)置所述cpu進(jìn)入斷言處理流程,可以分析出不是對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求的其他原因并進(jìn)而解決所述中斷異常。
附圖說明
圖1是本發(fā)明實(shí)施例中的一種訪問存儲(chǔ)器的方法的流程示意圖;
圖2是本發(fā)明實(shí)施例中的一種芯片的通訊模塊的架構(gòu)圖;
圖3是本發(fā)明實(shí)施例中的一種存儲(chǔ)器的控制信號(hào)的邏輯示意圖;
圖4是本發(fā)明實(shí)施例中的另一種訪問存儲(chǔ)器的方法的流程示意圖;
圖5是本發(fā)明實(shí)施例中的一種內(nèi)存管理器的結(jié)構(gòu)示意圖。
具體實(shí)施方式
隨著通訊網(wǎng)絡(luò)的不斷發(fā)展,人們對(duì)基帶芯片的性能要求也在不斷地提升,一般基帶芯片上具有兩個(gè)存儲(chǔ)器,分別為第一與第二存儲(chǔ)器。比如所述第一存儲(chǔ)器可以為內(nèi)部?jī)?nèi)存(internal-ram,iram),第二存儲(chǔ)器為雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(doubledatarate,ddr)。為了滿足這些需求,除了提升中央處理器(centralprocessingunit,cpu)的性能外,ddr性能的提升也必不 可少。隨著ddr性能的提升,隨之帶來的功耗開銷也愈大。為了解決ddr帶來的功耗增加,在芯片上引入了iram,使得在一些基帶芯片的主要工作場(chǎng)景下(如組呼(paging)及cs尋呼業(yè)務(wù)(cscall)),代碼盡可能的運(yùn)行在iram上,而要訪問的數(shù)據(jù)也盡可能放在iram上,從而達(dá)到不開啟ddr,也就是使得ddr處于低功耗(lightsleep,ddrcontrollerstop,ddrself-refresh)模式,以降低這些場(chǎng)景下的電流問題。并且,該芯片對(duì)ddr進(jìn)入lightsleep模式的可能方式增加了一種情況,即允許芯片在工作的情況下,也能允許ddr進(jìn)入lightsleep模式,這樣雖然允許ddr更大限度地進(jìn)入lightsleep模式,降低了功耗,但同時(shí)也出現(xiàn)了在lightsleep模式訪問ddr的可能。
這樣一來,就會(huì)存在如下的問題:大容量的iram實(shí)際上包含了大量的代碼和數(shù)據(jù),而我們務(wù)必把所有可能訪問到ddr上的地方都找到,并在之前加入可使得ddr退出低功耗模式的退出函數(shù)。
這會(huì)大量地增加代碼的大小,因?yàn)榇罅康暮瘮?shù)被插入了原來的代碼,破壞原來的代碼結(jié)構(gòu),同時(shí)還會(huì)造成該函數(shù)多次調(diào)用,造成效率上的損失;而且一旦某些分支沒有去調(diào)用所述函數(shù)來使得ddr退出低功耗模式,會(huì)造成整個(gè)芯片掛死,且掛死后很難發(fā)現(xiàn)原因,更無法修補(bǔ)程序漏洞(debug)。同樣地,如果需要對(duì)代碼做調(diào)整時(shí),也會(huì)不方便。
為解決上述問題,本發(fā)明實(shí)施例提出了訪問存儲(chǔ)器的方法,當(dāng)?shù)诙鎯?chǔ)器處于低功耗模式且檢測(cè)到所述cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),通過調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從不適于對(duì)第二存儲(chǔ)器進(jìn)行訪問的第一頁(yè)表切換至可適于對(duì)第二存儲(chǔ)器進(jìn)行訪問第二頁(yè)表,可以使得所述cpu按照所述第二頁(yè)表對(duì)所述第二存儲(chǔ)器進(jìn)行訪問。也就是說,在第二存儲(chǔ)器處于低功耗模式時(shí),可以準(zhǔn)確地捕捉到訪問第二存儲(chǔ)器的操作,并通過一個(gè)退出函數(shù)觸發(fā)第二存儲(chǔ)器提前退出低功耗模式,可以避免插入大量的退出函數(shù),并且無須一一尋找可能訪問第二存儲(chǔ)器的位置,從而可以提高效率,且還能提高代碼穩(wěn)定性及可移植性。并且,通過這種方法可以高效地使用第一存儲(chǔ)器,避免一直使用所述第二存儲(chǔ)器,可以有效地降低系統(tǒng)的功耗。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更為明顯易懂,下面結(jié)合附圖 對(duì)本發(fā)明的具體實(shí)施例做詳細(xì)的說明。
本發(fā)明實(shí)施例提供了一種訪問存儲(chǔ)器的方法,如圖1所示,所述存儲(chǔ)器包括第一存儲(chǔ)器及第二存儲(chǔ)器,以下結(jié)合圖1對(duì)所述方法進(jìn)行分步驟詳細(xì)介紹,所述方法可以包括如下步驟:
步驟s11:檢測(cè)所述第二存儲(chǔ)器是否處于低功耗模式且所述cpu是否執(zhí)行訪問所述第二存儲(chǔ)器的操作。
由于在第二存儲(chǔ)器處于非低功耗模式下,cpu對(duì)所述第二存儲(chǔ)器進(jìn)行直接的訪問,故為了確定是否執(zhí)行以下流程所涉及的操作,在具體實(shí)施中,可以檢測(cè)所述第二存儲(chǔ)器是否處于低功耗模式,并且所述cpu是否執(zhí)行訪問所述第二存儲(chǔ)器的操作。
需要說明的是,如果第二存儲(chǔ)器進(jìn)入到低功耗模式時(shí),會(huì)將之前cpu使用的可以用以訪問所述第二存儲(chǔ)器的頁(yè)表調(diào)整為其它的頁(yè)表,所述其它的頁(yè)表配置為適于訪問第一存儲(chǔ)器且不能訪問所述第二存儲(chǔ)器。為便于描述,可以將所述其它的可以為第一頁(yè)表,所述第一頁(yè)表可以設(shè)置于所述第一存儲(chǔ)器上。
在具體實(shí)施中,當(dāng)檢測(cè)所述第二存儲(chǔ)器處于低功耗模式且所述cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),執(zhí)行步驟s12;反之,則重復(fù)執(zhí)行步驟s11。
步驟s12:觸發(fā)所述cpu進(jìn)入異常處理流程。
在具體實(shí)施中,由于所述第一頁(yè)表不可適于對(duì)所述第二存儲(chǔ)器進(jìn)行訪問,故當(dāng)cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),也就是請(qǐng)求依據(jù)所述第一頁(yè)表對(duì)所述第二存儲(chǔ)器進(jìn)行訪問時(shí),可以向所述cpu上報(bào)地址轉(zhuǎn)換錯(cuò)誤或者地址訪問權(quán)限不夠的錯(cuò)誤,從而使得所述cpu進(jìn)入異常處理流程,并可以阻止所述cpu對(duì)所述第二存儲(chǔ)器的直接訪問。
步驟s13:判斷引起所述異常處理的原因是否為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求。
由于引起異常處理的原因有多種,并且大部分的異常都是錯(cuò)誤的訪問所引起的,故為了避免對(duì)錯(cuò)誤的訪問等原因造成的終端異常處理造成影響,在 具體實(shí)施中,可以判斷引起所述異常處理的原因是否為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求。
在具體實(shí)施中,當(dāng)確定引起所述異常處理的原因?yàn)閷?duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),執(zhí)行步驟s14;反之,則執(zhí)行步驟s15。
步驟s14:調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從第一頁(yè)表切換至第二頁(yè)表。
在具體實(shí)施中,所述第二頁(yè)表配置可以為適于訪問所述存儲(chǔ)器,即所有的存儲(chǔ)器,包括所述第一存儲(chǔ)器及所述第二存儲(chǔ)器。
可以理解的是,為了使得所述第一頁(yè)表不能用于訪問第一存儲(chǔ)器,在具體實(shí)施中,可以有多種方式配置所述第一頁(yè)表,比如可以在所述第一頁(yè)表內(nèi)配置所述第二存儲(chǔ)器的頁(yè)表項(xiàng)為空,也就是在所述第一頁(yè)表內(nèi)不配置關(guān)于所述第二存儲(chǔ)器的頁(yè)表項(xiàng),也可以將所述第二存儲(chǔ)器的頁(yè)表項(xiàng)配置為不可讀寫。但是,在所述第一頁(yè)表上,關(guān)于所述第一存儲(chǔ)器及其它寄存器相關(guān)項(xiàng)的原有屬性配置不變,換言之,cpu可以使用所述第一頁(yè)表對(duì)所述第一存儲(chǔ)器及其它寄存器進(jìn)行訪問。
為了更好地優(yōu)化數(shù)據(jù)及代碼,在具體實(shí)施中,可以記錄所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息,進(jìn)而可以根據(jù)所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息,調(diào)整所述第一存儲(chǔ)器及所述第二存儲(chǔ)器內(nèi)的數(shù)據(jù)。
需要說明的是,根據(jù)cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息調(diào)整存儲(chǔ)器中的數(shù)據(jù)的方法有多種。比如在本發(fā)明一實(shí)施例中,在所述cpu對(duì)所述第二存儲(chǔ)器中的程序訪問的次數(shù)超過預(yù)設(shè)的次數(shù),并且所述程序小于預(yù)設(shè)的存儲(chǔ)閾值時(shí),可以將所述程序從所述第二存儲(chǔ)器遷移至所述第一存儲(chǔ)器,這樣可以方便cpu對(duì)該數(shù)據(jù)的訪問。在本發(fā)明另一實(shí)施例中,在所述cpu對(duì)所述第二存儲(chǔ)器中的程序訪問的次數(shù)低于預(yù)設(shè)的次數(shù),并且所述程序大于預(yù)設(shè)的存儲(chǔ)閾值時(shí),仍將該數(shù)據(jù)保留在所述第二存儲(chǔ)器中。
步驟s15:觸發(fā)所述cpu進(jìn)入斷言處理流程。
為了避免因cpu訪問第二存儲(chǔ)器,而對(duì)其它異常處理情況造成影響,在具體實(shí)施中,如果確定引起所述異常處理的原因并非為對(duì)所述第二存儲(chǔ)器的 正常訪問請(qǐng)求時(shí),可以觸發(fā)所述cpu進(jìn)入斷言處理流程,以便于對(duì)代碼或者數(shù)據(jù)的異常情況的處理。
可以理解的是,在本發(fā)明一實(shí)施例中,所述第一存儲(chǔ)器可以為內(nèi)部?jī)?nèi)存,所述第二存儲(chǔ)器可以為雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器。在實(shí)際應(yīng)用中,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際需要,將本發(fā)明實(shí)施例中的方法使用于其它具有兩個(gè)或者以上存儲(chǔ)器的芯片中。
綜上所述可知,當(dāng)?shù)诙鎯?chǔ)器處于低功耗模式且檢測(cè)到所述cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),通過觸發(fā)所述cpu進(jìn)入異常處理流程,具體為:判斷引起所述異常處理的原因是否為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求,在確定對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求為引起所述異常處理的原因時(shí),調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從不適于對(duì)第二存儲(chǔ)器進(jìn)行訪問的第一頁(yè)表切換至可適于對(duì)第二存儲(chǔ)器進(jìn)行訪問第二頁(yè)表,可以使得所述cpu按照所述第二頁(yè)表對(duì)所述第二存儲(chǔ)器進(jìn)行訪問,也就是說,通過在第二存儲(chǔ)器處于低功耗模式下,準(zhǔn)確地捕捉到訪問第二存儲(chǔ)器的操作,并讓第二存儲(chǔ)器提前退出低功耗模式,可以避免插入大量的退出函數(shù),并且無須一一尋找可能訪問第二存儲(chǔ)器的位置,從而可以提高效率,且還能提高代碼穩(wěn)定性及可移植性。并且,通過這種方法可以高效地使用第一存儲(chǔ)器,避免一直使用所述第二存儲(chǔ)器,可以有效地降低系統(tǒng)的功耗。
需要說明的是,在本發(fā)明一實(shí)施例中,所述退出函數(shù),可以通過將控制信號(hào)設(shè)置為假,來觸發(fā)所述第二存儲(chǔ)器退出低功耗模式。
為使得本領(lǐng)域技術(shù)人員更好地理解控制所述第二存儲(chǔ)器進(jìn)入、退出低功耗模式的操作,圖2示出了本發(fā)明實(shí)施例中的一種芯片的通訊部分的架構(gòu),所述芯片中包括ddr、直接內(nèi)存訪問(directionalmemoryaccess,dma)、ceva處理器(cevadsp)、靜態(tài)隨機(jī)存取存儲(chǔ)器(staticrandomaccessmemory,sram)、wdma及gsm文件(gsm_proc),還包括大小為626kbytes的內(nèi)部?jī)?nèi)存(internalram)及大小為198kb的內(nèi)部?jī)?nèi)存(internalrom),其中:所述大小為626kbytes的內(nèi)部?jī)?nèi)存包括576kb的arm和50kb的dsp,576kbytes掛在arm9_0的matrix下面,分配于arm9_0使用,50kbytes掛在cevadsp的matrix下面,供gsm_dsp和audio_dsp使用。 所述大小為198kb的內(nèi)部?jī)?nèi)存包括176kb的arm和22kb的dsp,所述176kb的arm主要存儲(chǔ)audio相關(guān)nxp庫(kù)文件,22kb的dsp主要為arm-wb常量數(shù)據(jù)(constdata)使用。
由于芯片中除了包括ddr之外,還包括iram,故在本發(fā)明一實(shí)施例中,可以通過圖3示出了的信號(hào)來控制所述ddr進(jìn)入及退出低功耗模式,所述圖中的控制信號(hào)cp_light_sleep的真(true)假(false)表征ddr進(jìn)入、退出低功耗模式,控制模塊1為本發(fā)明實(shí)施例中一種微控制單元(microcontrollerunit,mcu)的邏輯架構(gòu),處理模塊2為本發(fā)明實(shí)施例中一種數(shù)字信號(hào)處理(digitalsignalprocessing,dsp)單元的邏輯架構(gòu),控制模塊3表示寬帶碼分多址系統(tǒng)(widebandcodedivisionmultipleaccesssystem,wsys)的邏輯架構(gòu),此文中并不限定dsp和wsys的具體實(shí)現(xiàn)方法,本發(fā)明實(shí)施例中假設(shè)它們總是滿足條件的,也就是控制信號(hào)dsp_it_stop及控制信號(hào)wsys_it_stop總是為真。
從圖3中可見,只要arm_stop和dma_stop為true時(shí),即mcu允許進(jìn)入低功耗模式時(shí),如果此時(shí)dsp和wsys也是滿足條件的話,那么ddr就會(huì)進(jìn)入低功耗狀態(tài)。但是,這種情況不會(huì)發(fā)生。也就是說cpu在運(yùn)行的話,arm_stop并不會(huì)置成true,即ddr就不會(huì)進(jìn)入低功耗狀態(tài)。而為了降低功耗,需要在cpu依然在運(yùn)行的這種場(chǎng)景下,使得cpu只會(huì)從iram中獲取指令和數(shù)據(jù)。故可以通過函數(shù)強(qiáng)制去設(shè)置arm_to_ddr_frc_stop為true,此時(shí)若dsp及wsys都已經(jīng)滿足條件的話,那么ddr就會(huì)進(jìn)入lightsleep模式,也就是cpu強(qiáng)制允許ddr進(jìn)入lightsleep模式。
如此一來,會(huì)出現(xiàn)信號(hào)arm_stop不為true時(shí)芯片才會(huì)進(jìn)入lightsleep模式,而是通過設(shè)置控制信號(hào)arm_to_ddr_frc_stop的狀態(tài)來允許ddr提前進(jìn)入lightsleep模式,但芯片底層的電路邏輯認(rèn)為arm_stop是為true的,也就根本不會(huì)發(fā)起對(duì)ddr的訪問的。那么對(duì)于cpu還在運(yùn)行,ddr已經(jīng)進(jìn)入lightsleep模式了的情況,一旦有iram上的函數(shù)想要調(diào)用存放在ddr上的代碼或者訪問ddr上存放的數(shù)據(jù)時(shí),就需要提前調(diào)用退出函數(shù)設(shè)置arm_to_ddr_frc_stop為false,這樣芯片的電路邏輯發(fā)現(xiàn)arm_stop為false(即cpu還在運(yùn)行)就會(huì)讓ddr從lightsleep模式狀態(tài)退出來,從而完成ddr上指令和數(shù)據(jù)的安全 讀寫。
在本發(fā)明一實(shí)施例中,所述退出函數(shù)func_ddr_exit_lightsleep()可以通過把a(bǔ)rm_to_ddr_frc_stop置為false,來觸發(fā)使ddr退出lightsleep模式。
為使得本領(lǐng)域技術(shù)人員更好地理解和實(shí)現(xiàn)本發(fā)明,下面以第一存儲(chǔ)器是內(nèi)部?jī)?nèi)存(internal-ram,iram),第二存儲(chǔ)器是雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(doubledatarate,ddr)的情況下,cpu訪問存儲(chǔ)器的方法為例來進(jìn)行說明,結(jié)合圖3及圖4,所述方法可以包括如下步驟:
步驟s401:開機(jī)。
步驟s402:在iram創(chuàng)建第一頁(yè)表。
需要說明的是,內(nèi)存管理單元(memorymanagementunit,mmu)設(shè)置于處理器,適于管理著整個(gè)內(nèi)存空間的讀寫屬性,即mmu可以根據(jù)配置的頁(yè)表屬性項(xiàng)來計(jì)算對(duì)應(yīng)的訪問地址的讀寫屬性及物理地址,從而幫助cpu訪問內(nèi)存空間。
在具體實(shí)施中,在系統(tǒng)開機(jī)的時(shí)候,也就是在ddr第一次進(jìn)入lightsleep模式之前,所述mmu可以在iram上創(chuàng)建一份新的頁(yè)表,也就是第一頁(yè)表,而該第一頁(yè)表跟之前的頁(yè)表項(xiàng)的區(qū)別在于對(duì)于所有ddr的空間,頁(yè)表項(xiàng)都不配置,或者配置為不可讀寫,而對(duì)于iram及寄存器相關(guān)項(xiàng)則保持原有屬性不變。
步驟s403:設(shè)置退出函數(shù)。
在具體實(shí)施中,可以設(shè)置退出函數(shù),以使得可被調(diào)用來控制ddr退出低功耗狀態(tài)。
步驟s404:當(dāng)系統(tǒng)發(fā)起低功耗模式請(qǐng)求時(shí),切換當(dāng)前的頁(yè)表為所述第一頁(yè)表,并設(shè)置所述ddr進(jìn)入低功耗模式。
在具體實(shí)施中,一旦系統(tǒng)認(rèn)為不再需要訪問ddr上內(nèi)容的時(shí)候,則系統(tǒng)發(fā)起低功耗模式請(qǐng)求時(shí),也就是系統(tǒng)準(zhǔn)備去設(shè)置圖3中的控制信號(hào)arm_to_ddr_frc_stop為真時(shí),可以把當(dāng)前正在使用的頁(yè)表切換為iram上創(chuàng)建的第一頁(yè)表上去,并設(shè)置所述ddr進(jìn)入低功耗模式,這樣一來,程序接著運(yùn) 行,而ddr處于lightsleep模式。
步驟s405:判斷cpu是否發(fā)起對(duì)ddr上的數(shù)據(jù)或者指令的訪問。
在具體實(shí)施中,當(dāng)程序在iram運(yùn)行過程中需要發(fā)起對(duì)ddr的訪問時(shí),由于設(shè)置了新的頁(yè)表項(xiàng),也就是第一頁(yè)表,mmu會(huì)根據(jù)所述第一頁(yè)表來幫助所述cpu訪問所述ddr,但是在所述第一頁(yè)表中或者沒有ddr的配置項(xiàng)或者不可讀所述ddr的配置項(xiàng),故mmu會(huì)向cpu上報(bào)地址轉(zhuǎn)換錯(cuò)誤或者地址訪問權(quán)限不夠的錯(cuò)誤,從而讓cpu陷入異常處理,從而阻止了對(duì)ddr的直接訪問。
當(dāng)確定cpu發(fā)起對(duì)ddr上的數(shù)據(jù)或者指令的訪問,執(zhí)行步驟s406,反之,則重復(fù)執(zhí)行步驟s405。
步驟s406:觸發(fā)進(jìn)入異常處理。
步驟s407:判斷所述異常處理是否由正常訪問ddr引起。
因?yàn)榇蟛糠值漠惓6际清e(cuò)誤的訪問引起的,類似非對(duì)齊訪問,空指針訪問等,故在具體實(shí)施中,針對(duì)異常處理則需要嚴(yán)格進(jìn)行區(qū)分,也判斷所述異常處理是否由正常訪問ddr引起,具體而言,首先得判斷ddr是否處于lightsleep模式,出現(xiàn)異常的地址是否在ddr的空間范圍內(nèi),是否不是非對(duì)齊訪問產(chǎn)生的錯(cuò)誤等,只有同時(shí)滿足這些情況時(shí),才確定所述異常處理是由正常訪問ddr引起。
當(dāng)確定所述異常處理是由正常訪問ddr引起,執(zhí)行步驟s408,反之,則執(zhí)行步驟s411。
步驟s408:調(diào)用所述退出函數(shù),將cpu訪問使用的頁(yè)表從所述第一頁(yè)表切換為第二頁(yè)表。
在具體實(shí)施中,可以調(diào)用退出函數(shù)func_ddr_exit_lightsleep(),通過把a(bǔ)rm_to_ddr_frc_stop置為false,來觸發(fā)使ddr退出lightsleep模式,并且重新設(shè)置頁(yè)表為ddr上的頁(yè)表項(xiàng),也就是第二頁(yè)表。
步驟s409:退出異常處理,并利用所述第二頁(yè)表對(duì)所述ddr進(jìn)行訪問。
在具體實(shí)施中,可以使得cpu退出異常處理,并利用所述第二頁(yè)表對(duì)所 述ddr進(jìn)行訪問。
步驟s410:判斷訪問是否結(jié)束。
當(dāng)cpu對(duì)ddr的訪問結(jié)束時(shí),執(zhí)行步驟s404,反之,繼續(xù)執(zhí)行步驟s410。
在具體實(shí)施中,由于總是能夠捕獲每次出現(xiàn)ddr訪問的指令和數(shù)據(jù),調(diào)試過程中可以把這些結(jié)果保存到一些全局?jǐn)?shù)組中,進(jìn)行匯總統(tǒng)計(jì)分析,并根據(jù)這些結(jié)果對(duì)代碼做進(jìn)一步的優(yōu)化,把一些必要的代碼放入到iram中去,把一些不必要的代碼移出iram。
步驟s411:進(jìn)入斷言處理流程。
如前所述,由于大部分的異常都是錯(cuò)誤的訪問引起的,類似非對(duì)齊訪問,空指針訪問等,所以在具體實(shí)施中,針對(duì)這種情況還需要繼續(xù)保留之前的異常處理流程,保存發(fā)生異常時(shí)的寄存器,也就是進(jìn)入斷言(assert)流程。
為使得本領(lǐng)域技術(shù)人員更好地理解和實(shí)現(xiàn)本發(fā)明,以下還提供了可以實(shí)現(xiàn)上述實(shí)施例中的訪問存儲(chǔ)器的方法的一種內(nèi)存管理器,如圖5所示,所述內(nèi)存管理器適于管理存儲(chǔ)器,所述存儲(chǔ)器包括第一存儲(chǔ)器及第二存儲(chǔ)器,所述內(nèi)存管理器可以包括:第一檢測(cè)單元51、第二檢測(cè)單元52、觸發(fā)單元53、判斷單元54及函數(shù)調(diào)用單元55,其中:
所述第一檢測(cè)單元51,適于檢測(cè)所述第二存儲(chǔ)器是否處于低功耗模式;
所述第二檢測(cè)單元52,適于檢測(cè)所述cpu是否執(zhí)行訪問所述第二存儲(chǔ)器的操作;
所述觸發(fā)單元53,適于當(dāng)所述第一檢測(cè)單元51檢測(cè)到所述第二存儲(chǔ)器處于低功耗模式,且所述第二檢測(cè)單元52檢測(cè)到所述cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),觸發(fā)所述cpu進(jìn)入異常處理流程;
所述判斷單元54,適于判斷引起所述異常處理的原因是否為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求;
所述函數(shù)調(diào)用單元55,適于當(dāng)所述判斷單元54確定引起所述異常處理的原因?yàn)閷?duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從第一頁(yè)表切換至第二頁(yè)表;所述第 一頁(yè)表為所述cpu設(shè)置所述第二存儲(chǔ)器進(jìn)入低功耗模式時(shí)所對(duì)應(yīng)的頁(yè)表,設(shè)置于所述第一存儲(chǔ)器上,且配置為適于訪問第一存儲(chǔ)器且不能訪問所述第二存儲(chǔ)器;所述第二頁(yè)表配置為適于訪問所述存儲(chǔ)器,即所有的存儲(chǔ)器,包括所述第一及第二存儲(chǔ)器。
綜上所述可知,通過本發(fā)明實(shí)施例中的內(nèi)存管理器,在第二存儲(chǔ)器處于低功耗模式且檢測(cè)到所述cpu執(zhí)行訪問所述第二存儲(chǔ)器的操作時(shí),通過調(diào)用退出函數(shù)觸發(fā)所述第二存儲(chǔ)器退出低功耗模式,并將當(dāng)前的頁(yè)表從不適于對(duì)第二存儲(chǔ)器進(jìn)行訪問的第一頁(yè)表切換至可適于對(duì)第二存儲(chǔ)器進(jìn)行訪問第二頁(yè)表,可以使得所述cpu按照所述第二頁(yè)表對(duì)所述第二存儲(chǔ)器進(jìn)行訪問。也就是說,在第二存儲(chǔ)器處于低功耗模式時(shí),可以準(zhǔn)確地捕捉到訪問第二存儲(chǔ)器的操作,并通過一個(gè)退出函數(shù)觸發(fā)第二存儲(chǔ)器提前退出低功耗模式,可以避免插入大量的退出函數(shù),并且無須一一尋找可能訪問第二存儲(chǔ)器的位置,從而可以提高效率,且還能提高代碼穩(wěn)定性及可移植性。并且,通過這種方法可以高效地使用第一存儲(chǔ)器,避免一直使用所述第二存儲(chǔ)器,可以有效地降低系統(tǒng)的功耗。
在具體實(shí)施中,所述內(nèi)存管理器,還可以包括:
記錄單元56,適于記錄所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息;
調(diào)整單元57,適于根據(jù)所述記錄單元56記錄的所述cpu對(duì)所述第二存儲(chǔ)器進(jìn)行訪問的信息,調(diào)整所述第一存儲(chǔ)器及所述第二存儲(chǔ)器內(nèi)的數(shù)據(jù)。
在具體實(shí)施中,所述根據(jù)調(diào)整單元57,適于當(dāng)所述cpu對(duì)所述第二存儲(chǔ)器中的程序訪問的次數(shù)超過預(yù)設(shè)的次數(shù),并且所述程序小于預(yù)設(shè)的存儲(chǔ)閾值時(shí),將所述程序從所述第二存儲(chǔ)器遷移至所述第一存儲(chǔ)器。
在具體實(shí)施中,所述觸發(fā)單元53,還適于:當(dāng)確定引起所述異常處理的原因并非為對(duì)所述第二存儲(chǔ)器的正常訪問請(qǐng)求時(shí),觸發(fā)所述cpu進(jìn)入斷言處理流程。
在具體實(shí)施中,所述退出函數(shù),適于通過將控制信號(hào)設(shè)置為假,觸發(fā)所述第二存儲(chǔ)器退出低功耗模式。
在具體實(shí)施中,所述第一存儲(chǔ)器為內(nèi)部?jī)?nèi)存,所述第二存儲(chǔ)器為雙倍速 率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器。
在具體實(shí)施中,所述內(nèi)存管理器,還可以包括:配置單元58,適于配置頁(yè)表,所述頁(yè)表包括第一頁(yè)表和第二頁(yè)表;所述配置單元58適于采用如下任意一種方式配置所述第一頁(yè)表:在所述第一頁(yè)表內(nèi)配置所述第二存儲(chǔ)器的頁(yè)表項(xiàng)為空;將所述第二存儲(chǔ)器的頁(yè)表項(xiàng)配置為不可讀寫。
本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲(chǔ)于以計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:rom、ram、磁盤或光盤等。
雖然本發(fā)明披露如上,但本發(fā)明并非限定于此。任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動(dòng)與修改,因此本發(fā)明的保護(hù)范圍應(yīng)當(dāng)以權(quán)利要求所限定的范圍為準(zhǔn)。