色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)高效運(yùn)行秘訣:實(shí)現(xiàn)數(shù)學(xué)函數(shù)的優(yōu)化之道

玩轉(zhuǎn)嵌入式 ? 來源:玩轉(zhuǎn)嵌入式 ? 2024-03-14 09:43 ? 次閱讀

大家好,我是小麥,今天給大家分享一下如何在資源緊張,算力較低的單片機(jī)上實(shí)現(xiàn)三角函數(shù)的算法

之前發(fā)過一篇關(guān)于IQMath的文章,這個是ti公司平臺上的一個數(shù)學(xué)運(yùn)算庫,里面封裝了很多高效的數(shù)學(xué)運(yùn)算方法。

例如在不具備浮點(diǎn)運(yùn)算器的定點(diǎn)處理器使用定點(diǎn)運(yùn)算,以前寫過一篇Q格式的文章,有簡單介紹過這些知識。

那么問題來了,有一個讀者朋友的硬件平臺無法使用IQMath,但是他要進(jìn)行一些三角函數(shù)的運(yùn)算,那么該如何自己動手實(shí)現(xiàn)呢?

下面我們來簡單介紹一下整體的思路吧,因?yàn)橛布脚_的資源比較緊張;

RAM比較少;

ROM比較少;

CPU處理速度比較慢;

所以這里比較常用的方法就是通過空間換時間,預(yù)先將sin,cos的值存儲到數(shù)組中,需要用的時候,訪問數(shù)組就可以得到具體的數(shù)據(jù)。這也就是我們經(jīng)常會提到的查表法

下面我們來詳細(xì)介紹一下。

正弦表

這個正弦函數(shù)表達(dá)式是這樣的,

具體如下圖所示;

632aa41c-e199-11ee-a297-92fbcf53809c.png

正弦波

首先我們來簡單分析一下這個波形:

在藍(lán)色框內(nèi)是一整個周期的波形;

在紅色框內(nèi)是四分之一個周期的波形;

其實(shí)不難發(fā)現(xiàn),我們只要表示出這四分之一個波形的數(shù)據(jù),其余剩下的波形都可以通過換算表示出來。

這樣做就大大節(jié)省了查表法所需要的空間。

下面我們來介紹一下具體如何實(shí)現(xiàn);

首先我們得搞清楚一個點(diǎn),就是量綱,統(tǒng)一用歸一化的形式來做。

y的范圍是 [-1, 1];

x的范圍是[0, 2π],當(dāng)然,x的范圍[-π, π]也是沒問題的,下面會繼續(xù)介紹;

而在實(shí)際的程序中,我們是無法這樣去做的,這些數(shù)值我們期望通過整形類型去訪問,所以我們要做到幾點(diǎn):

盡量避免使用浮點(diǎn)運(yùn)算;

盡量避免除法;

盡量避免乘法;

所以這里有必要先了解一下Q格式,用左移和右移去代替乘法和除法,提高運(yùn)算效率;

對于X軸的數(shù)據(jù),于是可以將[0, 2π]細(xì)分成 128 ,256,512或者 1024 等等;

這里我們先細(xì)分成1024等份,正如前面提到的,只需要選擇前四分之一周期的內(nèi)容即可;

