在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>LInterp之線性插值PROGMEM數組生成器

LInterp之線性插值PROGMEM數組生成器

2022-10-20 | zip | 0.46 MB | 次下載 | 免費

資料介紹

描述

LInterp.h是一個處理器腳本,用于使用 Arduino IDE(或任何其他)C 編譯器聲明和初始化大型插值/翻譯/查找數組。它聲明一個數組并從一組提供的映射坐標自動生成其元素,然后消失,不留下任何代碼、數據、定義、類或其他任何東西。這對于 RAM 有限的 Arduino 板來說是理想的,因為數組可以在PROGMEM(程序空間)內存更大,并且不需要微控制器代碼來生成數組。LInterp對 Arduino 板或引導加載程序一無所知,并且完全獨立于硬件。它實際上解決了生成潛在的大型變換數組的問題因此編譯器可以計算數組元素的值并在一次傳遞中初始化數組。對于最初(由作者)作為 UNIX shell 腳本編寫的具有 40 年歷史的回收件來說還不錯,以避免使具有類似用戶內存限制的 VAX 崩潰。

LInterp在 Arduino 微控制器平臺中最明顯的用途是為連接到模擬輸入的非線性傳感器或換能器生成線性變換。通過在設備產生的范圍內“映射”一組模擬輸入值(例如作為輸入引腳上的電壓),LInterp生成一個逆變換數組,其元素是用戶指定的線性函數上的均勻間隔點在相同的設備范圍內。如果數組元素之間的間隔被選擇為大于底層設備輸入比例(例如ADC范圍),那么通過相鄰數組元素之間的插值可以比僅使用最近索引元素更準確地轉換輸入值。LInterp總是在數組的末尾添加一個額外的數組元素,以將上面最后提供的縱坐標映射點與有效的數組元素綁定以進行插值(即使數組被聲明為平面)。

poYBAGNQxHuAf0yfAA8bhZDLX0M760.jpg
?

配置和使用陣列生成器

C 語言預處理器是一個原始的文本處理代碼,它通過擴展和替換標記定義直到它們評估為常量值來工作。它沒有循環、變量或任何運行時上下文的概念,只能進行簡單的整數運算。幸運的是,這足以允許從一組映射坐標和輸入/輸出縮放參數生成線性插值數組。#define在使用#include指令調用腳本之前,我們將這些常量作為 Arduino 草圖中的語句提供給預處理器。腳本完成后,它會刪除與其關聯的所有定義,因此可以定義一個新集合并再次調用腳本以生成另一個數組。LInterp腳本中的所有標記都以LI_并且在完成后將是未定義的,因此微控制器代碼所需的任何數組參數定義都應在源文件的較早部分進行,并且LInterp令牌定義引用它們。聲明的數組名由編譯器單獨保留。#define語句具有以下語法:

#define token value /* assigns value to token */

或者

#define token /* asserts that token exists from this point onwards in the source file */

以下列表描述了控制LInterp腳本的標記。在標記表示數值的情況下,類型顯示在括號中。默認值顯示在方括號中。

LI_ARR[ LInterp] – 數組的名稱。腳本完成后由編譯器保留。

LI_CAL( int) – 陣列基礎“校準”比例。

LI_INT( int) [1] – 的插值間隔LI_CAL。

