Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91精品国产视频,国产又黄又爽又色视频观看免费 ,中文字幕一区二区三区在线观看

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          MySQL采用哪種數(shù)據(jù)模型_數(shù)據(jù)庫(kù)的三種數(shù)據(jù)模型分別是什么

          e75b95fbd8475083eb94f117a980d5da.png

          層次模型

          層次模型是數(shù)據(jù)庫(kù)系統(tǒng)最早使用的一種模型,它的數(shù)據(jù)結(jié)構(gòu)是一棵“有向樹(shù)”。根結(jié)點(diǎn)在最上端,層次最高,子結(jié)點(diǎn)在下,逐層排列。層次模型的特征是:

          1、有且只有一個(gè)根結(jié)點(diǎn);

          2、其他結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn)。

          網(wǎng)狀模型

          數(shù)據(jù)庫(kù)系統(tǒng)模型有三個(gè)_模型庫(kù)數(shù)據(jù)系統(tǒng)有哪些_模型是數(shù)據(jù)庫(kù)

          網(wǎng)狀模型以網(wǎng)狀結(jié)構(gòu)表示實(shí)體與實(shí)體之間的聯(lián)系。網(wǎng)中的每一個(gè)結(jié)點(diǎn)代表一個(gè)記錄類(lèi)型,聯(lián)系用鏈接指針來(lái)實(shí)現(xiàn)。網(wǎng)狀模型可以表示多個(gè)從屬關(guān)系的聯(lián)系,也可以表示數(shù)據(jù)間的交叉關(guān)系,即數(shù)據(jù)間的橫向關(guān)系與縱向關(guān)系,它是層次模型的擴(kuò)展。網(wǎng)狀模型可以方便地表示各種類(lèi)型的聯(lián)系,但結(jié)構(gòu)復(fù)雜,實(shí)現(xiàn)的算法難以規(guī)范化。其特征是:

          1、允許結(jié)點(diǎn)有多于一個(gè)父結(jié)點(diǎn);

          2、可以有一個(gè)以上的結(jié)點(diǎn)沒(méi)有父結(jié)點(diǎn)。

          關(guān)系模型

          關(guān)系模型以二維表結(jié)構(gòu)來(lái)表示實(shí)體與實(shí)體之間的聯(lián)系,它是以關(guān)系數(shù)學(xué)理論為基礎(chǔ)的。關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)是一個(gè)“二維表框架”組成的集合。每個(gè)二維表又可稱(chēng)為關(guān)系。在關(guān)系模型中,操作的對(duì)象和結(jié)果都是二維表。關(guān)系模型是目前最流行的數(shù)據(jù)庫(kù)模型。支持關(guān)系模型的數(shù)據(jù)庫(kù)管理系統(tǒng)稱(chēng)為關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),Access就是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。

          數(shù)據(jù)庫(kù)系統(tǒng)模型有三個(gè)_模型庫(kù)數(shù)據(jù)系統(tǒng)有哪些_模型是數(shù)據(jù)庫(kù)

          特征:

          1、描述的一致性,不僅用關(guān)系描述實(shí)體本身,而且也用關(guān)系描述實(shí)體之間的聯(lián)系;

          2、可直接表示多對(duì)多的聯(lián)系;

          3、關(guān)系必須是規(guī)范化的關(guān)系,即每個(gè)屬性是不可分的數(shù)據(jù)項(xiàng),不許表中有表;

          4、關(guān)系模型是建立在數(shù)學(xué)概念基礎(chǔ)上的,有較強(qiáng)的理論依據(jù)。

          嵌入式中5個(gè)難查的軟件問(wèn)題

          點(diǎn)擊上方“嵌入式情報(bào)局”,選擇“置頂/星標(biāo)”

          嵌入式情報(bào),第一時(shí)間送達(dá)

          在嵌入式開(kāi)發(fā)軟件中查找和消除潛在的錯(cuò)誤是一項(xiàng)艱巨的任務(wù)。

          通常需要英勇的努力和昂貴的工具才能從觀察到的崩潰,死機(jī)或其他計(jì)劃外的運(yùn)行時(shí)行為追溯到根本原因。

          在最壞的情況下,根本原因會(huì)破壞代碼或數(shù)據(jù),使系統(tǒng)看起來(lái)仍然可以正常工作或至少在一段時(shí)間內(nèi)仍能正常工作。

          工程師常常放棄嘗試發(fā)現(xiàn)不常見(jiàn)異常的原因,這些異常在實(shí)驗(yàn)室中不易再現(xiàn),將其視為用戶(hù)錯(cuò)誤或“小故障”。

          然而,機(jī)器中的這些鬼魂仍然存在。這是難以重現(xiàn)錯(cuò)誤的最常見(jiàn)根本原因指南。每當(dāng)您閱讀固件源代碼時(shí),請(qǐng)查找以下五個(gè)主要錯(cuò)誤。并遵循建議的最佳做法,以防止它們?cè)俅伟l(fā)生在您身上。

          1、競(jìng)爭(zhēng)條件

          競(jìng)爭(zhēng)條件是指兩個(gè)或多個(gè)執(zhí)行線(xiàn)程(可以是RTOS任務(wù)或main() 和中斷處理程序)的組合結(jié)果根據(jù)交織指令的精確順序而變化的任何情況。每個(gè)都在處理器上執(zhí)行。

          例如,假設(shè)您有兩個(gè)執(zhí)行線(xiàn)程,其中一個(gè)規(guī)則地遞增一個(gè)全局變量( + = 1; ),而另一個(gè)偶然將其歸零( = 0; )。如果不能始終以原子方式(即,在單個(gè)指令周期內(nèi))執(zhí)行增量,則存在競(jìng)爭(zhēng)條件。

          如圖1所示,將任務(wù)視為汽車(chē)接近同一十字路口。計(jì)數(shù)器變量的兩次更新之間的沖突可能永遠(yuǎn)不會(huì)發(fā)生,或者很少會(huì)發(fā)生。但是,這樣做的時(shí)候,計(jì)數(shù)器實(shí)際上不會(huì)在內(nèi)存中清零。其值至少在下一個(gè)清零之前是損壞的。這種影響可能會(huì)對(duì)系統(tǒng)造成嚴(yán)重后果,盡管可能要等到實(shí)際碰撞后很長(zhǎng)一段時(shí)間才會(huì)出現(xiàn)。

          意外的數(shù)據(jù)包讀取錯(cuò)誤_讀取意外錯(cuò)誤包數(shù)據(jù)的軟件_讀取錯(cuò)誤數(shù)據(jù)或已損壞

          最佳實(shí)踐:可以通過(guò)必須以適當(dāng)?shù)膿屜认拗菩袨閷?duì)原子地執(zhí)行代碼的關(guān)鍵部分,來(lái)避免競(jìng)爭(zhēng)條件。為防止涉及ISR的爭(zhēng)用情況,必須在另一個(gè)代碼的關(guān)鍵部分持續(xù)時(shí)間內(nèi)至少禁止一個(gè)中斷信號(hào)。

          對(duì)于RTOS任務(wù)之間的爭(zhēng)用,最佳實(shí)踐是創(chuàng)建特定于該共享庫(kù)的互斥體,每個(gè)互斥體在進(jìn)入關(guān)鍵部分之前必須獲取該互斥體。請(qǐng)注意,依靠特定CPU的功能來(lái)確保原子性不是一個(gè)好主意,因?yàn)檫@只能防止?fàn)幱们闆r發(fā)生,直到更換編譯器或CPU。

          共享數(shù)據(jù)和搶占的隨機(jī)時(shí)間是造成競(jìng)爭(zhēng)狀況的元兇。但是錯(cuò)誤可能并不總是會(huì)發(fā)生,這使得從觀察到的癥狀到根本原因的種族狀況跟蹤變得異常困難。因此,保持警惕以保護(hù)所有共享對(duì)象非常重要。每個(gè)共享對(duì)象都是一個(gè)等待發(fā)生的事故。

          最佳實(shí)踐:命名所有潛在共享的對(duì)象(包括全局變量,堆對(duì)象或外圍寄存器和指向該對(duì)象的指針),以使風(fēng)險(xiǎn)對(duì)于所有將來(lái)的代碼閱讀者而言都是顯而易見(jiàn)的;在Netrino嵌入式C編碼標(biāo)準(zhǔn)提倡使用“的G_ 為此,”前綴。查找所有可能共享的對(duì)象將是爭(zhēng)用條件代碼審核的第一步。

          2、不可重入功能

          從技術(shù)上講,不可重入功能的問(wèn)題是爭(zhēng)用狀況問(wèn)題的特例。而且,由于相關(guān)原因,由不可重入函數(shù)引起的運(yùn)行時(shí)錯(cuò)誤通常不會(huì)以可重現(xiàn)的方式發(fā)生-使它們同樣難以調(diào)試。

          不幸的是,非重入功能也比其他類(lèi)型的競(jìng)爭(zhēng)條件更難在代碼審查中發(fā)現(xiàn)。

          圖2 顯示了一個(gè)典型的場(chǎng)景。在這里,要搶占的軟件實(shí)體也是RTOS任務(wù)。但是,它們不是通過(guò)直接調(diào)用共享對(duì)象而是通過(guò)函數(shù)調(diào)用間接操作。

          例如,假設(shè)任務(wù)A調(diào)用套接字層協(xié)議功能,該套接字功能調(diào)用TCP層協(xié)議功能,調(diào)用IP層協(xié)議功能,該功能調(diào)用以太網(wǎng)驅(qū)動(dòng)程序。為了使系統(tǒng)可靠地運(yùn)行,所有這些功能都必須是可重入的。

          讀取意外錯(cuò)誤包數(shù)據(jù)的軟件_意外的數(shù)據(jù)包讀取錯(cuò)誤_讀取錯(cuò)誤數(shù)據(jù)或已損壞

          意外的數(shù)據(jù)包讀取錯(cuò)誤_讀取意外錯(cuò)誤包數(shù)據(jù)的軟件_讀取錯(cuò)誤數(shù)據(jù)或已損壞

          但是,以太網(wǎng)驅(qū)動(dòng)程序的所有功能都以以太網(wǎng)控制器芯片的寄存器形式操作相同的全局對(duì)象。如果在這些寄存器操作期間允許搶占,則任務(wù)B可以在將數(shù)據(jù)包A排隊(duì)之后但在發(fā)送開(kāi)始之前搶占任務(wù)A。

          然后,任務(wù)B調(diào)用套接字層功能,該套接字層功能調(diào)用TCP層功能,再調(diào)用IP層功能,該功能調(diào)用以太網(wǎng)驅(qū)動(dòng)程序,該隊(duì)列將數(shù)據(jù)包B排隊(duì)并傳輸。當(dāng)CPU的控制權(quán)返回到任務(wù)A時(shí),它將請(qǐng)求傳輸。根據(jù)以太網(wǎng)控制器芯片的設(shè)計(jì),這可能會(huì)重傳數(shù)據(jù)包B或產(chǎn)生錯(cuò)誤。數(shù)據(jù)包A丟失,并且不會(huì)發(fā)送到網(wǎng)絡(luò)上。

          為了可以同時(shí)從多個(gè)RTOS任務(wù)中調(diào)用此以太網(wǎng)驅(qū)動(dòng)程序的功能,必須使它們可重入。如果它們每個(gè)僅使用堆棧變量,則無(wú)事可做。

          因此,C函數(shù)最常見(jiàn)的樣式固有地是可重入的。但是,除非精心設(shè)計(jì),否則驅(qū)動(dòng)程序和某些其他功能將是不可重入的。

          使函數(shù)可重入的關(guān)鍵是暫停對(duì)外圍設(shè)備寄存器,包括靜態(tài)局部變量,持久堆對(duì)象和共享內(nèi)存區(qū)域在內(nèi)的全局變量的所有訪問(wèn)的搶占。這可以通過(guò)禁用一個(gè)或多個(gè)中斷或獲取并釋放互斥鎖來(lái)完成。問(wèn)題的細(xì)節(jié)決定了最佳解決方案。

          最佳實(shí)踐:在每個(gè)庫(kù)或驅(qū)動(dòng)程序模塊中創(chuàng)建和隱藏一個(gè)互斥量,這些互斥量不是本質(zhì)上可重入的。使獲取此互斥鎖成為操作整個(gè)模塊中使用的任何持久數(shù)據(jù)或共享寄存器的前提。

          例如,相同的互斥鎖可用于防止涉及以太網(wǎng)控制器寄存器和全局或靜態(tài)本地?cái)?shù)據(jù)包計(jì)數(shù)器的競(jìng)爭(zhēng)情況。在訪問(wèn)這些數(shù)據(jù)之前,模塊中訪問(wèn)此數(shù)據(jù)的所有功能必須遵循協(xié)議以獲取互斥量。

          注意非重入功能可能會(huì)作為第三方中間件,舊版代碼或設(shè)備驅(qū)動(dòng)程序的一部分進(jìn)入您的代碼庫(kù)。

          令人不安的是,不可重入函數(shù)甚至可能是編譯器隨附的標(biāo)準(zhǔn)C或C ++庫(kù)的一部分。如果您使用GNU編譯器來(lái)構(gòu)建基于RTOS的應(yīng)用程序,請(qǐng)注意您應(yīng)該使用可重入的“ newlib”標(biāo)準(zhǔn)C庫(kù),而不是默認(rèn)庫(kù)。

          3、缺少關(guān)鍵字

          如果未使用C的 關(guān)鍵字標(biāo)記某些類(lèi)型的變量,則可能導(dǎo)致僅在將編譯器的優(yōu)化器設(shè)置為低級(jí)或禁用編譯器才能正常工作的系統(tǒng)中出現(xiàn)許多意外行為。該揮發(fā)性預(yù)選賽期間變量聲明,其中它的目的是為了防止優(yōu)化的讀取和變量的寫(xiě)入使用。

          例如,如果您編寫(xiě)清單1所示的代碼,則優(yōu)化器可能會(huì)通過(guò)消除第一行來(lái)嘗試使程序更快速,更小,從而損害患者的健康。但是,如果將g_alarm 聲明為 ,那么將不允許這種優(yōu)化。

          讀取意外錯(cuò)誤包數(shù)據(jù)的軟件_意外的數(shù)據(jù)包讀取錯(cuò)誤_讀取錯(cuò)誤數(shù)據(jù)或已損壞

          最佳實(shí)踐:將揮發(fā) 的關(guān)鍵字應(yīng)該用于聲明每個(gè):

          由ISR和代碼的任何其他部分訪問(wèn)的全局變量,

          由兩個(gè)或多個(gè)RTOS任務(wù)訪問(wèn)的全局變量(即使已阻止了這些訪問(wèn)中的競(jìng)爭(zhēng)條件),

          指向內(nèi)存映射外設(shè)寄存器(或一組或一組寄存器)的指針,以及

          延遲循環(huán)計(jì)數(shù)器。

          請(qǐng)注意,除了確保所有讀寫(xiě)操作都針對(duì)給定變量之外,使用 還通過(guò)添加其他“序列點(diǎn)”來(lái)限制編譯器。除易失性變量的讀取或?qū)懭胫獾钠渌资栽L問(wèn)必須在該訪問(wèn)之前執(zhí)行。

          4、堆棧溢出

          每個(gè)程序員都知道堆棧溢出是很不好的事情。但是,每次堆棧溢出的影響都各不相同。損壞的性質(zhì)和不當(dāng)行為的時(shí)機(jī)完全取決于破壞哪些數(shù)據(jù)或指令以及如何使用它們。重要的是,從堆棧溢出到它對(duì)系統(tǒng)的負(fù)面影響之間的時(shí)間長(zhǎng)短取決于使用阻塞位之前的時(shí)間。

          意外的數(shù)據(jù)包讀取錯(cuò)誤_讀取意外錯(cuò)誤包數(shù)據(jù)的軟件_讀取錯(cuò)誤數(shù)據(jù)或已損壞

          不幸的是,堆棧溢出比臺(tái)式計(jì)算機(jī)更容易遭受嵌入式系統(tǒng)的困擾。這有幾個(gè)原因,其中包括:

          (1)嵌入式系統(tǒng)通常只能占用較少的RAM;

          (2)通常沒(méi)有虛擬內(nèi)存可回退(因?yàn)闆](méi)有磁盤(pán));

          (3)基于RTOS任務(wù)的固件設(shè)計(jì)利用了多個(gè)堆棧(每個(gè)任務(wù)一個(gè)),每個(gè)堆棧的大小都必須足夠大,以確保不會(huì)出現(xiàn)唯一的最壞情況的堆棧深度;

          (4)中斷處理程序可能會(huì)嘗試使用這些相同的堆棧。

          使該問(wèn)題進(jìn)一步復(fù)雜化的是,沒(méi)有大量的測(cè)試可以確保特定的堆棧足夠大。您可以在各種加載條件下測(cè)試系統(tǒng),但是只能測(cè)試很長(zhǎng)時(shí)間。僅在“半個(gè)藍(lán)月亮”中運(yùn)行的測(cè)試可能不會(huì)見(jiàn)證僅在“一次藍(lán)月亮”中發(fā)生的堆棧溢出。在算法限制(例如無(wú)遞歸)下,可以通過(guò)對(duì)代碼的控制流進(jìn)行自上而下的分析來(lái)證明不會(huì)發(fā)生堆棧溢出。但是,每次更改代碼時(shí),都需要重做自上而下的分析。

          最佳實(shí)踐:?jiǎn)?dòng)時(shí),在整個(gè)堆棧上繪制不太可能的內(nèi)存模式。(我喜歡使用十六進(jìn)制23 3D 3D 23,它看起來(lái)像ASCII內(nèi)存轉(zhuǎn)儲(chǔ)中的籬笆' #==# '。)在運(yùn)行時(shí),讓管理員任務(wù)定期檢查是否沒(méi)有任何涂料在預(yù)先設(shè)定的高水位上方標(biāo)記已更改。

          如果發(fā)現(xiàn)某個(gè)堆棧有問(wèn)題,請(qǐng)?jiān)诜且资詢(xún)?nèi)存中記錄特定的錯(cuò)誤(例如哪個(gè)堆棧以及洪水的高度),并為產(chǎn)品的用戶(hù)做一些安全的事情(例如,受控關(guān)閉或重置)可能會(huì)發(fā)生真正的溢出。這是添加到看門(mén)狗任務(wù)中的一項(xiàng)不錯(cuò)的附加安全功能。

          5、堆碎片化

          嵌入式開(kāi)發(fā)工程師并沒(méi)有很好地利用動(dòng)態(tài)內(nèi)存分配。其中之一是堆碎片的問(wèn)題。

          通過(guò)C的malloc() 標(biāo)準(zhǔn)庫(kù)例程或C ++的new 關(guān)鍵字創(chuàng)建的所有數(shù)據(jù)結(jié)構(gòu)都駐留在堆中。堆是RAM中具有預(yù)定最大大小的特定區(qū)域。最初,堆中的每個(gè)分配都會(huì)減少相同字節(jié)數(shù)的剩余“可用”空間。

          例如,特定系統(tǒng)中的堆可能從地址開(kāi)始跨越10 KB。一對(duì)4 KB數(shù)據(jù)結(jié)構(gòu)的分配將留下2 KB的可用空間。

          可以通過(guò)調(diào)用free() 或使用delete 關(guān)鍵字將不再需要的數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)返回到堆中。從理論上講,這使該存儲(chǔ)空間可用于后續(xù)分配期間的重用。但是分配和刪除的順序通常至少是偽隨機(jī)的,這導(dǎo)致堆變成一堆更小的碎片。

          若要查看碎片可能是一個(gè)問(wèn)題,請(qǐng)考慮如果上述4 KB數(shù)據(jù)結(jié)構(gòu)中的第一個(gè)空閑時(shí)會(huì)發(fā)生什么情況?,F(xiàn)在,堆由一個(gè)4 KB的空閑塊和另一個(gè)2 KB的空閑塊組成。它們不相鄰,無(wú)法合并。所以我們的堆已經(jīng)被分割了。盡管總可用空間為6 KB,但超過(guò)4 KB的分配將失敗。

          碎片類(lèi)似于熵:兩者都隨時(shí)間增加。在長(zhǎng)時(shí)間運(yùn)行的系統(tǒng)(換句話(huà)說(shuō),曾經(jīng)創(chuàng)建的大多數(shù)嵌入式系統(tǒng))中,碎片最終可能會(huì)導(dǎo)致某些分配請(qǐng)求失敗。然后呢?您的固件應(yīng)如何處理堆分配請(qǐng)求失敗的情況?

          最佳實(shí)踐:避免完全使用堆是防止此錯(cuò)誤的肯定方法。但是,如果動(dòng)態(tài)內(nèi)存分配在您的系統(tǒng)中是必需的或方便的,則可以使用另一種結(jié)構(gòu)化堆的方法來(lái)防止碎片。

          關(guān)鍵觀察是問(wèn)題是由大小可變的請(qǐng)求引起的。如果所有請(qǐng)求的大小都相同,則任何空閑塊都將與其他任何塊一樣好,即使它恰巧不與任何其他空閑塊相鄰。圖3 顯示了如何將多個(gè)“堆”(每個(gè)用于特定大小的分配請(qǐng)求)的使用實(shí)現(xiàn)為“內(nèi)存池”數(shù)據(jù)結(jié)構(gòu)。

          讀取錯(cuò)誤數(shù)據(jù)或已損壞_意外的數(shù)據(jù)包讀取錯(cuò)誤_讀取意外錯(cuò)誤包數(shù)據(jù)的軟件

          許多實(shí)時(shí)操作系統(tǒng)都具有固定大小的內(nèi)存池API。如果您可以訪問(wèn)其中之一,請(qǐng)使用它代替malloc() 和free() ?;蚓帉?xiě)自己的固定大小的內(nèi)存池API。您只需要三個(gè)函數(shù):一個(gè)用于創(chuàng)建新的池(大小為M 塊N 字節(jié));另一個(gè)分配一個(gè)塊(來(lái)自指定的池);三分之一代替free() 。

          代碼審查仍然是最佳實(shí)踐,

          可以通過(guò)首先確保系統(tǒng)中不存在這些錯(cuò)誤來(lái)避免許多調(diào)試麻煩。最好的方法是讓公司內(nèi)部或外部的人員進(jìn)行全面的代碼審查。強(qiáng)制使用我在這里描述的最佳實(shí)踐的標(biāo)準(zhǔn)規(guī)則編碼也應(yīng)該會(huì)有所幫助。如果您懷疑現(xiàn)有代碼中存在這些討厭的錯(cuò)誤之一,那么執(zhí)行代碼審查可能比嘗試從觀察到的故障追溯到根本原因要快。


          主站蜘蛛池模板: 人妻天天爽夜夜爽一区二区| 久久久国产一区二区三区| 成人精品一区二区三区校园激情| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区二区三区免费在线观看| 丰满爆乳一区二区三区| 福利国产微拍广场一区视频在线 | 美日韩一区二区三区| 久久久无码精品国产一区| 91精品一区国产高清在线| 一区二区福利视频| 激情综合丝袜美女一区二区| 亚洲.国产.欧美一区二区三区| 中文字幕一区二区三区精彩视频| 日本一区二区不卡视频| 精品国产AⅤ一区二区三区4区 | 日韩av无码一区二区三区| 综合人妻久久一区二区精品| 精品人妻少妇一区二区| 精品人妻少妇一区二区| 99久久精品国产免看国产一区| 天天看高清无码一区二区三区| 国产成人高清亚洲一区91| 午夜视频在线观看一区二区| 中文字幕日韩一区二区不卡 | 人妻少妇久久中文字幕一区二区| 波多野结衣AV无码久久一区| 中文字幕精品无码一区二区| 国产一区二区三区免费观看在线| 国产午夜三级一区二区三| 亚洲乱码国产一区三区| 无码人妻一区二区三区在线视频 | 日韩视频一区二区| 冲田杏梨高清无一区二区| 精品福利一区二区三区精品国产第一国产综合精品 | 青青青国产精品一区二区| 国产精品一区二区久久| 国产香蕉一区二区三区在线视频 | 香蕉久久ac一区二区三区| 国产视频一区二区| 99久久精品国产免看国产一区 |