#definePOINT_NUM256
#definePI3.141592f
for(inti=0;i

打印的輸出結(jié)果如下:

633640ba-e199-11ee-a297-92fbcf53809c.png

浮點(diǎn)類型的正弦表

這里我們可以簡單取幾個特殊點(diǎn)驗(yàn)證一下,發(fā)現(xiàn)整體還是可以接受的;

635eb70c-e199-11ee-a297-92fbcf53809c.jpg

matlab輸出的波形

下一步就是將浮點(diǎn)數(shù)據(jù)y轉(zhuǎn)化為Q1.15格式哈,

#definePOINT_NUM256
#definePI3.141592f
printf("sin=============================================
");
for(inti=0;i

最終輸出結(jié)果如下所示;

636bdacc-e199-11ee-a297-92fbcf53809c.png

Q格式正弦表

源碼部分

下面這部分代碼是參考ST的mcsdk中的一個實(shí)例,下面我們會依次分析每個部分的作用,整體的代碼具體如下所示;

#defineSIN_COS_TABLE{
0x0000,0x00C9,0x0192,0x025B,0x0324,0x03ED,0x04B6,0x057F,
0x0648,0x0711,0x07D9,0x08A2,0x096A,0x0A33,0x0AFB,0x0BC4,
0x0C8C,0x0D54,0x0E1C,0x0EE3,0x0FAB,0x1072,0x113A,0x1201,
0x12C8,0x138F,0x1455,0x151C,0x15E2,0x16A8,0x176E,0x1833,
0x18F9,0x19BE,0x1A82,0x1B47,0x1C0B,0x1CCF,0x1D93,0x1E57,
0x1F1A,0x1FDD,0x209F,0x2161,0x2223,0x22E5,0x23A6,0x2467,
0x2528,0x25E8,0x26A8,0x2767,0x2826,0x28E5,0x29A3,0x2A61,
0x2B1F,0x2BDC,0x2C99,0x2D55,0x2E11,0x2ECC,0x2F87,0x3041,
0x30FB,0x31B5,0x326E,0x3326,0x33DF,0x3496,0x354D,0x3604,
0x36BA,0x376F,0x3824,0x38D9,0x398C,0x3A40,0x3AF2,0x3BA5,
0x3C56,0x3D07,0x3DB8,0x3E68,0x3F17,0x3FC5,0x4073,0x4121,
0x41CE,0x427A,0x4325,0x43D0,0x447A,0x4524,0x45CD,0x4675,
0x471C,0x47C3,0x4869,0x490F,0x49B4,0x4A58,0x4AFB,0x4B9D,
0x4C3F,0x4CE0,0x4D81,0x4E20,0x4EBF,0x4F5D,0x4FFB,0x5097,
0x5133,0x51CE,0x5268,0x5302,0x539B,0x5432,0x54C9,0x5560,
0x55F5,0x568A,0x571D,0x57B0,0x5842,0x58D3,0x5964,0x59F3,
0x5A82,0x5B0F,0x5B9C,0x5C28,0x5CB3,0x5D3E,0x5DC7,0x5E4F,
0x5ED7,0x5F5D,0x5FE3,0x6068,0x60EB,0x616E,0x61F0,0x6271,
0x62F1,0x6370,0x63EE,0x646C,0x64E8,0x6563,0x65DD,0x6656,
0x66CF,0x6746,0x67BC,0x6832,0x68A6,0x6919,0x698B,0x69FD,
0x6A6D,0x6ADC,0x6B4A,0x6BB7,0x6C23,0x6C8E,0x6CF8,0x6D61,
0x6DC9,0x6E30,0x6E96,0x6EFB,0x6F5E,0x6FC1,0x7022,0x7083,
0x70E2,0x7140,0x719D,0x71F9,0x7254,0x72AE,0x7307,0x735E,
0x73B5,0x740A,0x745F,0x74B2,0x7504,0x7555,0x75A5,0x75F3,
0x7641,0x768D,0x76D8,0x7722,0x776B,0x77B3,0x77FA,0x783F,
0x7884,0x78C7,0x7909,0x794A,0x7989,0x79C8,0x7A05,0x7A41,
0x7A7C,0x7AB6,0x7AEE,0x7B26,0x7B5C,0x7B91,0x7BC5,0x7BF8,
0x7C29,0x7C59,0x7C88,0x7CB6,0x7CE3,0x7D0E,0x7D39,0x7D62,
0x7D89,0x7DB0,0x7DD5,0x7DFA,0x7E1D,0x7E3E,0x7E5F,0x7E7E,
0x7E9C,0x7EB9,0x7ED5,0x7EEF,0x7F09,0x7F21,0x7F37,0x7F4D,
0x7F61,0x7F74,0x7F86,0x7F97,0x7FA6,0x7FB4,0x7FC1,0x7FCD,
0x7FD8,0x7FE1,0x7FE9,0x7FF0,0x7FF5,0x7FF9,0x7FFD,0x7FFE}

constint16_thSin_Cos_Table[256]=SIN_COS_TABLE;

typedefstruct
{
int16_thCos;
int16_thSin;
}Trig_Components;

/**
*@briefThisfunctionreturnscosineandsinefunctionsoftheanglefedin
*input
*@paramhAngle:angleinq1.15format(-1~0.9999)
*@retvalTrig_ComponentsCos(angle)andSin(angle)inTrig_Componentsformat
*/
Trig_Componentstrig_functions(int16_thAngle)
{
int32_tshindex;
uint16_tuhindex;

Trig_ComponentsLocal_Components;

/*10bitindexcomputation*/
shindex=((int32_t)32768+(int32_t)hAngle);
uhindex=(uint16_t)shindex;
//uhindex/=(uint16_t)64;
uhindex=uhindex>>6;
/**
|hAngle|angle|std|
|(0,16384]|U0_90|(0,0.5]|
|(16384,32767]|U90_180|(0.5,0.99]|
|(-16384,-1]|U270_360|(0,-0.5]|
|(-16384,-32768]|U180_270|(-0.5,-1)|
*/
//SIN_MASK0x0300u
switch((uint16_t)(uhindex)&SIN_MASK)
{
//0x0200u
caseU0_90:
Local_Components.hSin=
hSin_Cos_Table[(uint8_t)(uhindex)];
Local_Components.hCos=
hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
break;
//0x0300u
caseU90_180:
Local_Components.hSin=
hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
Local_Components.hCos=
-hSin_Cos_Table[(uint8_t)(uhindex)];
break;
//0x0000u
caseU180_270:
Local_Components.hSin=
-hSin_Cos_Table[(uint8_t)(uhindex)];
Local_Components.hCos=
-hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
break;
//0x0100u
caseU270_360:
Local_Components.hSin=
-hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
Local_Components.hCos=
hSin_Cos_Table[(uint8_t)(uhindex)];
break;
default:
break;
}
return(Local_Components);
}

由于輸入的hAngle是Q1.15格式,所以這里可以簡單畫個圖;下面是角度hAngle從0x0000~0xFFFF的示意圖,如下所示;

6382947e-e199-11ee-a297-92fbcf53809c.png

角度值

這里注意,負(fù)數(shù)是以補(bǔ)碼形式進(jìn)行保存的,正數(shù)的補(bǔ)碼等于他本身;

負(fù)數(shù)的補(bǔ)碼是除了符號位外,其他位取反,然后加上1;

所以可以算一下 0xFFFF表示-1;

0x8000表示 -32768;

因?yàn)镼格式中有無符號的范圍和帶符號的范圍,所以這里的hAngle充分利用這個16 bit的數(shù)據(jù),并且兼容了傳入參數(shù)可以是有符號int16或者是無符號uint16,這里比較繞,先看下面這張圖片;

638c504a-e199-11ee-a297-92fbcf53809c.png

有符號和無符號 對比

上圖中;

左邊是有符號int16,右邊是無符號數(shù)uint16;

兩個圓形分別表示int16和uint16的數(shù)值范圍;

左邊綠色框內(nèi)的波形相對應(yīng),橙色框內(nèi)的波形相對應(yīng);

這里有幾點(diǎn)我們要注意一下,無論是有符號和無符號,他們的周期都是相同的;

有符號整數(shù) int16 :-32768 ~ 32765 ,

無符號整數(shù) uint16 :0 ~ 65535,

所以這兩者都使用 65536個數(shù)來表示正弦的一個周期,也就是 2π

這里是比較關(guān)鍵的地方,因此對于0x8000 這個關(guān)鍵點(diǎn),有符號和無符號所表示的數(shù)值是不同的;

有符號整數(shù) int16 :0x8000 表示為 -32768;

無符號整數(shù) uint16 :0x8000 表示為 32768;

因此這他們剛好相差了一個周期 65536,所以表示的正弦數(shù)值y是相同的,正如上圖中藍(lán)色箭頭①和②所示。

內(nèi)部實(shí)現(xiàn)

由于有符號整數(shù) int16 的最高位是符號位,所以這里我們先把它轉(zhuǎn)化成無符號整形;

前面用 int32類型是為了防止數(shù)據(jù)溢出,這里加上32768,相當(dāng)于對正弦波平移了半個周期,所以在下面y和x的映射關(guān)系需要根據(jù)實(shí)際情況來修改;

/*10bitindexcomputation*/
shindex=((int32_t)32768+(int32_t)hAngle);
uhindex=(uint16_t)shindex;
//uhindex/=(uint16_t)64;
uhindex=uhindex>>6;

因?yàn)榍懊嫣岣哌^正弦表的四分之一是256個數(shù)據(jù),所以整個正弦周期應(yīng)該是 1024 個細(xì)分?jǐn)?shù)據(jù),那也就是2的10次,就需要10 bit;