LI_OFS( float) [0] – 數組元素常量偏移值。縮放后添加(參見LI_SCL

LI_Pn– 數組映射縱坐標在n =0 到n =32 的范圍內。必須聲明至少四個坐標。如果需要超過 32 個定義,則必須將定義添加到LInterp腳本(請參閱參考資料LInterp.h)。

LI_RAM– 強制在板 RAM 中聲明數組,即使pgmspace.h存在。

LI_RNG( int) – 映射縱坐標比例。LI_Pn

LI_SCL( float) [1.0] - 數組元素比例系數,=(最后一個元素值)-(第一個元素值)(見LI_OFS

LI_TYP– 指定數組的整數類型,例如byteintlong元素將由編譯器計算為 (float) 并(LI_TYP)在分配給數組之前四舍五入。

LI_VAR[ const] – 在 RAM 中聲明數組時的常量/動態切換。定義LI_VAR(無值)以允許在聲明后寫入數組。

Arduino 平臺中LInterp腳本的唯一外部依賴是宏令牌。如果在調用腳本之前未包含系統頭文件, LInterp將聲明并初始化 RAM 中的數組為常量(默認情況下)或可修改(如果已定義)。PROGMEMLI_VAR

坐標縮放和整數算術

要計算數組大小和元素間距,預處理器必須將縱坐標映射點值乘以和除以提供的縮放和插值間隔因子,并且它必須僅使用整數算術來執行此操作,因為它沒有可用的浮點類型. 記住整數除法中的 999/1000 = 0(下溢),數組定義的大小和操作順序對于獲得正確的數組維度很重要。LInterp還在計算中將提供的常量轉換為長整數,以防止整數乘法溢出。在為LInterp配置定義列表時,應注意以下數值注意事項:

縱坐標地圖比例

縱坐標地圖定義LI_P0..及其比例因子應使用方便的測量派生比例,該比例允許地圖值表示為數組定義所需精度的整數。LI_PNLI_RNG

數組基礎(插值)比例

我們希望我們的數組跨越的整數比例,并定義我們的插值間隔大小,由 定義LI_CAL。它等于縱坐標地圖比例因子LI_RNG乘以一個常數,但作為一個單獨的因子提供,以允許對由儀器或數學上下文強加的數組使用現有的“自然”索引縮放。

縱坐標地圖點陣列基本位置

縱坐標映射點( n > 0) 通常不直接對應于數組索引。包含(使得(int) i( n ) < (float) i( n ) < (int) i( n ) + 1)的數組元素由下式給出LI_PnLInterp[i] LI_Pn

我( n ) = ( * ) / ( * )LI_PnLI_CALLI_RNGLI_INT

其中算術運算按使用長整數顯示的順序執行。

數組大小計算

使用上面的數組索引計算,數組的大小由第一個 ( LI_P0) 和最后一個 ( ) 映射點給出,即 (# of elements) = i( N ) – i( 0 ) + 1。同樣,算術運算符在沒有事先簡化或分組的情況下按所示順序應用。顯示的額外元素是添加的最終數組元素,邊界在上面。LI_PNLI_PN

數組生成參數的約束

足夠的縱坐標映射

如果規則間隔的縱坐標圖包括連續縱坐標之間的映射函數的拐點(峰、谷或鞍點),則生成數組元素的線性內插器無法獲得此信息增加映射點頻率以解決此類特征。

不規則間距縱坐標映射集

縱坐標映射集 { } 表示被轉換的映射函數的規則間隔。映射點 (P I , S I )的不規則間隔映射集 {P n , S n }也是正則集,因此定義= P I * ( S I – S i-1 ) 和 S av為平均值集合內的間隔 (S I – S i-1 ) 的值產生一個規則間隔的映射,其中 ( S 0 – S (-1) ) = S av= [P n scale] * S av 請記住,區間和 SLI_PnLI_PiLI_RNGav必須表示為LInterp的整數

插值范圍限制

LInterp腳本包含足夠的插值元素聲明,在連續提供的映射縱坐標之間提供多達 32 個插值數組元素。嘗試聲明超過此值將產生致命的編譯錯誤和“超出插值限制”消息。聲明這么多插值的嘗試通常表示數組定義中的縮放錯誤或映射函數的緩慢增加(低梯度)間隔(例如圖形的 P8 到 P9)。由于在數組中使用許多插值會降低該縱坐標間隔中變換的精度,因此最好在此處聲明更多縱坐標映射點(請參閱上面關于不規則映射集的說明)或增加插值間隔LI_INT. 如果認為絕對有必要增加LInterp腳本中的插值聲明的數量,請按照LInterp.h文件中顯示的說明進行操作。

坐標映射范圍限制

LInterp腳本包括在多達 32 個縱坐標映射點之間進行插值的定義。如果需要更多,該LInterp.h文件包含有關如何添加更多映射點定義的說明。請注意,文件中有幾個位置需要這些添加,不要與插值范圍聲明混淆(見上文)。

使用插值數組

訪問LInterp生成的數組取決于它的聲明位置。如果它已在 RAM 中聲明,則它可以像使用指針 ( *(array+index)) 或下標 ( array[index]) 表示法的任何其他 C 數組聲明一樣訪問。如果數組在 RAM 中聲明并LI_VAR定義了令牌,則數組元素可能會被微控制器代碼更改。如果數組是在程序空間內存中聲明的PROGMEMpgmspace.h這些函數具有一般形式

(array_element_type) pgm_read_array_element_type(int pos);

其中array_element_type是標準數值類型例如byte,并且是程序空間存儲器中要讀取的位置。要訪問LInterp生成的程序空間數組中的第i個元素,我們提供用i指定的數組名稱for 為了將來的可移植性和代碼可讀性,將函數調用嵌入宏定義中是謹慎的,例如intfloatlongposLI_ARRpos

#define MyArray( i ) pgm_read_float( LInterp + i )

其中使用了默認數組名稱LInterp,并且在這種情況下數組元素類型為浮點數。MyArray()宏可以像代碼中的函數調用一樣使用,其參數計算為數組元素索引有關pgmspace.h函數的更多信息,請參閱www.arduino.cc上的PROGMEM庫參考。

如果LInterp生成的平移數組平坦的(即LI_INT= 1),因此映射函數的每個值都有一個數組元素,則上述宏可以直接使用映射函數的邊界檢查值作為數組索引. 如果LInterp數組已指定插值間隔(即LI_INT> 1),因此必須在數組值之間插值映射函數值,則必須使用插值函數來獲得正確的變換值。例如:

float DeviceToLin ( int dev_value ) {
/* lower bound check */
if ( dev_value < ArrOffset ) dev_value = ArrOffset;
/*upper bound check */
else if ( dev_value > ArrLimit ) dev_value = ArrLimit;
dev_value -= ArrOffset;
int index = dev_value / ArrInterp;
/* lower interpolation bound */
float lwr_bound = MyArray ( index );
/*upper interpolation bound */
float upr_bound = MyArray ( index + 1 );
return( lwr_bound + ( upr_bound – lwr_bound ) * ( dev_value % ArrInterp ) / ArrInterp );
}

withArrInterp等于LI_INT用于創建數組的插值間隔,dev_value具有與 相同的比例LI_CAL,是對應單位ArrLimit的數組結束位置,是對應單位 ( not )的數組偏移量(如果有)。LInterp數組生成器確保最后提供的縱坐標映射點以有效數組元素為界。請記住在涉及數組邊界的任何計算中使用長整數,并檢查編譯器的整數溢出警告。LI_PNLI_CALArrOffsetLI_P0LI_CAL LI_OFSLI_PN

由于 Arduino 環境中最常見的LInterp應用程序是模擬設備輸出轉換,LinDev.h因此提供了一個大綱頭文件,用于針對特定設備定義進行定制。這將縱坐標圖、LInterp定義、設備線性變換函數和輸出函數封裝在與 Arduino 項目草圖文件分開的單個頭文件中,從而有效地虛擬化設備。以下示例顯示了將此頭文件用作獨立的 Arduino 草圖。

示例程序 – PotUnLog.ino

例如,我們考慮使用LInterp來線性化連接到(任何)Arduino 板的模擬輸入的非線性模擬設備的部分輸出范圍。數電位器(或對數電位器)是一種可變電阻器,它產生的電阻隨著掃描旋轉角的增加而呈指數增加。如果我們將電阻的一端接地,另一端連接到我們的模擬參考電壓電源Vref (來自單獨供電的 Arduino 板),則掃描端子將產生非線性電壓增加,隨著電位器主軸角度的增加,鍋從零旋轉到Vref在完全旋轉。使用一個 100K 電位器來限制從模擬參考電源汲取的電流,將電位器固定在一張紙板上并添加一個帶有方向指針的旋鈕,我們可以在其整個旋轉范圍(通常為 270度,或 27 度間隔)。如果我們隨后在每個標記位置測量電位器電壓,我們就有了電位器的常規縱坐標映射集然后,我們可以將電位器掃描終端連接到 Arduino 板的 A0 模擬輸入,并使用VrefanalogRead()除以特定 Arduino 板的 ADC 電平中的模擬通道全寬來讀取電位器電壓。

現在,假設我們想要一個 Arduino 代碼函數,它以 0 到 10 之間的實數形式返回電位器方向角。我們可以將電位器電壓analogRead()按比例縮放(10 除以模擬參考電壓),但返回值勝出'不匹配我們在鍋周圍標記的等間隔刻度,因為鍋不是線性的。我們需要使用一個變換函數“線性化”電位器輸出。為了我們的示例,我們還指定(出于某種原因)我們希望罐變換在刻度上的位置 3 和 7 之間是線性的,但在此范圍之外保持非線性(但與其平滑連續)。讓我們也忽略這樣一個事實,即我們知道底池是對數的(因此我們可以使用數學函數對其進行線性化),并且需要在四個標記的底池位置之間獲得更好的精度,而不僅僅是它們之間的線性近似。如果我們還測量刻度上每個電位器位置之間的電位器電壓,我們總共會得到九個映射點來指定LI_P0我們LI_P8的變換數組。由于這些必須是整數,因此我們指定它們并LI_RNG以毫伏為單位,后者等于模擬參考電壓Vref. 所有對數罐應生成示例草圖中所示的相同圖,因為它們的指數電阻曲線符合對數罐對數的 ANSI 標準。

我們現在根據底池產生的值范圍選擇我們的變換數組大小,作為 ADC 電平接收。查看縱坐標圖,我們所需的線性電位器范圍涵蓋大約 444 個 ADC 電平,如果聲明為“平面”數組,則將占用 1780 個字節。如果我們采用LogPotRes(比如說)5 個 ADC 級別的插值大小,我們可以將其減少到 356 字節。這是明智的,因為我們的縱坐標圖太粗糙而無法有效使用 (100 / 444 =) 0.23% 的分辨率精度。因此,我們設置LI_INT為ADC 電平LogPotResLI_CAL的模擬通道全寬。最后,我們將數組比例設置LI_SCL為 10,匹配我們的旋鈕比例,LI_OFS設置為 3,作為我們指定數組開始的所有數組元素值的旋鈕比例偏移量LI_P0. 我們還將保留LI_P0and的副本LI_P8(以 mV 為單位,作為長整數)以在變換函數中定位我們的線性罐部分的開始和結束。我們現在使用指令調用LInterp腳本#include,之后我們的數組被分配、初始化并且對我們的代碼可見,并且所有LI_定義都被刪除。

使用連接到 Arduino 板的串行端口,我們現在可以從setup()函數中檢查聲明的數組,就好像它是程序代碼中的常規數組聲明一樣。請注意,第一個元素等于我們對 的定義LI_OFS,而最后一個元素(恰好)大于LI_OFS + LI_SCL該函數ReadPot()對電位器模擬通道的多個讀數取平均值,并對電位器電壓進行邊界檢查。如果這超出了我們的線性變換范圍,則電壓僅根據相關的旋鈕間隔范圍進行縮放并返回;否則根據我們的DeviceToLin()函數示例對其進行數組轉換。啟動該loop()功能后,旋鈕位置應在 3 到 7 范圍內正確報告,并且大約在此范圍之外。

常見問題及故障診斷

ovf,inf以及nan在數組末尾附近返回的值

將模擬設備電平縮放為數組索引時,請注意與原始縱坐標映射參考電壓的差異。如果 ADC 或模擬設備參考電壓相對于映射參考電壓發生漂移,則直接縮放到陣列索引的 ADC 電平可能會超過陣列的末端。出于這個原因,為您的模擬設備和 Arduino 板 ADC(通過AREF引腳)使用公共外部參考電壓源始終是一個好主意。如果設備電壓漂移是您的 Arduino 應用程序中不可避免的限制,請將模擬通道用作設備電壓監視器,并在您的變換陣列索引計算中對其進行縮放。同樣,假設標稱值為LI_RNG當使用設備派生的數組索引訪問時,而不是精確測量的值可能會導致數組太短。(技術說明:請記住,ADC 在滿量程時總是返回比 Vref 小 1LSB

數組聲明產生一個數組元素 (= ) LI_OFS

選擇導致整數除法下溢錯誤的縮放范圍LI_RNG會使LI_CAL整個數組消失。請參閱縱坐標縮放和整數算術)

數組邊界處的缺失/重疊值

當使用如上例中在設備范圍的一部分上聲明的平移/插值數組時,必須注意數組的邊界是如何由轉換函數代碼確定的。這應該使用相同的整數值(如 long ints)來完成,該整數值用于定義相對于LI_CAL而不是邊界檢查計算的數組索引的數組,這可能會引入截斷錯誤。

(高級):定義非線性輸出函數

LInterp腳本可以被定制以在預處理器的有限能力所施加的嚴重限制產生一個編碼非線性輸出函數的輸出數組。這可以使用以下形式的宏定義來實現

#define LI_OFS( curr_map_pt, next_map_pt, element ) ( /*... arithmetic operations */ )

#define LI_SCL( curr_map_pt, next_map_pt, element ) ( /*... arithmetic operations */ )

并用這些確切的語句替換(一個或兩個)LI_OFSLI_SCL在文件頂部的元素生成器中:LInterp.h

LI_OFS( LI_LEV, LI_NXT, LI_ELT )

LI_SCL( LI_LEV, LI_NXT, LI_ELT )

以及將數組聲明初始化器列表中顯示的第一個元素更改為LI_OFS(0, 1, 0)(或硬編碼的#define 數字常量)如果LI_OFS更改為宏。數字標記(不是變量)LI_LEVLI_NXT指定映射條目之間的數字標記為每個插值區間(如果有)定義,從 1 開始,以適合范圍內的多個完整區間結束。令牌總是等于+ 1 并且是必要的,因為預處理器不能將 1 加到令牌上。請注意,上面顯示的第一個數組元素是一種特殊情況,其唯一元素值為 0,可以通過條件測試來檢測和處理,例如LI_PnLI_P(n+1)LI_ELTLI_NXTLI_LEV( ( element== 0 )? .. : .. )在宏中使用三元運算符。這三個數字標記是LInterp腳本中預處理器唯一可用的上下文信息。

幸運的是,LI_OFSandLI_SCL宏僅在編譯過程中進行評估,其中傳遞的數字標記評估為整數,并且允許浮點算術運算以及類型轉換和強制轉換。這提供了僅在這三個“狀態”標記的上下文中計算輸出函數的有限能力。映射點分布現在成為輸出函數的域,由于每個映射間隔的插值分配將根據其范圍而變化,這一事實變得復雜。鑒于元素生成器仍將計算LI_SCL與插值數組元素相乘的線性小數值,輸出函數只需定義為LI_LEV如果映射點之間的線性近似足以滿足輸出函數的精度。作為一個稍微簡單的例子,拋物線輸出函數可以定義為

#define LI_SCL(p,q,r) ( scale_constant * p * p )

并留下LI_OFS一個常量定義。可以是一個實數,作為另一個語句的標記提供輸出函數宏定義的一個更有用的示例是更改由縱坐標映射中的上下邊界條目定義的變換數組的單個區域的線性輸出函數:scale_constant#define

#define LI_OFS(p,q,r) ( (p < LWR) * OFS1 + (p >= LWR && p < UPR ) * OFS2 + ( p >= UPR ) * OFS3 )

#define LI_SCL(p,q,r) ( ( p < LWR || p >= UPR ) * SCL1 + ( p >= LWR && p < UPR ) * SCL2 )

其中表達式標記是用戶提供的#define 常量,選擇偏移量以使三個線性部分在縱坐標映射條目處連續,編號為然后可以使用相同的數組僅基于輸入索引透明地生成不同的輸出函數,而不是使用三個數組和編碼輸入邊界測試來在它們之間進行選擇。OFSiUPRLWR

LI_ELT如果事先不知道其范圍,宏插值元素編號標記(對應于)在某種程度上是無用的。這可以從LI_S()宏中獲得并用于為當前數組元素生成一個實數小數范圍因子:

elt_factor = ( (float) element /

(long) LI_S( curr_map_pt, next_map_pt ) )

其中element從 1 到LI_S()第 0 個元素定義為前一個映射間隔的最后一個元素,或數組的第一個元素。

請重命名包含您的自定義設置的頭文件,因為突變的LInterp變種有偽裝成標準規格版本從實驗室逃脫并在市民中引起恐慌的習慣。特別是,請不要因有關預處理器腳本的問題而惹惱 Arduino 支持人員或論壇版主,這是一種神秘且正確失傳的(黑色)藝術。可悲的是,您會在 GitHub 或 StackOverflow 等 C 編程論壇(后者以錯誤的預處理器腳本編寫的常見結果命名)中找到充足的幫助。

歷史記錄

LInterp通過許多硬件平臺的進化過程進入 Arduino 環境,從 Beowulf 集群到 GPU 板,無疑已經被重新發明了很多次。LInterp 之類的腳本很可能是C 預處理器的 ANSI 標準對其功能保持如此高度限制的歷史原因。提前向任何認為他們的推導值得贊揚的人道歉;但是作者證明所提供的LInterp腳本和相關代碼完全是他們自己的作品,沒有任何版權責任(并且有證據,可能在磁帶上)。它本著免費開源公共分發的“copyLeft”精神提供。作者對其使用的任何結果不承擔任何責任。

快樂插值,

dxb

(古代碼)


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1使用單片機實現七人表決器的程序和仿真資料免費下載
  2. 2.96 MB   |  44次下載  |  免費
  3. 2聯想E46L DAOLL6筆記本電腦圖紙
  4. 1.10 MB   |  2次下載  |  5 積分
  5. 3MATLAB繪圖合集
  6. 27.12 MB   |  2次下載  |  5 積分
  7. 4PR735,使用UCC28060的600W交錯式PFC轉換器
  8. 540.03KB   |  1次下載  |  免費
  9. 5UCC38C42 30W同步降壓轉換器參考設計
  10. 428.07KB   |  1次下載  |  免費
  11. 6DV2004S1/ES1/HS1快速充電開發系統
  12. 2.08MB   |  1次下載  |  免費
  13. 7模態分解合集matlab代碼
  14. 3.03 MB   |  1次下載  |  2 積分
  15. 8美的電磁爐維修手冊大全
  16. 1.56 MB   |  1次下載  |  5 積分

本月

  1. 1使用單片機實現七人表決器的程序和仿真資料免費下載
  2. 2.96 MB   |  44次下載  |  免費
  3. 2UC3842/3/4/5電源管理芯片中文手冊
  4. 1.75 MB   |  15次下載  |  免費
  5. 3DMT0660數字萬用表產品說明書
  6. 0.70 MB   |  13次下載  |  免費
  7. 4TPS54202H降壓轉換器評估模塊用戶指南
  8. 1.02MB   |  8次下載  |  免費
  9. 5STM32F101x8/STM32F101xB手冊
  10. 1.69 MB   |  8次下載  |  1 積分
  11. 6HY12P65/HY12P66數字萬用表芯片規格書
  12. 0.69 MB   |  6次下載  |  免費
  13. 7華瑞昇CR216芯片數字萬用表規格書附原理圖及校正流程方法
  14. 0.74 MB   |  6次下載  |  3 積分
  15. 8華瑞昇CR215芯片數字萬用表原理圖
  16. 0.21 MB   |  5次下載  |  3 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 一级欧美在线的视频 | 精品久久香蕉国产线看观看亚洲 | 欧美一级三级在线观看 | 六月激情丁香 | 神马午夜限制 | 手机看片福利1024 | 天堂网. www在线资源 | 福利片午夜 | 欧美a级网站 | 在线观看黄色的网站 | 色综合色综合色综合网址 | 美女网站色免费 | 五月天婷婷网址 | 人人做天天爱夜夜爽中字 | 亚洲婷婷国产精品电影人久久 | 天天干天天操天天爱 | 男女视频在线观看免费高清观看 | 国产日本久久久久久久久婷婷 | 亚洲男人的天堂久久无 | 久久99热国产这有精品 | 一级黄色免费毛片 | 免费番茄社区性色大片 | 日韩精品免费一级视频 | 日本三级hd高清电影 | 97色网| 日本边添边爱边摸边做边爱 | 天堂资源最新版在线官网 | 久久久久久国产精品免费免 | 国产一级毛片午夜福 | 天天爱天天操天天射 | 性视频久久 | 天天干夜夜骑 | 女人张腿让男桶免费视频观看 | 亚洲欧美国产五月天综合 | 22sihu国产精品视频影视资讯 | 中文在线天堂网 | 大香线蕉97久久 | 日本高清视频一区 | 91大神精品 | 男男之h啪肉np文 | 无码一区二区三区视频 |