本發(fā)明屬于嵌入式軟件開發(fā)的技術(shù)領(lǐng)域,特別涉及一種內(nèi)存的訪問方法。
背景技術(shù):
目前應(yīng)用程序五花八門,但是這些應(yīng)用程序基本上都是使用一種或者多種開發(fā)語言和集成開發(fā)環(huán)境(ide)進行開發(fā),對于開發(fā)者來說,編寫代碼肯定會涉及到內(nèi)存訪問,包括直接內(nèi)存訪問和間接內(nèi)存訪問,不管高階開發(fā)語言如c、c++、java等,還是低階的開發(fā)語言如:pic、6502等來說,訪問變量歸根結(jié)底最后都會生成匯編指令如:movwfvar(把work寄存器移到var變量中),但是大部分risc體系結(jié)構(gòu)的ic內(nèi)存存在多個page,每個page中又分為2個bank,如:page0有bank0、bank1兩個bank;page1有bank2、bank3兩個bank,以此類推,由于體系結(jié)構(gòu)的限制,一般page不會超過4個,在risc體系結(jié)構(gòu)中由于數(shù)據(jù)總線的限制要直接訪問變量就要先切換到變量所在的page,然后再進行訪問,間接訪問不僅要切換page,還要切換bank,由此訪問一個變量操作太麻煩,不僅要先判斷變量所在的page、bank,而且還要設(shè)置對應(yīng)的切換page、bank指令,這樣不僅影響方案開發(fā)的效率,最致命的是太容易出錯,而且靈活度太差,如果后續(xù)修改var變量放置在其他page中,那么又要修改代碼,難以保證方案開發(fā)過程中訪問變量的高效率、靈活、穩(wěn)定性。
如專利申請201610465148.1公開了一種移動終端和內(nèi)存釋放控制方法,該移動終端包括:應(yīng)用篩選模塊,用于檢測到后臺應(yīng)用管理指令,并選出移動終端在過去的預(yù)設(shè)時長內(nèi)開啟的歷史應(yīng)用;列表顯示模塊,用于在移動終端預(yù)設(shè)顯示區(qū)域顯示包括歷史應(yīng)用對應(yīng)歷史應(yīng)用標識的后臺應(yīng)用列表;指令接收模塊,用于接收用戶基于后臺應(yīng)用列表輸入的選擇指令,并確定選擇指令選中的歷史應(yīng)用標識;內(nèi)存釋放模塊,用于釋放選擇指令選中的歷史應(yīng)用標識對應(yīng)歷史應(yīng)用所占用的內(nèi)存。該申請只是利用選擇指令釋放歷史應(yīng)用標識對應(yīng)歷史應(yīng)用所占用的內(nèi)存,只能暫時性地釋放內(nèi)存,并不能直接或間接地訪問內(nèi)存,無法做到開發(fā)過程中訪問變量的高效性和可靠性。
技術(shù)實現(xiàn)要素:
基于此,因此本發(fā)明的首要目地是提供一種高效的內(nèi)存訪問方法,該方法能夠高效的直接或間接訪問內(nèi)存,保證方案開發(fā)過程中訪問變量的高效率、靈活、穩(wěn)定性。
本發(fā)明的另一個目地在于提供一種高效的內(nèi)存訪問方法,該方法實現(xiàn)簡便,成本低廉,便于為軟件開發(fā)人員所應(yīng)用。
為實現(xiàn)上述目的,本發(fā)明的技術(shù)方案為:
一種高效的內(nèi)存訪問方法,其特征在于該方法定義偽指令,使用簡單的偽指令替換page、bank選擇指令,并依靠編譯工具鏈解析偽指令,最后使用真正的指令糾正偽指令,從而提高用戶方案開發(fā)效率且不會出錯。
其中,所述定義偽指令:針對直接、間接內(nèi)存訪問分別定義一條偽指令,替代內(nèi)存訪問前的page選擇指令。
進一步,定義memsel偽指令來替換直接內(nèi)存訪問前的page選擇,直接訪問變量var前,無需再根據(jù)var變量所在的page來使用bsf指令來切換page,只要在直接訪問var之前使用memselvar這條指令即可。
進一步,定義memisel偽指令來替換間接內(nèi)存訪問前的page、bank選擇,間接訪問變量var前,無需再根據(jù)var變量所在的page、bank來使用bsf,bcf等指令來切換page、bank,只要在間接var之前使用memiselvar這條指令即可。
所述解析偽指令:把直接、間接訪問內(nèi)存?zhèn)沃噶钸M行解析為特定的指令存儲到目標文件中。
進一步,解析偽指令通過編譯器進行解析,編譯器負責對memsel、memisel進行解析,并根據(jù)此ic內(nèi)存布局來決定生成特定的指令,但是由于編譯時還未確定變量最終分配的位置,所以不能準確地生成page、bank選擇指令,因此只能使用相同指令條數(shù)的特定指令替換,如用nop指令替換,待指令糾正模塊再把nop指令糾正為真正的page、bank指令,即bsf、bcf指令。
所述指令糾正:把存儲在目標文件中的特定的指令糾正為真正的page、bank選擇指令,從而達到能夠真正切換page、bank的目的,進而能夠正確訪問內(nèi)存。
進一步,指令糾正,負責把解析偽指令中產(chǎn)生的nop指令替換成正確的page、bank選擇指令,即:bsforbcf指令。由于解析偽指令模塊把需要更正的地址都寫到重定向表中,再加上指令糾正模塊已經(jīng)確切知道變量分配的位置,所以指令糾正模塊通過查找重定向表,依次把表中每條記錄中對應(yīng)地址所指向的nop指令使用真正的bsf、bcf指令的機器碼替換,完成指令糾正。
本發(fā)明所實現(xiàn)的高效的內(nèi)存訪問方法,通過對偽指令的定義、解析及糾正,能夠高效的直接或間接訪問內(nèi)存,保證方案開發(fā)過程中訪問變量的高效率、靈活、穩(wěn)定性。
附圖說明
圖1是本發(fā)明所實現(xiàn)定義memsel偽指令的代碼示意圖。
圖2是本發(fā)明所實現(xiàn)使用memsel偽指令的代碼示意圖。
圖3是本發(fā)明所實現(xiàn)解析偽指令的流程圖。
圖4是本發(fā)明所實現(xiàn)指令糾正的流程圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明所實現(xiàn)的高效的內(nèi)存訪問方法,首先定義偽指令,然后使用簡單的偽指令替換page、bank選擇指令,并依靠編譯工具鏈解析偽指令,最后使用真正的指令糾正偽指令,從而提高用戶方案開發(fā)效率且不會出錯。
定義偽指令,是針對直接內(nèi)存訪問和間接內(nèi)存訪問分別定義一條偽指令替換page、bank選擇指令。
1)如圖1所示,定義memsel偽指令來替換直接內(nèi)存訪問前的page選擇,如直接訪問變量var前,用戶無需再根據(jù)var變量所在的page來使用bsf指令來切換page,只要在直接訪問var之前使用memselvar這條指令即可。
2)定義memisel偽指令來替換間接內(nèi)存訪問前的page、bank選擇,如間接訪問變量var前,用戶無需再根據(jù)var變量所在的page、bank來使用bsf,bcf等指令來切換page、bank,只要在間接var之前使用memiselvar這條指令即可。如圖2所示。
解析偽指令,是發(fā)生在編譯器,編譯器負責對memsel、memisel進行解析,并根據(jù)此ic內(nèi)存布局來決定生成特定的指令,但是由于編譯時還未確定變量最終分配的位置,所以不能準確地生成page、bank選擇指令,因此只能使用相同指令條數(shù)的特定指令替換,如用nop指令替換,待指令糾正模塊再把nop指令糾正為真正的page、bank指令,即bsf、bcf指令。解析指令的實現(xiàn)流程圖如圖3所示:
101、首先,初始化解析指令模塊,獲取文檔中所有匯編指令保存到容器;
102、從容器中提取一條條匯編指令;
103、判斷匯編指令是否提取完畢,若提取完畢,則轉(zhuǎn)到步驟109,生成目標文件,若沒有提取完畢,則進行下一步,
104、進一步判斷匯編指令是否是memsel/memisel偽指令;如果提取的匯編指令不是memsel/memisel偽指令,則轉(zhuǎn)到步驟108,提取容器中下一條匯編指令;若是memsel/memisel偽指令,則進行下一步;
105、獲取目標型號ic的page數(shù);
106、根據(jù)page數(shù)確定切換page需要的指令數(shù);
107、使用相同數(shù)目nop指令填充,并記錄糾正地址到重定向表中;
108、提取容器中下一條匯編指令,并轉(zhuǎn)到步驟103;
109、生成目標文件。
指令糾正,負責把解析偽指令中產(chǎn)生的nop指令替換成正確的page、bank選擇指令,即:bsforbcf指令。由于解析偽指令模塊把需要更正的地址都寫到重定向表中,再加上指令糾正模塊已經(jīng)確切知道變量分配的位置,所以指令糾正模塊通過查找重定向表,依次把表中每條記錄中對應(yīng)地址所指向的nop指令使用真正的bsf、bcf指令的機器碼替換,完成指令糾正,該模塊的實現(xiàn)流程圖如圖4所示:
201、初始化指令糾正模塊,打開目標文件;
202、獲取目標文件重定向表;
203、提取重定向表一條條記錄;
204、判斷是否提取成功;如果否,則轉(zhuǎn)到209步驟,完成指令糾正,關(guān)閉目標文件;如果是,則繼續(xù)下一步;
205、獲取目標型號ic的page數(shù);
206、獲取變量最后locate的page數(shù),確定更正所使用的指令;
207、使用更正的指令替換重定向表中記錄的糾正地址所指向的指令;
208、提取重定向表中下一條記錄,并轉(zhuǎn)到204步驟;
209、完成指令糾正,關(guān)閉目標文件。
本發(fā)明所實現(xiàn)的高效的內(nèi)存訪問方法,通過對偽指令的定義、解析及糾正,能夠高效的直接或間接訪問內(nèi)存,保證方案開發(fā)過程中訪問變量的高效率、靈活、穩(wěn)定性。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。