專利名稱::一種在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及嵌入式技術(shù),特別涉及一種在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法。
背景技術(shù):
:目前,嵌入式技術(shù)正廣泛應(yīng)用于人們生產(chǎn)、生活的各個領(lǐng)域,基于各種嵌入式操作系統(tǒng)平臺的應(yīng)用軟件開發(fā)也在如火如茶地進(jìn)行。這些應(yīng)用軟件在實現(xiàn)其相應(yīng)的功能時,可能需要對數(shù)據(jù)進(jìn)行各種靈活的操作,這就需要嵌入式操作系統(tǒng)中提供數(shù)據(jù)庫的功能,以供這些應(yīng)用軟件調(diào)用。在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的一個最省時、省力的方法就是將現(xiàn)有技術(shù)中已經(jīng)存在的某種嵌入式數(shù)據(jù)庫移植到該嵌入式操作系統(tǒng)中。然而,所述移植并不是簡單地將嵌入式數(shù)據(jù)庫的源代碼復(fù)制到嵌入式操作系統(tǒng)中即可完成,而是需要解決許多相關(guān)的技術(shù)問題才能實現(xiàn)。在移植過程中可能存在的技術(shù)問題包括內(nèi)存操作接口匹配問題、內(nèi)存使用沖突問題、文件系統(tǒng)應(yīng)用編程接口(API)匹配問題、臨時文件的處理問題、單任務(wù)/多任務(wù)問題等。下面以在Nucleus嵌入式操作系統(tǒng)中移植SQlite嵌入式數(shù)據(jù)庫為例,說明成功完成所述移植需要解決的技術(shù)問題1、內(nèi)存操作接口匹配問題Nucleus操作系統(tǒng)中的內(nèi)存操作接口不能滿足SQlite對內(nèi)存操作接口的要求,需要一套專供SQlite使用的內(nèi)存操作接口,但又不能與原有內(nèi)存使用相沖突。2、文件系統(tǒng)API匹配問題基于Nuclues操作系統(tǒng)的嵌入式平臺上提供的文件系統(tǒng)API如何滿足SQlite移植的要求。43、臨時文件的處理問題嵌入式數(shù)據(jù)庫SQlite運行后將產(chǎn)生許多臨時文件,像Linux和Windows這樣的高級操作系統(tǒng)將自動清除它們,但是嵌入式操作系統(tǒng)通常沒有自動清除的功能。4、單任務(wù)/多任務(wù)的問題嵌入式數(shù)據(jù)庫SQlite需要提供多任務(wù)級或多線程級的數(shù)據(jù)保護(hù)以及互斥等接口,這些在高級操作系統(tǒng)上都是默認(rèn)提供的,甚至是從內(nèi)核上得到支持的,但是,Nucleus是基于單任務(wù)的操作系統(tǒng),在現(xiàn)有Nucleus上還沒有多任務(wù)級或多線程級的接口。上述技術(shù)問題的存在阻礙了嵌入式操作系統(tǒng)對數(shù)據(jù)庫功能的支持,進(jìn)而阻礙了各種基于嵌入式操作系統(tǒng)平臺的應(yīng)用軟件的快速開發(fā)。
發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供一種在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法,實現(xiàn)以較低的成本在嵌入式操作系統(tǒng)中提供數(shù)據(jù)庫功能。為達(dá)到上述目的,本發(fā)明實施例提供了一種在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法,包括A、在嵌入式操作系統(tǒng)中移植一套與嵌入式數(shù)據(jù)庫匹配的內(nèi)存操作接口,所述移植的內(nèi)存操作接口的內(nèi)存操作方式與所述嵌入式操作系統(tǒng)的內(nèi)存操作方式不同;B、在嵌入式#:作系統(tǒng)的文件系統(tǒng)應(yīng)用編程接口API上映射嵌入式^:據(jù)庫的文件系統(tǒng)API;C、將所述嵌入式數(shù)據(jù)庫的臨時文件重定向到預(yù)設(shè)的臨時目錄下,并在所述嵌入式數(shù)據(jù)庫使用結(jié)束后刪除所述預(yù)設(shè)的臨時目錄下的臨時文件;D、將所述嵌入式數(shù)據(jù)庫的多任務(wù)功能接口失效。由上述技術(shù)方案可見,本發(fā)明提供的在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法,通過在嵌入式操作系統(tǒng)中移植一套與該嵌入式操作系統(tǒng)的內(nèi)存操作方式不同的內(nèi)存操作接口,解決了嵌入式數(shù)據(jù)庫移植過程中的內(nèi)存操作接口匹配;通過在嵌入式操作系統(tǒng)的文件系統(tǒng)API上映射嵌入式數(shù)據(jù)庫的文件系統(tǒng)API,解決了文件系統(tǒng)API匹配問題;通過將嵌入式數(shù)據(jù)庫的臨時文件重定向到預(yù)設(shè)的臨時目錄下,并在嵌入式數(shù)據(jù)庫使用結(jié)束后刪除預(yù)設(shè)的臨時目錄下的臨時文件,解決了臨時文件的處理問題;通過將嵌入式數(shù)據(jù)庫的多任務(wù)功能接口失效,解決了單任務(wù)/多任務(wù)的問題,從而實現(xiàn)了以較低的成本在嵌入式操作系統(tǒng)中提供數(shù)據(jù)庫功能。同時,也縮短了在嵌入式操作系統(tǒng)中開發(fā)應(yīng)用軟件的周期。圖1為本發(fā)明在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法流程示意圖;圖2示出了本發(fā)明實施例中文件定位接口的實現(xiàn)流程示意圖;圖3示出了本發(fā)明實施例中刪除臨時目錄下的所有臨時文件的流程示意圖。具體實施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明作進(jìn)一步詳細(xì)說明。本發(fā)明的主要思想是分別從內(nèi)存操作接口匹配問題、內(nèi)存使用沖突問題、文件系統(tǒng)API匹配問題、臨時文件的處理問題、單任務(wù)/多任務(wù)問題的角度出發(fā),提出解決相應(yīng)問題的技術(shù)方案,從而將嵌入式數(shù)據(jù)庫移植到嵌入式操作.系統(tǒng),實現(xiàn)以較低的成本在嵌入式操作系統(tǒng)中提供數(shù)據(jù)庫功能。對應(yīng)于上述主要思想,本發(fā)明提供了一種如圖1所示的在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法,參見圖1,該方法包括步驟101:在嵌入式操作系統(tǒng)中移植一套與嵌入式數(shù)據(jù)庫匹配的內(nèi)存操作接口,所述移植的內(nèi)存操作接口的內(nèi)存操作方式與所述嵌入式操作系統(tǒng)的內(nèi)存操作方式不同;步驟102:在嵌入式操作系統(tǒng)的文件API上映射嵌入式數(shù)據(jù)庫的文件系統(tǒng)API;步驟103:將所述嵌入式數(shù)據(jù)庫的臨時文件重定向到預(yù)設(shè)的臨時目錄下,并在所述嵌入式數(shù)據(jù)庫使用結(jié)束后刪除所述預(yù)設(shè)的臨時目錄下的臨時文件;步驟104:將所述嵌入式數(shù)據(jù)庫的多任務(wù)功能接口失效。至此,結(jié)束本發(fā)明在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法。下面通過一個具體示例,說明本發(fā)明技術(shù)方案的具體實施方式。本示例主要闡述如何在德州儀器(TI)Locosto平臺上移植開源嵌入式數(shù)據(jù)庫SQlite3.3.6。TILocosto平臺是一款基于NucleusPlus1.15的嵌入式手機(jī)平臺?,F(xiàn)有的參考移植方案都是基于高級操作系統(tǒng)。在高級操作系統(tǒng)中,有完善的接口以及操作系統(tǒng)內(nèi)核本身對相關(guān)功能的有力支持,但是在嵌入式操作系統(tǒng)中,這些都不是現(xiàn)成的。下面從前面提到的移植的四個方面具體展開1、內(nèi)存操作4妄口匹配問題SQlite嵌入式數(shù)據(jù)庫關(guān)于內(nèi)存方面需要提供以下接口函數(shù)內(nèi)存分配(sqlite30sMalloc)、內(nèi)存重新分配(sqlite30sRealloc)、內(nèi)存釋放(sqlite30sFree)和分配大小(sqlite30sAllocationSize),加上SQlite源碼中需要的接口函數(shù)內(nèi)存分配(malloc)、內(nèi)存釋放(free)和內(nèi)存重新分配(realloc),共七個4妄口函tt。其中,sqlite30sAllocationSize接口用SQlite默認(rèn)提供的sqlite3GenericAllocationSize接口即可實現(xiàn)。malloc、free和realloc都是標(biāo)準(zhǔn)的C庫函數(shù),但是TI平臺并沒有提供,TI提供的內(nèi)存操作接口只能夠?qū)崿F(xiàn)malloc和free的功能,無法實現(xiàn)realloc功能。而現(xiàn)實SQlite的源代碼中有很多地方均需使用realloc函數(shù),因此,需要移植一套新的內(nèi)存操作接口以滿足對realloc的需求但同時不能影響TI平臺中原有內(nèi)存的使用。TI平臺釆用基于內(nèi)存池(POOL)的內(nèi)存操作方式,因此,所移植的新的內(nèi)存操作接口需要避免采用基于POOL的內(nèi)存操作方式。本示例中,解決辦法是移植釆用基于大數(shù)組方式而非內(nèi)存池POOL方式的內(nèi)存操作接口。大數(shù)組方式的內(nèi)存接口是指利用數(shù)組開辟一段非常大的內(nèi)存空間,所有內(nèi)存的獲取、釋放都是基于這段內(nèi)存空間,這樣就可以避免與內(nèi)存池方式操作同一塊內(nèi)存區(qū)域,保證原有使用內(nèi)存池方式的內(nèi)存操作接口的程序可以正常工作。具體的移植過程是將基于大數(shù)組方式的內(nèi)存分配、內(nèi)存重新分配和內(nèi)存釋》文三個接口封裝到三個統(tǒng)一4妻口當(dāng)中,如下面例子中的sqlite3BalMalloc、sqlite3BalRealloc和sqlite3BalFree,然后,在SQlite內(nèi)部進(jìn)行如下重新映射弁definemallocsqlite3BalMalloc#definefreesqlite3BalFree#definereallocsqlite3BalRealloc#definesqlite30sMallocsqlite3BalMalloc#definesqlite30sReallocsqlite3BalRealloc#definesqlite30sFreesqlite3BalFree#definesqlite30sAllocationSizesqlite3GenericAllocationSize2、文件系統(tǒng)API匹配問題文件系統(tǒng)API的移植主要是按照SQlite對每個文件操作接口的移植要求在TI參考的文件系統(tǒng)API上做映射。需要解決的問題主要包括1)系統(tǒng)輸入輸出接口(I/O,Input/Output)移植問題輸入輸出方法(IoMethod)中包含的接口是需要移植的、基于POSIX的文件系統(tǒng)*接口staticconstIoMethodsqlite3BalIoMethod=[balFileClose,〃文件關(guān)閉balOpenDirectory,〃打開目錄balFileRead,〃文件讀balFileWrite,〃寫balSeek,//文件定位balFileTruncate,〃文件截取balFlush,〃文件同步balSetFullSync,〃設(shè)置是否完全同步balFileHandle,〃獲耳又文件句柄balFileSize,〃文件大小balLock,〃文件鎖balUnlock,//文件解鎖balLockState,〃鎖狀態(tài)balCheckReservedLock,〃檢查預(yù)留鎖};其中,文件的打開、關(guān)閉,以及獲取文件句柄等接口直接進(jìn)行移植即可,需要注意的是文件讀寫接口。由于嵌入式文件系統(tǒng)讀取文件或?qū)懭胛募乃俣仁苤黝l的限制不能很快,因此,需要根據(jù)嵌入式操作系統(tǒng)的主頻大小設(shè)置段長上限,對嵌入式數(shù)據(jù)庫的文件讀寫接口的操作數(shù)據(jù)按照所設(shè)置的段長上限進(jìn)行分段處理。例如可以設(shè)置段長上限為512字節(jié)或1024字節(jié),當(dāng)文件讀寫接口的操作數(shù)據(jù)大于512字節(jié)或1024字節(jié)時,對所述數(shù)據(jù)進(jìn)行分段處理。其次,文件定位4妄口(balSeek)和文件截取4妄口(balFileTruncate)也需要進(jìn)行一些處理才能移植。由于TI的文件系統(tǒng)中不能定位一個比當(dāng)前文件大小大的位置,因此,本發(fā)明提出了一種修改文件定位接口的方案,經(jīng)修改后的文件定位接口的工作過程如下首先,根據(jù)所述文件定位接口中攜帶的位置參數(shù),然后,判斷當(dāng)前被操作文件的大小是否小于所述位置參數(shù),若小于,則分配(位置參數(shù)-當(dāng)前被操作文件大小)字節(jié)的內(nèi)存,定位到當(dāng)前被操作文件的結(jié)束位置,并將從所述結(jié)束位置開始的(位置參數(shù)-當(dāng)前被操作文件大小)字節(jié)的內(nèi)容寫入當(dāng)前被操作文件,釋放所述分配的內(nèi)存,從當(dāng)前被操作文件的開始處向后定位位置參數(shù)對應(yīng)的字節(jié)數(shù);若不小于,則從當(dāng)前被操作文件的開始處向后定位位置參數(shù)對應(yīng)的字節(jié)數(shù)。圖2示出了本發(fā)明實施例中文件定位接口的實現(xiàn)流程示意圖。參見圖2,該文件定位接口的實現(xiàn)過程包括步驟201:獲取當(dāng)前^L操作文件的大小,記為fs。步驟202:判斷文件定位接口中攜帶的位置參數(shù)(記為ft)是否大于當(dāng)前被操作文件的大小fs,若大于,則繼續(xù)執(zhí)行步驟203;否則,跳到步驟207。步驟203:分配(ft-fs)字節(jié)內(nèi)存,并將所述分配的內(nèi)存置零。本步驟中,若內(nèi)存分配失敗,則返回錯誤,并結(jié)束本方法。步驟204:定位到當(dāng)前被操作文件的結(jié)束位置。步驟205:將從所述結(jié)束位置開始的(ft-fs)字節(jié)的內(nèi)容寫入當(dāng)前被操作文件。步驟206:釋放步驟203所分配的內(nèi)存。步驟207:從當(dāng)前被操作文件的開始處向后定位ft大小,正確返回。至此,結(jié)束本實施例中文件定位4姿口的實現(xiàn)流程。對于文件截取函數(shù)的移植,可以按照如下步驟進(jìn)行第l步定位到當(dāng)前被操作文件的起始位置。第2步在所述起始位置調(diào)用TI平臺的文件系統(tǒng)API中的文件截取接口函數(shù),若調(diào)用成功則繼續(xù)執(zhí)行第3步;否則,跳到第4步。第3步返回調(diào)用結(jié)果,結(jié)束本流程。第4步定位到當(dāng)前被操作文件的結(jié)束位置,并返回錯誤,結(jié)束本流程。此外,由于本示例中使用的Flash是Nor-Flash,它們沒有緩存,而是直接寫入物理系統(tǒng)中,因此,上述balFlush、balSetFullSync等需要緩存數(shù)據(jù)的接口函數(shù)無需移植,直接將需要緩存數(shù)據(jù)的文件系統(tǒng)API失效即可。將API失效的方法可以是在該API函數(shù)中增加直接返回成功的代碼。同樣地,對于balLock、balUnlock、balLockState和balCheckReservedLock這四個針對多任務(wù)的文件系統(tǒng)API,由于TI平臺是基于單任務(wù)的操作系統(tǒng),因此,直接將其失效即可。2)SQlite文件操作接口移植問題在SQlite中存在一些非標(biāo)準(zhǔn)的文件系統(tǒng)操作接口。其中,以可讀寫方式打開文件接口和以只讀方式打開文件接口可以用傳入不同的mode值來移植,但是TI本身的文件系統(tǒng)不支持互斥打開,因此,對于SQlite中的文件互斥打開接口,需要在該文件互斥打開接口的開始執(zhí)行處增加如下操作第1步根據(jù)該文件互斥打開接口中攜帶的文件名判斷該文件是否已存在,若已存在則繼續(xù)執(zhí)行第2步;否則,跳到第3步。第2步刪除該文件。第3步創(chuàng)建一個名字為所述文件名的文件,正確返回。對于判斷文件是否存在的接口函數(shù)(sqlite30sFileExists)、以及判斷文件是否可寫的接口函數(shù)(sqlite30sIsDirWritable)可以通過文件屬性(FileAttrib)接口函數(shù)來移植。對于同步目錄接口函數(shù)(sqlite30sSyncDirectory),由于本示例4吏用的是Nor-Flahs,因此,無需移植,直接返回成功即可。刪除接口函數(shù)(sqlite30sDelete)可以采用TI的文件系統(tǒng)API中的刪除文件接口進(jìn)行實現(xiàn)。按照上述方法進(jìn)行移植之后,可以得到如下所示的映射關(guān)系(映射關(guān)系中,右邊是最終被映射的移植完的函數(shù))弁definesqlite30sOpenReadWritesqlite3BalOpenReadWrite弁definesqlite30sOpenExclusivesqlite3BalOpenExclusive弁definesqlite30sOpenReadOnlysqlite3BalOpenReadOnly弁definesqlite30sDeletesqlite3BalDelete弁definesqlite30sFileExistssqlite3BalFileExists#definesqlite30sFullPathnamesqlite3BalFullPathname弁definesqlite30sIsDirWritablesqlite3BalIsDirWritable弁definesqlite30sSyncDirectorysqlite3BalSyncDirectory3、臨時文件的處理問題SQlite在運行過程中將產(chǎn)生臨時文件,這些臨時文件通常置于TI系統(tǒng)根目錄的tmp目錄下。對于高級操作系統(tǒng)來說,這些臨時目錄下的文件將在使用它的應(yīng)用程序運行結(jié)束后由系統(tǒng)自動刪除,但是,Nucleus中這些刪除操作系統(tǒng)不能自動完成。為此,需要解決以下兩個問題1)將SQlite使用的臨時文件重定向到某個預(yù)先生成的臨時目錄下。本示例中,所述預(yù)先生成的臨時目錄命名為/tmp。2)在SQlite使用結(jié)束后,刪除臨時目錄中所有的臨時文件。針對上述問題1),需要修改sqlite30sTempFileName對應(yīng)的映射后的函數(shù),將/tmp目錄作為其工作的主目錄。具體的移植流程包括第1步判斷/tmp目錄是否存在,如果不存在,則繼續(xù)執(zhí)行第2步;否則,跳到第3步。第2步調(diào)用文件系統(tǒng)創(chuàng)建目錄的函數(shù)創(chuàng)建/tmp目錄,若創(chuàng)建失敗,則錯誤返回,若創(chuàng)建成功,則繼續(xù)執(zhí)行第3步。第3步調(diào)用sqlite3Randomness為SQlite生成隨機(jī)函數(shù)名,并返回文件名。所述返回的文件名應(yīng)該是包含臨時目錄名的全路徑名。針對上述問題2),需要開發(fā)一個專用于刪除臨時目錄下的所有臨時文件的函數(shù)。圖3示出了本發(fā)明實施例中刪除臨時目錄下的所有臨時文件的流程示意圖。參見圖3,該流程包括步驟301:判斷/tmp目錄是否存在,若存在,則繼續(xù)執(zhí)行步驟302;否則,返回錯誤,并結(jié)束本流程。步驟302:打開/tmp目錄,若成功打開,則繼續(xù)執(zhí)行步驟303;否則,返回錯誤,并結(jié)束本流程。步驟303:申請分配一段內(nèi)存buffer,用于存放文件名。例如可以申請256字節(jié)的內(nèi)存。在步驟303之后,循環(huán)執(zhí)行步驟304307的操作,直至跳出循環(huán)步驟304:調(diào)用讀目錄函數(shù),將讀目錄函數(shù)返回的文件名寫入buffer,并判斷寫入是否成功,若成功,則繼續(xù)執(zhí)行步驟305,否則,跳出所述循環(huán),跳到步驟308。步驟305:判斷當(dāng)前目錄是否為根目錄,即判斷當(dāng)前目錄是否為"."或目錄,若是,則跳到步驟304;否則,繼續(xù)執(zhí)行步驟306。步驟306:在buffer中插入所讀到的目錄名。步驟307:刪除buffer中對應(yīng)為全路徑名的文件。步驟308:關(guān)閉/tmp目錄。步驟309:釋》文步驟303所分配的內(nèi)存,并正確返回,結(jié)束本流程。圖3所示流程可以在SQlite的關(guān)閉函it(sqlite3—close)中調(diào)用,也可以在應(yīng)用程序退出時調(diào)用。4、單任務(wù)/多任務(wù)的問題SQlite3.3.6默認(rèn)支持多任務(wù)。SQlite3.3.6中的許多多任務(wù)接口都是直接調(diào)用高級操作系統(tǒng)中已經(jīng)存在的接口,例如保護(hù)、回復(fù)任務(wù)或線程相關(guān)的數(shù)據(jù)、鎖機(jī)制等;然而,Nucleus上并未提供這些接口。為此,有兩種解決方案,要么實現(xiàn)這些高級操作系統(tǒng)提供的接口,要么將SQlite改成基于單任務(wù)的。考慮到Nucleus中,單任務(wù)即可滿足實際應(yīng)用的需要,因此,本示例選擇后者。具體的實現(xiàn)過程包括第1步將SQlite中的File結(jié)構(gòu)精簡為structbalFile{IoMethodconst*pMethod;/*Mustbefirst*/uint32h;/*Handleforaccessingthefile*/unsignedcharlocktype;/*Typeoflockcurrentlyheldonthisfile*/shortsharedLockByte;/*Randomlychosenbyteusedasasharedlock*/bLocklocal;/*LocksobtainedbythisinstanceofbalFile*/};第2步將對應(yīng)于多任務(wù)的文件系統(tǒng)API全部失效。具體地,將創(chuàng)建鎖(CreateLock)、銷毀鎖(DestroyLock)、加查預(yù)留鎖(CheckReservedLock)、鎖(Lock)、解鎖(UnLock)、鎖文件(LockFile)和解鎖文件(UnLockFile)這七個接口中的功能性代碼全部刪除,并直接返回成功。鎖狀態(tài)(LockState)4妻口函數(shù)無需^f務(wù)改,鎖文件(LockFileEx)函數(shù)可以去掉。由上述技術(shù)方案可見,本發(fā)明提供的在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功13能的方法,通過在嵌入式操作系統(tǒng)中移植一套與該嵌入式操作系統(tǒng)的內(nèi)存操作方式不同的內(nèi)存操作接口,解決了嵌入式數(shù)據(jù)庫移植過程中的內(nèi)存操作接口匹配;通過在嵌入式#:作系統(tǒng)的文件系統(tǒng)API上映射嵌入式tt據(jù)庫的文件系統(tǒng)API,解決了文件系統(tǒng)API匹配問題;通過將嵌入式數(shù)據(jù)庫的臨時文件重定向到預(yù)設(shè)的臨時目錄下,并在嵌入式數(shù)據(jù)庫使用結(jié)束后刪除預(yù)設(shè)的臨時目錄下的臨時文件,解決了臨時文件的處理問題;通過將嵌入式數(shù)據(jù)庫的多任務(wù)功能接口失效,解決了單任務(wù)/多任務(wù)的問題,從而實現(xiàn)了以較低的成本在嵌入式操作系統(tǒng)中提供數(shù)據(jù)庫功能。同時,也縮短了在嵌入式操作系統(tǒng)中開發(fā)應(yīng)用軟件的周期。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1、一種在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法,其特征在于,包括A、在嵌入式操作系統(tǒng)中移植一套與嵌入式數(shù)據(jù)庫匹配的內(nèi)存操作接口,所述移植的內(nèi)存操作接口的內(nèi)存操作方式與所述嵌入式操作系統(tǒng)的內(nèi)存操作方式不同;B、在嵌入式操作系統(tǒng)的文件系統(tǒng)應(yīng)用編程接口API上映射嵌入式數(shù)據(jù)庫的文件系統(tǒng)API;C、將所述嵌入式數(shù)據(jù)庫的臨時文件重定向到預(yù)設(shè)的臨時目錄下,并在所述嵌入式數(shù)據(jù)庫使用結(jié)束后刪除所述預(yù)設(shè)的臨時目錄下的臨時文件;D、將所述嵌入式數(shù)據(jù)庫的多任務(wù)功能接口失效。2、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述嵌入式操作系統(tǒng)的內(nèi)存才喿作方式為基于內(nèi)存池的內(nèi)存操作方式;所述移植的內(nèi)存操作接口的內(nèi)存操作方式為基于大數(shù)組的內(nèi)存操作方式。3、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述嵌入式數(shù)據(jù)庫的文件系統(tǒng)API包括文件讀寫接口;所述步驟B包括根據(jù)所述嵌入式操作系統(tǒng)的主頻大小設(shè)置段長上限,對所述嵌入式數(shù)據(jù)庫的文件讀寫接口的操作數(shù)據(jù)按照所述段長上限進(jìn)行分段處理。4、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述嵌入式數(shù)據(jù)庫的文件系統(tǒng)API包括文件定位4妄口;所述步驟B還包括將所述文件定位接口修改為根據(jù)所述文件定位接口中攜帶的位置參數(shù),判斷當(dāng)前被操作文件的大小是否小于所述位置參數(shù),若小于,則分配(位置參數(shù)-當(dāng)前被操作文件大小)字節(jié)的內(nèi)存,定位到當(dāng)前被操作文件的結(jié)束位置,并將從所述結(jié)束位置開始的(位置參數(shù)-當(dāng)前被操作文件大小)字節(jié)的內(nèi)容寫入當(dāng)前被操作文件,釋放所述分配的內(nèi)存,從當(dāng)前被操作文件的開始處向后定位位置參數(shù)對應(yīng)的字節(jié)數(shù);若不小于,則從當(dāng)前被操作文件的開始處向后定位位置參數(shù)對應(yīng)的字節(jié)數(shù)。5、根據(jù)權(quán)利要求l所述的方法,其特征在于,所述嵌入式數(shù)據(jù)庫的文件系統(tǒng)API包括文件截取接口;所述步驟B還包括將所述文件截取接口修改為定位到當(dāng)前被操作文件的起始位置,在所述起始位置調(diào)用所述嵌入式操作系統(tǒng)的文件系統(tǒng)API中的文件截取接口,若調(diào)用成功則返回相應(yīng)的調(diào)用結(jié)果,否則,定位到當(dāng)前被操作文件的結(jié)束位置,并返回錯誤。6、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述嵌入式數(shù)據(jù)庫的文件系統(tǒng)API包括需要緩存數(shù)據(jù)的文件系統(tǒng)API;所述步驟B還包括將所述需要緩存數(shù)據(jù)的文件系統(tǒng)API失效。7、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述嵌入式數(shù)據(jù)庫的文件系統(tǒng)API包括對應(yīng)于多任務(wù)的文件系統(tǒng)API;所述步驟B還包括將所述對應(yīng)于多任務(wù)的文件系統(tǒng)API失效。8、才艮據(jù)權(quán)利要求1所述的方法,其特征在于,所述嵌入式數(shù)據(jù)庫的文件系統(tǒng)API包4舌文件互斥打開接口;所述步驟B還包括:在所述文件互斥打開接口的開始執(zhí)行處增加如下操作根據(jù)所述文件互斥打開接口中攜帶的文件名判斷該文件是否已存在,若已存在則刪除所述文件,并創(chuàng)建一個名字為所述文件名的文件;否則,創(chuàng)建一個名字為所述文件名的文件。9、根據(jù)權(quán)利要求1至8任一項所述的方法,其特征在于,所述嵌入式操作系統(tǒng)為Nucleus嵌入式4喿作系統(tǒng);所述嵌入式數(shù)據(jù)庫為SQlite嵌入式數(shù)據(jù)庫。全文摘要本發(fā)明公開了一種在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能的方法,包括A、在嵌入式操作系統(tǒng)中移植一套與嵌入式數(shù)據(jù)庫匹配的內(nèi)存操作接口,所述移植的內(nèi)存操作接口的內(nèi)存操作方式與所述嵌入式操作系統(tǒng)的內(nèi)存操作方式不同;B、在嵌入式操作系統(tǒng)的文件系統(tǒng)API上映射嵌入式數(shù)據(jù)庫的文件系統(tǒng)API;C、將所述嵌入式數(shù)據(jù)庫的臨時文件重定向到預(yù)設(shè)的臨時目錄下,并在所述嵌入式數(shù)據(jù)庫使用結(jié)束后刪除所述預(yù)設(shè)的臨時目錄下的臨時文件;D、將所述嵌入式數(shù)據(jù)庫的多任務(wù)功能接口失效。應(yīng)用本發(fā)明能夠以較低的成本在嵌入式操作系統(tǒng)中實現(xiàn)數(shù)據(jù)庫功能。文檔編號G06F17/30GK101685450SQ20081016711公開日2010年3月31日申請日期2008年9月27日優(yōu)先權(quán)日2008年9月27日發(fā)明者華丁,張中博,樊旭軍,陸波波申請人:比亞迪股份有限公司