一種基于共享內(nèi)存的數(shù)據(jù)存取方法及裝置制造方法
【專(zhuān)利摘要】本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種基于共享內(nèi)存的數(shù)據(jù)存取方法及裝置,該方法包括:第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū);第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令;第二處理器收到所述中斷指令后,判斷第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù),本發(fā)明通過(guò)將共享內(nèi)存區(qū)域分區(qū)的方法,使每個(gè)分區(qū)只對(duì)應(yīng)一個(gè)處理器的寫(xiě)數(shù)據(jù)和另一個(gè)處理器的讀數(shù)據(jù),避免了兩個(gè)處理器在同一區(qū)域?qū)憯?shù)據(jù)和讀數(shù)據(jù),解決了雙處理器之間的沖突問(wèn)題,有效提高了數(shù)據(jù)的存取速度,通過(guò)中斷指令進(jìn)行數(shù)據(jù)通知,提高了數(shù)據(jù)存取的實(shí)時(shí)性。
【專(zhuān)利說(shuō)明】一種基于共享內(nèi)存的數(shù)據(jù)存取方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種基于共享內(nèi)存的數(shù)據(jù)存取方法及裝置?!颈尘凹夹g(shù)】
[0002]現(xiàn)有的技術(shù)中,處理器間進(jìn)行數(shù)據(jù)交互的主要方法是串行通信模塊(UART,USB等),這種通信模式基本上能滿足大多應(yīng)用要求,但是在大數(shù)據(jù)量和時(shí)間要求高的應(yīng)用中無(wú)法滿足設(shè)計(jì)需求,而共享內(nèi)存技術(shù),是一種在多核處理器之間進(jìn)行數(shù)據(jù)交互的通信方式之一,使多核之間能夠協(xié)同完成某一特定的功能而設(shè)計(jì),存取數(shù)據(jù)快,實(shí)時(shí)性強(qiáng),但多核之間共享內(nèi)存數(shù)據(jù)存取是發(fā)生訪問(wèn)沖突是多數(shù)工程師軟件應(yīng)用開(kāi)發(fā)中的難題,現(xiàn)有的共享內(nèi)存數(shù)據(jù)交互技術(shù),沒(méi)有一套統(tǒng)一的方法,各軟件工程師在設(shè)計(jì)此類(lèi)應(yīng)用的時(shí)候,經(jīng)常出現(xiàn)存取數(shù)據(jù)錯(cuò)誤,內(nèi)存訪問(wèn)越界,嚴(yán)重的引起系統(tǒng)崩潰,通常的實(shí)現(xiàn)方法是:A、B處理器申請(qǐng)一塊共用的內(nèi)存作為數(shù)據(jù)交互緩沖區(qū),A處理器在該內(nèi)存區(qū)域內(nèi)存放新的數(shù)據(jù)并設(shè)置標(biāo)志C,B處理器檢測(cè)該內(nèi)存區(qū)域是否存在數(shù)據(jù),并試圖取走數(shù)據(jù)和修改標(biāo)志C,但這個(gè)時(shí)候如果A處理器又接收到新的數(shù)據(jù)需要放在該內(nèi)存區(qū)域,在B處理器還沒(méi)有修改標(biāo)志或取走數(shù)據(jù)時(shí),就造成了數(shù)據(jù)的讀寫(xiě)沖突,在實(shí)時(shí)性的要求上比較高,B處理器本應(yīng)該收到正確的兩包數(shù)據(jù),實(shí)際上它只取到了一包錯(cuò)誤的數(shù)據(jù),在現(xiàn)有方法中,處理器需要不斷檢測(cè)是否接收到新的數(shù)據(jù),使用頻率過(guò)高。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的在于提出一種基于共享內(nèi)存的數(shù)據(jù)存取方法及裝置,能夠提高數(shù)據(jù)存取的實(shí)時(shí)性、穩(wěn)定性和速度。
[0004]為達(dá)此目的,本發(fā)明采用以下技術(shù)方案:
[0005]一種基于共享內(nèi)存的數(shù)據(jù)存取方法,包括:
[0006]第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū),用以第一處理器向第二處理器發(fā)送數(shù)據(jù);
[0007]所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令;
[0008]所述第二處理器收到所述中斷指令后,判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù)。
[0009]其中,所述第一數(shù)據(jù)緩沖區(qū)包括讀數(shù)據(jù)指針區(qū)域、寫(xiě)數(shù)據(jù)指針區(qū)域、數(shù)據(jù)起始存放區(qū)域、保留區(qū)域、有效數(shù)據(jù)區(qū)域、無(wú)效數(shù)據(jù)區(qū)域和緩沖區(qū)結(jié)束地址。
[0010]其中,所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū)包括:
[0011]初始化所述讀數(shù)據(jù)指針區(qū)域和寫(xiě)數(shù)據(jù)指針區(qū)域,給讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針賦予相等的初始值;
[0012]將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域,并將包含所述需要發(fā)送的數(shù)據(jù)的數(shù)據(jù)包的首四個(gè)字節(jié)作為所述數(shù)據(jù)包的真實(shí)長(zhǎng)度;[0013]根據(jù)所述數(shù)據(jù)包的真實(shí)長(zhǎng)度修改所述寫(xiě)數(shù)據(jù)指針。
[0014]其中,所述判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù)具體為:
[0015]比較寫(xiě)數(shù)據(jù)指針是否等于讀數(shù)據(jù)指針,如果不相等,則說(shuō)明存在需要讀取的數(shù)據(jù)。
[0016]其中,讀取所述需要讀取的數(shù)據(jù)之后還包括:
[0017]第二處理器根據(jù)已被取走的數(shù)據(jù)的長(zhǎng)度,修改所述讀數(shù)據(jù)指針。
[0018]其中,將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域還包括:
[0019]當(dāng)所述有效數(shù)據(jù)區(qū)域的數(shù)據(jù)部分或全部被取走后,被取走數(shù)據(jù)的這部分區(qū)域?qū)⒆優(yōu)樽兓瘮?shù)據(jù)區(qū)域;
[0020]當(dāng)無(wú)效數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),將數(shù)據(jù)包內(nèi)未保存的余下數(shù)據(jù)保存在所述變化數(shù)據(jù)區(qū)域;
[0021]當(dāng)所述變化數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),加大所述第一數(shù)據(jù)緩沖區(qū)的空間和/或增大第一處理器發(fā)送數(shù)據(jù)的時(shí)間間隔。
[0022]其中,所述共享內(nèi)存區(qū)域還包括第二數(shù)據(jù)緩沖區(qū),所述第二數(shù)據(jù)緩沖區(qū)用于保存所述第二處理器向所述第一處理器發(fā)送的數(shù)據(jù)。
[0023]一種基于共享內(nèi)存的數(shù)據(jù)存取裝置,包括:
[0024]申請(qǐng)單元,用于第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū),用以第一處理器向第二處理器發(fā)送數(shù)據(jù);
[0025]保存單元,用于所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令;
[0026]讀取單元,用于所述第二處理器收到所述中斷指令后,判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù)。
[0027]其中,所述第一數(shù)據(jù)緩沖區(qū)包括讀數(shù)據(jù)指針區(qū)域、寫(xiě)數(shù)據(jù)指針區(qū)域、數(shù)據(jù)起始存放區(qū)域、保留區(qū)域、有效數(shù)據(jù)區(qū)域、無(wú)效數(shù)據(jù)區(qū)域和緩沖區(qū)結(jié)束地址。
[0028]其中,所述保存單元包括:
[0029]初始化單元,用于初始化所述讀數(shù)據(jù)指針區(qū)域和寫(xiě)數(shù)據(jù)指針區(qū)域,給讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針賦予相等的初始值;
[0030]保存定長(zhǎng)單元,用于將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域,并將包含所述需要發(fā)送的數(shù)據(jù)的數(shù)據(jù)包的首四個(gè)字節(jié)作為所述數(shù)據(jù)包的真實(shí)長(zhǎng)度;
[0031]修改指針單元,用于根據(jù)所述數(shù)據(jù)包的真實(shí)長(zhǎng)度修改所述寫(xiě)數(shù)據(jù)指針;
[0032]中斷單元,用于發(fā)送中斷指令。
[0033]其中,所述判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù)具體為:
[0034]比較寫(xiě)數(shù)據(jù)指針是否等于讀數(shù)據(jù)指針,如果不相等,則說(shuō)明存在需要讀取的數(shù)據(jù)。
[0035]其中,讀取所述需要讀取的數(shù)據(jù)之后還包括:
[0036]第二處理器根據(jù)已被取走的數(shù)據(jù)的長(zhǎng)度,修改所述讀數(shù)據(jù)指針。
[0037]其中,將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域還包括:
[0038]當(dāng)所述有效數(shù)據(jù)區(qū)域的數(shù)據(jù)部分或全部被取走后,被取走數(shù)據(jù)的這部分區(qū)域?qū)⒆優(yōu)樽兓瘮?shù)據(jù)區(qū)域;
[0039]當(dāng)無(wú)效數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),將數(shù)據(jù)包內(nèi)未保存的余下數(shù)據(jù)保存在所述變化數(shù)據(jù)區(qū)域;
[0040]當(dāng)所述變化數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),加大所述第一數(shù)據(jù)緩沖區(qū)的空間和/或增大第一處理器發(fā)送數(shù)據(jù)的時(shí)間間隔。
[0041]其中,所述共享內(nèi)存區(qū)域還包括第二數(shù)據(jù)緩沖區(qū),所述第二數(shù)據(jù)緩沖區(qū)用于保存所述第二處理器向所述第一處理器發(fā)送的數(shù)據(jù)。
[0042]本發(fā)明的有益效果為:一種基于共享內(nèi)存的數(shù)據(jù)存取方法,包括:第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū),用以第一處理器向第二處理器發(fā)送數(shù)據(jù);所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令;所述第二處理器收到所述中斷指令后,判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù),本發(fā)明通過(guò)將共享內(nèi)存區(qū)域分區(qū)的方法,使每個(gè)分區(qū)只對(duì)應(yīng)一個(gè)處理器的寫(xiě)數(shù)據(jù)和另一個(gè)處理器的讀數(shù)據(jù),避免了兩個(gè)處理器在同一區(qū)域?qū)憯?shù)據(jù)和讀數(shù)據(jù),解決了雙處理器之間的沖突問(wèn)題,有效提高了數(shù)據(jù)的存取速度,通過(guò)中斷指令進(jìn)行數(shù)據(jù)通知,提高了數(shù)據(jù)存取的實(shí)時(shí)性。
[0043]進(jìn)一步地,以寫(xiě)數(shù)據(jù)的處理器修改寫(xiě)數(shù)據(jù)指針,以讀數(shù)據(jù)的處理器修改讀數(shù)據(jù)指針,有效提高了數(shù)據(jù)的穩(wěn)定性。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0044]圖1是本發(fā)明實(shí)施例一提供的基于共享內(nèi)存的數(shù)據(jù)存取方法流程圖。
[0045]圖2是本發(fā)明實(shí)施例一提供的共享內(nèi)存區(qū)域結(jié)構(gòu)示意圖。
[0046]圖3是本發(fā)明實(shí)施例一提供的第一數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)示意圖。
[0047]圖4是本發(fā)明實(shí)施例一提供的第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū)的方法流程圖。
[0048]圖5是本發(fā)明實(shí)施例二提供的基于共享內(nèi)存的數(shù)據(jù)存取裝置結(jié)構(gòu)示意圖。
[0049]圖6是本發(fā)明實(shí)施例二提供的保存單元結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0050]下面結(jié)合圖1-圖6并通過(guò)【具體實(shí)施方式】來(lái)進(jìn)一步說(shuō)明本發(fā)明的技術(shù)方案。
[0051]實(shí)施例一
[0052]圖1是本發(fā)明實(shí)施例一提供的基于共享內(nèi)存的數(shù)據(jù)存取方法流程圖。
[0053]一種基于共享內(nèi)存的數(shù)據(jù)存取方法,包括:
[0054]第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū),用以第一處理器向第二處理器發(fā)送數(shù)據(jù);
[0055]所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令;
[0056]所述第二處理器收到所述中斷指令后,判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù),若否,則不進(jìn)行讀取操作。
[0057]如圖2所示,在本實(shí)施例中,所述共享內(nèi)存區(qū)域還包括第二數(shù)據(jù)緩沖區(qū),所述第二數(shù)據(jù)緩沖區(qū)用于保存所述第二處理器向所述第一處理器發(fā)送的數(shù)據(jù)。
[0058]在本實(shí)施例中,若第二處理器向第一處理器發(fā)送數(shù)據(jù),也是一樣的數(shù)據(jù)存取方法,只是中斷指令改為由第二處理器向第一處理器發(fā)出,第二處理器在共享內(nèi)存區(qū)域內(nèi)申請(qǐng)的區(qū)域?yàn)榈诙?shù)據(jù)緩沖區(qū),該方法僅適用于兩個(gè)處理器之間的數(shù)據(jù)存取,故所述共享內(nèi)存區(qū)域也只由第一數(shù)據(jù)緩沖區(qū)和第二數(shù)據(jù)緩沖區(qū)組成。
[0059]在本實(shí)施例中,所述第一處理器為ARM處理器,所述第二處理器為DSP處理器。
[0060]在本實(shí)施例中,通過(guò)將共享內(nèi)存區(qū)域分區(qū)的方法,使每個(gè)分區(qū)只對(duì)應(yīng)一個(gè)處理器的寫(xiě)數(shù)據(jù)和另一個(gè)處理器的讀數(shù)據(jù),避免了兩個(gè)處理器在同一區(qū)域?qū)憯?shù)據(jù)和讀數(shù)據(jù),解決了雙處理器之間的沖突問(wèn)題,有效提高了數(shù)據(jù)的存取速度,通過(guò)中斷指令進(jìn)行數(shù)據(jù)通知,有效地提高代碼的執(zhí)行效率,提高了數(shù)據(jù)存取的實(shí)時(shí)性,而且以寫(xiě)數(shù)據(jù)的處理器修改寫(xiě)數(shù)據(jù)指針,以讀數(shù)據(jù)的處理器修改讀數(shù)據(jù)指針,有效提高了數(shù)據(jù)的穩(wěn)定性。
[0061]如圖3所示,在本實(shí)施例中,所述第一數(shù)據(jù)緩沖區(qū)包括讀數(shù)據(jù)指針區(qū)域、寫(xiě)數(shù)據(jù)指針區(qū)域、數(shù)據(jù)起始存放區(qū)域、保留區(qū)域、有效數(shù)據(jù)區(qū)域、無(wú)效數(shù)據(jù)區(qū)域和緩沖區(qū)結(jié)束地址。
[0062]如圖4所示,在本實(shí)施例中,所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū)包括:
[0063]初始化所述讀數(shù)據(jù)指針區(qū)域和寫(xiě)數(shù)據(jù)指針區(qū)域,給讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針賦予相等的初始值,在本實(shí)施例中,將讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針都賦予相等的初值0000 ;
[0064]將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域,并將包含所述需要發(fā)送的數(shù)據(jù)的數(shù)據(jù)包的首四個(gè)字節(jié)作為所述數(shù)據(jù)包的真實(shí)長(zhǎng)度,在本實(shí)施例中,假設(shè)一數(shù)據(jù)包的首四個(gè)字節(jié)為0111 ;
[0065]根據(jù)所述數(shù)據(jù)包的真實(shí)長(zhǎng)度修改所述寫(xiě)數(shù)據(jù)指針,則寫(xiě)數(shù)據(jù)指針相應(yīng)修改為0111。
[0066]在本實(shí)施例中,所述判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù)具體為:
[0067]比較寫(xiě)數(shù)據(jù)指針是否等于讀數(shù)據(jù)指針,如果不相等,則說(shuō)明存在需要讀取的數(shù)據(jù)。
[0068]在本實(shí)施例中,讀取所述需要讀取的數(shù)據(jù)之后還包括:
[0069]第二處理器根據(jù)已被取走的數(shù)據(jù)的長(zhǎng)度,修改所述讀數(shù)據(jù)指針,假設(shè)第二處理器取走的數(shù)據(jù)長(zhǎng)度為0011,則讀數(shù)據(jù)指針相應(yīng)修改為0011,而此時(shí)讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針仍然不相等,則表示所述第一數(shù)據(jù)緩沖區(qū)內(nèi)仍存在需要讀取的數(shù)據(jù)。
[0070]在本實(shí)施例中,將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域還包括:
[0071]當(dāng)所述有效數(shù)據(jù)區(qū)域的數(shù)據(jù)部分或全部被取走后,被取走數(shù)據(jù)的這部分區(qū)域?qū)⒆優(yōu)樽兓瘮?shù)據(jù)區(qū)域,在本實(shí)施例中,數(shù)據(jù)的讀取遵從先進(jìn)先出的原則,首先保存數(shù)據(jù)的有效數(shù)據(jù)區(qū)域部分會(huì)先變?yōu)樽兓瘮?shù)據(jù)區(qū)域;
[0072]當(dāng)無(wú)效數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),將數(shù)據(jù)包內(nèi)未保存的余下數(shù)據(jù)保存在所述變化數(shù)據(jù)區(qū)域,所述未保存的余下數(shù)據(jù)為除去保存在有效數(shù)據(jù)區(qū)域的數(shù)據(jù)之外的數(shù)據(jù)包內(nèi)的數(shù)據(jù);
[0073]當(dāng)所述變化數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),加大所述第一數(shù)據(jù)緩沖區(qū)的空間和/或增大第一處理器發(fā)送數(shù)據(jù)的時(shí)間間隔。[0074]在本實(shí)施例中,所述變化數(shù)據(jù)區(qū)域隨著數(shù)據(jù)的存取而變化,當(dāng)變化數(shù)據(jù)區(qū)域內(nèi)保存有數(shù)據(jù)時(shí),該區(qū)域即為有效數(shù)據(jù)區(qū)域,當(dāng)該區(qū)域內(nèi)的數(shù)據(jù)被取走后,該區(qū)域即變?yōu)闊o(wú)效數(shù)據(jù)區(qū)域,可以保存新的數(shù)據(jù)。
[0075]在本實(shí)施例中,因?yàn)楣蚕韮?nèi)存區(qū)域由第一數(shù)據(jù)緩沖區(qū)和第二數(shù)據(jù)緩沖區(qū)組成,當(dāng)加大所述第一數(shù)據(jù)緩沖區(qū)的空間時(shí),就要相應(yīng)的減少第二數(shù)據(jù)緩沖區(qū)的空間;而增大處理器發(fā)送數(shù)據(jù)的時(shí)間間隔,雖然會(huì)降低對(duì)數(shù)據(jù)緩沖區(qū)大小的要求,但也會(huì)降低數(shù)據(jù)的存取速度,在實(shí)際工作中,需要尋找一個(gè)兩者之間的平衡點(diǎn)。
[0076]實(shí)施例二
[0077]如圖5所示,是本發(fā)明實(shí)施例二提供的基于共享內(nèi)存的數(shù)據(jù)存取裝置結(jié)構(gòu)示意圖。
[0078]一種基于共享內(nèi)存的數(shù)據(jù)存取裝置,包括:
[0079]申請(qǐng)單元,用于第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū),用以第一處理器向第二處理器發(fā)送數(shù)據(jù);
[0080]保存單元,用于所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令;
[0081]讀取單元,用于所述第二處理器收到所述中斷指令后,判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù)。
[0082]在本實(shí)施例中,所述第一數(shù)據(jù)緩沖區(qū)包括讀數(shù)據(jù)指針區(qū)域、寫(xiě)數(shù)據(jù)指針區(qū)域、數(shù)據(jù)起始存放區(qū)域、保留區(qū)域、有效數(shù)據(jù)區(qū)域、無(wú)效數(shù)據(jù)區(qū)域和緩沖區(qū)結(jié)束地址。
[0083]如圖6所示,在本實(shí)施例中,所述保存單元包括:
[0084]初始化單元,用于初始化所述讀數(shù)據(jù)指針區(qū)域和寫(xiě)數(shù)據(jù)指針區(qū)域,給讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針賦予相等的初始值;
[0085]保存定長(zhǎng)單元,用于將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域,并將包含所述需要發(fā)送的數(shù)據(jù)的數(shù)據(jù)包的首四個(gè)字節(jié)作為所述數(shù)據(jù)包的真實(shí)長(zhǎng)度;
[0086]修改指針單元,用于根據(jù)所述數(shù)據(jù)包的真實(shí)長(zhǎng)度修改所述寫(xiě)數(shù)據(jù)指針;
[0087]中斷單元,用于發(fā)送中斷指令。
[0088]在本實(shí)施例中,所述判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù)具體為:
[0089]比較寫(xiě)數(shù)據(jù)指針是否等于讀數(shù)據(jù)指針,如果不相等,則說(shuō)明存在需要讀取的數(shù)據(jù)。
[0090]在本實(shí)施例中,讀取所述需要讀取的數(shù)據(jù)之后還包括:
[0091]第二處理器根據(jù)已被取走的數(shù)據(jù)的長(zhǎng)度,修改所述讀數(shù)據(jù)指針。
[0092]在本實(shí)施例中,將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域還包括:
[0093]當(dāng)所述有效數(shù)據(jù)區(qū)域的數(shù)據(jù)部分或全部被取走后,被取走數(shù)據(jù)的這部分區(qū)域?qū)⒆優(yōu)樽兓瘮?shù)據(jù)區(qū)域;
[0094]當(dāng)無(wú)效數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),將數(shù)據(jù)包內(nèi)未保存的余下數(shù)據(jù)保存在所述變化數(shù)據(jù)區(qū)域;
[0095]當(dāng)所述變化數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),加大所述第一數(shù)據(jù)緩沖區(qū)的空間和/或增大第一處理器發(fā)送數(shù)據(jù)的時(shí)間間隔。
[0096]在本實(shí)施例中,所述共享內(nèi)存區(qū)域還包括第二數(shù)據(jù)緩沖區(qū),所述第二數(shù)據(jù)緩沖區(qū)用于保存所述第二處理器向所述第一處理器發(fā)送的數(shù)據(jù)。
[0097]以上所述僅為本發(fā)明的【具體實(shí)施方式】,這些描述只是為了解釋本發(fā)明的原理,而不能以任何結(jié)構(gòu)解釋為對(duì)本發(fā)明保護(hù)范圍的限制?;诖颂幍慕忉?zhuān)绢I(lǐng)域的技術(shù)人員不需要付出創(chuàng)造性的勞動(dòng)即可聯(lián)想到本發(fā)明的其它具體實(shí)施方法,這些結(jié)構(gòu)都將落入本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種基于共享內(nèi)存的數(shù)據(jù)存取方法,其特征在于,包括: 第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū),用以第一處理器向第二處理器發(fā)送數(shù)據(jù); 所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令; 所述第二處理器收到所述中斷指令后,判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的一種基于共享內(nèi)存的數(shù)據(jù)存取方法,其特征在于,所述第一數(shù)據(jù)緩沖區(qū)包括讀數(shù)據(jù)指針區(qū)域、寫(xiě)數(shù)據(jù)指針區(qū)域、數(shù)據(jù)起始存放區(qū)域、保留區(qū)域、有效數(shù)據(jù)區(qū)域、無(wú)效數(shù)據(jù)區(qū)域和緩沖區(qū)結(jié)束地址。
3.根據(jù)權(quán)利要求2所述的一種基于共享內(nèi)存的數(shù)據(jù)存取方法,其特征在于,所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū)包括: 初始化所述讀數(shù)據(jù)指針區(qū)域和寫(xiě)數(shù)據(jù)指針區(qū)域,給讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針賦予相等的初始值; 將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域,并將包含所述需要發(fā)送的數(shù)據(jù)的數(shù)據(jù)包的首四個(gè)字節(jié)作為所述數(shù)據(jù)包的真實(shí)長(zhǎng)度; 根據(jù)所述數(shù)據(jù)包的真實(shí)長(zhǎng)度修改所述寫(xiě)數(shù)據(jù)指針。
4.根據(jù)權(quán)利要求3所述的一種基于共享內(nèi)存的數(shù)據(jù)存取方法,其特征在于,所述判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù)具體為: 比較寫(xiě)數(shù)據(jù)指針是否等于讀數(shù)據(jù)指針,如果不相等,則說(shuō)明存在需要讀取的數(shù)據(jù)。
5.根據(jù)權(quán)利要求3所述的一種基于共享內(nèi)存的數(shù)據(jù)存取方法,其特征在于,讀取所述需要讀取的數(shù)據(jù)之后還包括: 第二處理器根據(jù)已被取走的數(shù)據(jù)的長(zhǎng)度,修改所述讀數(shù)據(jù)指針。
6.根據(jù)權(quán)利要求3所述的一種基于共享內(nèi)存的數(shù)據(jù)存取方法,其特征在于,將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域還包括: 當(dāng)所述有效數(shù)據(jù)區(qū)域的數(shù)據(jù)部分或全部被取走后,被取走數(shù)據(jù)的這部分區(qū)域?qū)⒆優(yōu)樽兓瘮?shù)據(jù)區(qū)域; 當(dāng)無(wú)效數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),將數(shù)據(jù)包內(nèi)未保存的余下數(shù)據(jù)保存在所述變化數(shù)據(jù)區(qū)域; 當(dāng)所述變化數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),加大所述第一數(shù)據(jù)緩沖區(qū)的空間和/或增大第一處理器發(fā)送數(shù)據(jù)的時(shí)間間隔。
7.根據(jù)權(quán)利要求1所述的一種基于共享內(nèi)存的數(shù)據(jù)存取方法,其特征在于,所述共享內(nèi)存區(qū)域還包括第二數(shù)據(jù)緩沖區(qū),所述第二數(shù)據(jù)緩沖區(qū)用于保存所述第二處理器向所述第一處理器發(fā)送的數(shù)據(jù)。
8.一種基于共享內(nèi)存的數(shù)據(jù)存取裝置,其特征在于,包括: 申請(qǐng)單元,用于第一處理器向預(yù)先設(shè)定的共享內(nèi)存區(qū)域申請(qǐng)第一數(shù)據(jù)緩沖區(qū),用以第一處理器向第二處理器發(fā)送數(shù)據(jù); 保存單元,用于所述第一處理器將需要發(fā)送的數(shù)據(jù)保存在所述第一數(shù)據(jù)緩沖區(qū),并向第二處理器發(fā)送中斷指令;讀取單元,用于所述第二處理器收到所述中斷指令后,判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù),若是,則讀取所述需要讀取的數(shù)據(jù)。
9.根據(jù)權(quán)利要求8所述的一種基于共享內(nèi)存的數(shù)據(jù)存取裝置,其特征在于,所述第一數(shù)據(jù)緩沖區(qū)包括讀數(shù)據(jù)指針區(qū)域、寫(xiě)數(shù)據(jù)指針區(qū)域、數(shù)據(jù)起始存放區(qū)域、保留區(qū)域、有效數(shù)據(jù)區(qū)域、無(wú)效數(shù)據(jù)區(qū)域和緩沖區(qū)結(jié)束地址。
10.根據(jù)權(quán)利要求9所述的一種基于共享內(nèi)存的數(shù)據(jù)存取裝置,其特征在于,所述保存單元包括: 初始化單元,用于初始化所述讀數(shù)據(jù)指針區(qū)域和寫(xiě)數(shù)據(jù)指針區(qū)域,給讀數(shù)據(jù)指針和寫(xiě)數(shù)據(jù)指針賦予相等的初始值; 保存定長(zhǎng)單元,用于將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域,并將包含所述需要發(fā)送的數(shù)據(jù)的數(shù)據(jù)包的首四個(gè)字節(jié)作為所述數(shù)據(jù)包的真實(shí)長(zhǎng)度;修改指針單元,用于根據(jù)所述數(shù)據(jù)包的真實(shí)長(zhǎng)度修改所述寫(xiě)數(shù)據(jù)指針; 中斷單元,用于發(fā)送中斷指令; 所述判斷所述第一數(shù)據(jù)緩沖區(qū)內(nèi)是否存在需要讀取的數(shù)據(jù)具體為: 比較寫(xiě)數(shù)據(jù)指針 是否等于讀數(shù)據(jù)指針,如果不相等,則說(shuō)明存在需要讀取的數(shù)據(jù); 讀取所述需要讀取的數(shù)據(jù)之后還包括: 第二處理器根據(jù)已被取走的數(shù)據(jù)的長(zhǎng)度,修改所述讀數(shù)據(jù)指針; 將所述需要發(fā)送的數(shù)據(jù)保存在所述數(shù)據(jù)起始存放區(qū)域及有效數(shù)據(jù)區(qū)域還包括: 當(dāng)所述有效數(shù)據(jù)區(qū)域的數(shù)據(jù)部分或全部被取走后,被取走數(shù)據(jù)的這部分區(qū)域?qū)⒆優(yōu)樽兓瘮?shù)據(jù)區(qū)域; 當(dāng)無(wú)效數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),將數(shù)據(jù)包內(nèi)未保存的余下數(shù)據(jù)保存在所述變化數(shù)據(jù)區(qū)域; 當(dāng)所述變化數(shù)據(jù)區(qū)域不足以保存所述數(shù)據(jù)包時(shí),加大所述第一數(shù)據(jù)緩沖區(qū)的空間和/或增大第一處理器發(fā)送數(shù)據(jù)的時(shí)間間隔; 所述共享內(nèi)存區(qū)域還包括第二數(shù)據(jù)緩沖區(qū),所述第二數(shù)據(jù)緩沖區(qū)用于保存所述第二處理器向所述第一處理器發(fā)送的數(shù)據(jù)。
【文檔編號(hào)】G06F9/455GK103559079SQ201310574601
【公開(kāi)日】2014年2月5日 申請(qǐng)日期:2013年11月15日 優(yōu)先權(quán)日:2013年11月15日
【發(fā)明者】李紅京, 余世均 申請(qǐng)人:深圳市道通科技有限公司