国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于共享內(nèi)存的數(shù)據(jù)存取方法及裝置制造方法

      文檔序號(hào):6519239閱讀:216來(lái)源:國(guó)知局
      一種基于共享內(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)人:深圳市道通科技有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1