10 bit的數(shù)據(jù)范圍是 0~1023;

16 bit的數(shù)據(jù)范圍是 0~65535;

為了獲取有效的高10 bit數(shù)據(jù),對數(shù)據(jù)右移 6 bit,具體如下所示;

639bef0a-e199-11ee-a297-92fbcf53809c.png

所以,我們又可以得到以下這個數(shù)據(jù)的范圍 0 ~ 1023 ,0 ~ 0x400

63aa4686-e199-11ee-a297-92fbcf53809c.png

因此我們在程序中引入四個掩碼,作為正弦波形落在哪個象限的標(biāo)識位,這樣也避免了使用除法運(yùn)算,提高了效率,具體如下所示;

#defineSIN_MASK0x0300u
#defineU0_900x0200u
#defineU90_1800x0300u
#defineU180_2700x0000u
#defineU270_3600x0100u

其中,U0_90表示 0° ~ 90°,以此類推;

那為什么是這個映射關(guān)系呢?

0~90°不應(yīng)該是從 0x000u~0x100u嗎?這里我們再簡單解釋一下;

前面有一個這樣的操作,具體如下;

shindex=((int32_t)32768+(int32_t)hAngle);
uhindex=(uint16_t)shindex;

這里的hAngle加上32768,相當(dāng)于加了一個π,正弦波形向左移動了半個周期;因此整體的映射關(guān)系要和原始的數(shù)據(jù)對應(yīng)起來,具體如下所示;

63b54892-e199-11ee-a297-92fbcf53809c.png

最后,既然我們已經(jīng)知道波形在哪個象限了,就可以根據(jù)當(dāng)前象限和我們正弦表的關(guān)系來得到新的波形,這里有中心對稱,關(guān)于y軸對稱,簡單做一下變換就可以得到正弦值和余弦值;

//SIN_MASK0x0300u
switch((uint16_t)(uhindex)&SIN_MASK)
{
//0x0200u
caseU0_90:
Local_Components.hSin=
hSin_Cos_Table[(uint8_t)(uhindex)];
Local_Components.hCos=
hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
break;
//0x0300u
caseU90_180:
Local_Components.hSin=
hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
Local_Components.hCos=
-hSin_Cos_Table[(uint8_t)(uhindex)];
break;
//0x0000u
caseU180_270:
Local_Components.hSin=
-hSin_Cos_Table[(uint8_t)(uhindex)];
Local_Components.hCos=
-hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
break;
//0x0100u
caseU270_360:
Local_Components.hSin=
-hSin_Cos_Table[(uint8_t)(0xFFu-(uint8_t)(uhindex))];
Local_Components.hCos=
hSin_Cos_Table[(uint8_t)(uhindex)];
break;
default:
break;
}

總結(jié)

本文簡單介紹了正余弦函數(shù)的實(shí)現(xiàn),參考了ST的mcsdk中算法,做了簡單的分析,其中需要了解一部分Q格式進(jìn)行定點(diǎn)運(yùn)算的知識,本文可能存在錯誤和紕漏,請大家指出。如果大家有更好的方法,歡迎在下方討論。
審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6039

    文章

    44575

    瀏覽量

    636401
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4620

    瀏覽量

    93047
  • 波形
    +關(guān)注

    關(guān)注

    3

    文章

    379

    瀏覽量

    31595
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4338

    瀏覽量

    62739

原文標(biāo)題:單片機(jī)如何能運(yùn)行如飛?一種高效實(shí)現(xiàn)數(shù)學(xué)函數(shù)的方式!

文章出處:【微信號:玩轉(zhuǎn)嵌入式,微信公眾號:玩轉(zhuǎn)嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)數(shù)學(xué)基礎(chǔ)

    單片機(jī)數(shù)學(xué)基礎(chǔ):本章基本要求:單片機(jī)是現(xiàn)代電子智能儀器儀表及嵌入式系統(tǒng)的主要組成部分,應(yīng)用非常廣泛,是現(xiàn)代工程技術(shù)人員必須掌握的知識之一。本章要求掌握數(shù)的進(jìn)制
    發(fā)表于 09-26 18:45 ?65次下載

    【論文】單片機(jī)函數(shù)信號發(fā)生器設(shè)計(jì)

    【小論文】單片機(jī)函數(shù)信號發(fā)生器設(shè)計(jì)
    發(fā)表于 12-11 22:06 ?16次下載

    淺析單片機(jī)C語言函數(shù)之中斷函數(shù)

    在開始寫中斷函數(shù)之前,我們來一起回顧一下,單片機(jī)的中斷系統(tǒng)。
    的頭像 發(fā)表于 07-18 16:56 ?1.2w次閱讀

    使用單片機(jī)實(shí)現(xiàn)文件系統(tǒng)的函數(shù)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)文件系統(tǒng)的函數(shù)免費(fèi)下載。
    發(fā)表于 08-19 17:31 ?3次下載
    使用<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b>文件系統(tǒng)的<b class='flag-5'>函數(shù)</b>免費(fèi)下載

    如何使用單片機(jī)系統(tǒng)重寫printf函數(shù)

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用單片機(jī)系統(tǒng)重寫printf函數(shù)
    發(fā)表于 07-23 17:37 ?1次下載
    如何使用<b class='flag-5'>單片機(jī)</b>系統(tǒng)重寫printf<b class='flag-5'>函數(shù)</b>

    單片機(jī)的中斷程序如何運(yùn)行

    單片機(jī)的中斷就是類似的一個過程,發(fā)生中斷時,就會打斷正在執(zhí)行的主程序,先處理完中斷任務(wù),返回主程序繼續(xù)運(yùn)行,當(dāng)然在執(zhí)行中斷函數(shù)之前,單片機(jī)需要把關(guān)鍵的數(shù)據(jù)保存下來,中斷
    的頭像 發(fā)表于 01-27 17:11 ?1.1w次閱讀
    <b class='flag-5'>單片機(jī)</b>的中斷程序如何<b class='flag-5'>運(yùn)行</b>

    手動實(shí)現(xiàn)51單片機(jī)函數(shù)切換

    手動實(shí)現(xiàn)51單片機(jī)函數(shù)切換
    發(fā)表于 11-11 20:36 ?10次下載
    手動<b class='flag-5'>實(shí)現(xiàn)</b>51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>函數(shù)</b>切換

    51單片機(jī)控制42步進(jìn)電機(jī)——程序實(shí)現(xiàn)(中斷PWM/延時函數(shù)

    51單片機(jī)控制42步進(jìn)電機(jī)——程序實(shí)現(xiàn)(中斷PWM/延時函數(shù)
    發(fā)表于 11-17 11:36 ?62次下載
    51<b class='flag-5'>單片機(jī)</b>控制42步進(jìn)電機(jī)——程序<b class='flag-5'>實(shí)現(xiàn)</b>(中斷PWM/延時<b class='flag-5'>函數(shù)</b>)

    華大單片機(jī)HC32L136+RTT踩坑(官方延時函數(shù)

    問題:移植完RTT后運(yùn)行正常,加入ADC測量后卡死在空閑線程。原因:華大單片機(jī)官方庫中含有延時函數(shù),延時函數(shù)使用滴答定時器實(shí)現(xiàn)。在ADC使用
    發(fā)表于 11-23 17:21 ?13次下載
    華大<b class='flag-5'>單片機(jī)</b>HC32L136+RTT踩坑(官方延時<b class='flag-5'>函數(shù)</b>)

    單片機(jī) keil調(diào)試的時候進(jìn)入不了main函數(shù)

    單片機(jī) keil調(diào)試的時候進(jìn)入不了main函數(shù)
    發(fā)表于 12-03 20:51 ?6次下載
    <b class='flag-5'>單片機(jī)</b> keil調(diào)試的時候進(jìn)入不了main<b class='flag-5'>函數(shù)</b>

    單片機(jī)里的程序是如何運(yùn)行

    我們想要理解單片機(jī)是如何運(yùn)行程序的,我們首先需要了解單片機(jī)的組成,我們這里以80C51單片機(jī)為例來理解程序在單片機(jī)中是如何
    的頭像 發(fā)表于 02-17 10:47 ?4510次閱讀
    <b class='flag-5'>單片機(jī)</b>里的程序是如何<b class='flag-5'>運(yùn)行</b>?

    如何在單片機(jī)中使用malloc函數(shù)

    但是每個嵌入式 RTOS 都會有自己的內(nèi)存管理方式,本文就來聊聊我對 malloc 函數(shù)單片機(jī)程序設(shè)計(jì)中的一些看法。 本文并不是要說明在單片機(jī)中怎么使用 malloc函數(shù),而是
    的頭像 發(fā)表于 04-24 09:50 ?2589次閱讀
    如何在<b class='flag-5'>單片機(jī)</b>中使用malloc<b class='flag-5'>函數(shù)</b>

    單片機(jī)用按鈕中斷函數(shù)

    單片機(jī)用按鈕中斷函數(shù)? 單片機(jī)中斷是一種能夠使單片機(jī)響應(yīng)外部信號的機(jī)制,這種機(jī)制允許單片機(jī)在處理其他任務(wù)時去響應(yīng)中斷信號,從而提高
    的頭像 發(fā)表于 09-01 10:17 ?1564次閱讀

    單片機(jī)main函數(shù)結(jié)束干嘛去了?

    單片機(jī)main函數(shù)結(jié)束干嘛去了?
    的頭像 發(fā)表于 10-18 17:37 ?729次閱讀
    <b class='flag-5'>單片機(jī)</b>main<b class='flag-5'>函數(shù)</b>結(jié)束干嘛去了?

    如何優(yōu)化單片機(jī)項(xiàng)目的功耗

    在現(xiàn)代電子設(shè)計(jì)中,功耗優(yōu)化已成為一個不可忽視的重要議題。對于單片機(jī)(MCU)項(xiàng)目而言,功耗不僅關(guān)系到產(chǎn)品的能效比,還直接影響到電池壽命和熱管理。 硬件層面的功耗優(yōu)化 1. 選擇合適的單片機(jī)
    的頭像 發(fā)表于 11-01 14:16 ?395次閱讀
    主站蜘蛛池模板: 欧美片第1页 综合| 国产成人教育视频在线观看 | 99re6在线视频国产精品欧美| 入禽太深免费高清在线观看5| 久久机热免费视频| 国产精品久久久久久搜索| 99国产福利| 伊人青青操| 亚洲 欧美 日韩 国产 视频| 欧美高清 videos sexo| 教室眠催白丝美女校花| 国产99精品在线观看| 999视频在线观看| 伊人精品国产| 亚洲国产中文在线视频免费| 日韩无码在线| 欧美三级aaa| 擼擼擼麻豆密臀AV| 精品视频在线观看视频免费视频| 国产av在在免费线观看美女| ppypp午夜限制不卡影院私人| 中文国产成人精品久久免费| 亚洲欧美一区二区三区九九九| 视频一区精品自拍亚洲| 秋霞鲁丝片Av无码| 男人和女人一级黄色大片| 久久免费看少妇级毛片蜜臀| 果冻传媒2021一二三在线观看| 国产福利一区二区精品| 厕所RXXX| va亚洲va天堂va视频在线| 99pao成人国产永久免费视频| 岳扒开让我添| 永久免费看mv网站入口| 亚洲熟妇无码乱子AV电影| 亚洲精品第一综合99久久| 无套日出白浆在线播放| 色拍拍噜噜噜久久蜜桃| 日本欧美午夜三级| 日日碰狠狠躁久久躁77777| 日韩中文网|