一份不錯(cuò)的嵌入式C編碼規(guī)范!

嵌入式大雜燴 2023-07-03 20:31

最重要的一條規(guī)則

編寫(xiě)代碼時(shí)最重要的一條規(guī)則是:檢查周圍的代碼并嘗試模仿它。

作為維護(hù)人員,如果收到的補(bǔ)丁明顯與周圍代碼的編碼風(fēng)格不同,這是令人沮喪的。這是不尊重人的,就像某人穿著泥濘的鞋子走進(jìn)一間一塵不染的房子。

因此,無(wú)論本文推薦的是什么,如果已經(jīng)編寫(xiě)了代碼并且您正在對(duì)其進(jìn)行修補(bǔ),請(qǐng)保持其當(dāng)前的樣式一致,即使它不是您最喜歡的樣式。

一般規(guī)則

這里列出了最明顯和最重要的一般規(guī)則。在你繼續(xù)閱讀其他章節(jié)之前,請(qǐng)仔細(xì)檢查它們。

  • 使用C99標(biāo)準(zhǔn)

  • 不使用制表符,而是使用空格

  • 每個(gè)縮進(jìn)級(jí)別使用4個(gè)空格

  • 在關(guān)鍵字和左括號(hào)之間使用一個(gè)空格

  • 在函數(shù)名和左括號(hào)之間不要使用空格

int32_t?a?=?sum(4,?3);??????????????/*?OK?*/
int32_t?a?=?sum?(4,?3);?????????????/*?Wrong?*/
  • 不要在變量/函數(shù)/宏/類型中使用__或_前綴。這是為C語(yǔ)言本身保留的

  • 對(duì)于嚴(yán)格的模塊私有函數(shù),使用prv_ name前綴

  • 對(duì)于包含下劃線_ char的變量/函數(shù)/宏/類型,只能使用小寫(xiě)字母

  • 左花括號(hào)總是與關(guān)鍵字(for, while, do, switch, if,…)在同一行

size_t?i;
for?(i?=?0;?i?5;?++i)?{???????????/*?OK?*/
}
for?(i?=?0;?i?5;?++i){????????????/*?Wrong?*/
}
for?(i?=?0;?i?5;?++i)?????????????/*?Wrong?*/
{
}
  • 在比較操作符和賦值操作符之前和之后使用單個(gè)空格
//?微信公眾號(hào):嵌入式大雜燴
int32_t?a;
a?=?3?+?4;??????????????/*?OK?*/
for?(a?=?0;?a?5;?++a)?/*?OK?*/
a=3+4;??????????????????/*?Wrong?*/
a?=?3+4;????????????????/*?Wrong?*/
for?(a=0;a<5;++a)???????/*?Wrong?*/
  • 每個(gè)逗號(hào)后用單空格
//?微信公眾號(hào):嵌入式大雜燴
func_name(5,?4);????????/*?OK?*/
func_name(4,3);?????????/*?Wrong?*/
  • 不要初始化靜態(tài)和全局變量為0(或NULL),讓編譯器為您做
static?int32_t?a;???????/*?OK?*/
static?int32_t?b?=?4;???/*?OK?*/
static?int32_t?a?=?0;???/*?Wrong?*/

void
my_func(void)?
{
????static?int32_t*?ptr;/*?OK?*/
????static?char?abc?=?0;/*?Wrong?*/
}
  • 在同一行中聲明所有相同類型的局部變量
void
my_func(void)?
{
????char?a;?????????????/*?OK?*/
????char?b;?????????????/*?Wrong,?variable?with?char?type?already?exists?*/
????char?a,?b;??????????/*?OK?*/
}
  • 按順序聲明局部變量

i.自定義結(jié)構(gòu)和枚舉

ii.整數(shù)類型,更寬的無(wú)符號(hào)類型優(yōu)先

iii.單/雙浮點(diǎn)

int
my_func(void)?
{
????/*?1?*/
????my_struct_t?my;?????/*?First?custom?structures?*/
????my_struct_ptr_t*?p;?/*?Pointers?too?*/

????/*?2?*/
????uint32_t?a;
????int32_t?b;
????uint16_t?c;
????int16_t?g;
????char?h;
????/*?...?*/

????/*?3?*/
????double?d;
????float?f;
}
  • 總是在塊的開(kāi)頭聲明局部變量,在第一個(gè)可執(zhí)行語(yǔ)句之前
  • 在for循環(huán)中聲明計(jì)數(shù)器變量
/*?OK?*/
for?(size_t?i?=?0;?i?10;?++i)

/*?OK,?if?you?need?counter?variable?later?*/
size_t?i;
for?(i?=?0;?i?10;?++i)?{
????if?(...)?{
????????break;
????}
}
if?(i?==?10)?{

}

/*?Wrong?*/
size_t?i;
for?(i?=?0;?i?10;?++i)?...
  • 避免在聲明中使用函數(shù)調(diào)用來(lái)賦值變量,除了單個(gè)變量
void
a(void)?
{
????/*?Avoid?function?calls?when?declaring?variable?*/
????int32_t?a,?b?=?sum(1,?2);

????/*?Use?this?*/
????int32_t?a,?b;
????b?=?sum(1,?2);

????/*?This?is?ok?*/
????uint8_t?a?=?3,?b?=?4;
}
  • 除了char、float或double之外,始終使用stdint.h標(biāo)準(zhǔn)庫(kù)中聲明的類型。例如,8位的uint8_t等

  • 不要使用stdbool.h庫(kù)。分別使用1或0表示真或假

/*?OK?*/
uint8_t?status;
status?=?0;

/*?Wrong?*/
#include?
bool?status?=?true;
  • 永遠(yuǎn)不要與真實(shí)相比較。例如,使用if(check_func()){…}替換if (check_func() == 1)

  • 總是將指針與空值進(jìn)行比較

void*?ptr;

/*?...?*/

/*?OK,?compare?against?NULL?*/
if?(ptr?==?NULL?||?ptr?!=?NULL)?{

}

/*?Wrong?*/
if?(ptr?||?!ptr)?{

}
  • 總是使用前增量(和遞減),而不是后增量(和遞減)
int32_t?a?=?0;
...

a++;????????????/*?Wrong?*/
++a;????????????/*?OK?*/

for?(size_t?j?=?0;?j?10;?++j)?{}??/*?OK?*/
  • 總是使用size_t作為長(zhǎng)度或大小變量

  • 如果函數(shù)不應(yīng)該修改指針?biāo)赶虻膬?nèi)存,則總是使用const作為指針

  • 如果不應(yīng)該修改函數(shù)的形參或變量,則總是使用const

/*?When?d?could?be?modified,?data?pointed?to?by?d?could?not?be?modified?*/
void
my_func(const?void*?d)?
{

}

/*?When?d?and?data?pointed?to?by?d?both?could?not?be?modified?*/
void
my_func(const?void*?const?d)?
{

}

/*?Not?required,?it?is?advised?*/
void
my_func(const?size_t?len)?
{

}

/*?When?d?should?not?be?modified?inside?function,?only?data?pointed?to?by?d?could?be?modified?*/
void
my_func(void*?const?d)?
{

}
  • 當(dāng)函數(shù)可以接受任何類型的指針時(shí),總是使用void *,不要使用uint8_t *。函數(shù)在實(shí)現(xiàn)時(shí)必須注意正確的類型轉(zhuǎn)換
/*
?*?To?send?data,?function?should?not?modify?memory?pointed?to?by?`data`?variable
?*?thus?`const`?keyword?is?important
?*
?*?To?send?generic?data?(or?to?write?them?to?file)
?*?any?type?may?be?passed?for?data,
?*?thus?use?`void?*`
?*/

/*?OK?example?*/
void
send_data(const?void*?data,?size_t?len)?
{?/*?OK?*/
????/*?Do?not?cast?`void?*`?or?`const?void?*`?*/
????const?uint8_t*?d?=?data;/*?Function?handles?proper?type?for?internal?usage?*/
}

void
send_data(const?void*?data,?int?len)?
{????/*?Wrong,?not?not?use?int?*/
}
  • 總是使用括號(hào)和sizeof操作符

  • 不要使用變長(zhǎng)數(shù)組。使用動(dòng)態(tài)內(nèi)存分配代替標(biāo)準(zhǔn)C malloc和自由函數(shù),或者如果庫(kù)/項(xiàng)目提供了自定義內(nèi)存分配,使用它的實(shí)現(xiàn)

    看看LwMEM,一個(gè)自定義內(nèi)存管理庫(kù)。

/*?OK?*/
#include?
void
my_func(size_t?size)?
{
????int32_t*?arr;
????arr?=?malloc(sizeof(*arr)?*?n);?/*?OK,?Allocate?memory?*/
????arr?=?malloc(sizeof?*arr?*?n);??/*?Wrong,?brackets?for?sizeof?operator?are?missing?*/
????if?(arr?==?NULL)?{
????????/*?FAIL,?no?memory?*/
????}

????free(arr);??/*?Free?memory?after?usage?*/
}

/*?Wrong?*/
void
my_func(size_t?size)?
{
????int32_t?arr[size];??/*?Wrong,?do?not?use?VLA?*/
}
  • 總是將variable與0進(jìn)行比較,除非它被視為布爾類型

  • 永遠(yuǎn)不要將布爾處理的變量與0或1進(jìn)行比較。用NOT(!)代替

size_t?length?=?5;??/*?Counter?variable?*/
uint8_t?is_ok?=?0;??/*?Boolean-treated?variable?*/
if?(length)?????????/*?Wrong,?length?is?not?treated?as?boolean?*/
if?(length?>?0)?????/*?OK,?length?is?treated?as?counter?variable?containing?multi?values,?not?only?0?or?1?*/
if?(length?==?0)????/*?OK,?length?is?treated?as?counter?variable?containing?multi?values,?not?only?0?or?1?*/

if?(is_ok)??????????/*?OK,?variable?is?treated?as?boolean?*/
if?(!is_ok)?????????/*?OK,?-||-?*/
if?(is_ok?==?1)?????/*?Wrong,?never?compare?boolean?variable?against?1!?*/
if?(is_ok?==?0)?????/*?Wrong,?use?!?for?negative?check?*/
  • 對(duì)于注釋,總是使用/* comment */,即使是單行注釋
  • 在頭文件中總是包含帶有extern關(guān)鍵字的c++檢查
  • 每個(gè)函數(shù)都必須包含doxygen-enabled注釋,即使函數(shù)是靜態(tài)的
  • 使用英文名稱/文本的函數(shù),變量,注釋
  • 變量使用小寫(xiě)字母
  • 如果變量包含多個(gè)名稱,請(qǐng)使用下劃線。force_redraw。不要使用forceRedraw
  • 對(duì)于C標(biāo)準(zhǔn)庫(kù)的包含文件,請(qǐng)始終使用<和>。例如,# include < stdlib.h >
  • 對(duì)于自定義庫(kù),請(qǐng)始終使用""。例如,# include“my_library.h”
  • 當(dāng)轉(zhuǎn)換為指針類型時(shí),總是將星號(hào)與類型對(duì)齊,例如。uint8_t* t = (uint8_t*)var_width_diff_type
  • 始終尊重項(xiàng)目或庫(kù)中已經(jīng)使用的代碼風(fēng)格

注釋

  • 不允許以//開(kāi)頭的注釋??偸鞘褂?* comment */,即使是單行注釋
//This?is?comment?(wrong)
/*?This?is?comment?(ok)?*/
  • 對(duì)于多行注釋,每行使用空格+星號(hào)
/*
?*?This?is?multi-line?comments,
?*?written?in?2?lines?(ok)
?*/


/**
?*?Wrong,?use?double-asterisk?only?for?doxygen?documentation
?*/


/*
*?Single?line?comment?without?space?before?asterisk?(wrong)
*/


/*
?*?Single?line?comment?in?multi-line?configuration?(wrong)
?*/


/*?Single?line?comment?(ok)?*/
  • 注釋時(shí)使用12個(gè)縮進(jìn)(12 * 4個(gè)空格)偏移量。如果語(yǔ)句大于12個(gè)縮進(jìn),將注釋4-空格對(duì)齊(下面的例子)到下一個(gè)可用縮進(jìn)
void
my_func(void)?
{
????char?a,?b;

????a?=?call_func_returning_char_a(a);??????????/*?This?is?comment?with?12*4?spaces?indent?from?beginning?of?line?*/
????b?=?call_func_returning_char_a_but_func_name_is_very_long(a);???/*?This?is?comment,?aligned?to?4-spaces?indent?*/
}

函數(shù)

  • 每個(gè)可以從模塊外部訪問(wèn)的函數(shù)都必須包含函數(shù)原型(或聲明)

  • 函數(shù)名必須小寫(xiě),可以用下劃線_分隔

/*?OK?*/
void?my_func(void);
void?myfunc(void);

/*?Wrong?*/
void?MYFunc(void);
void?myFunc();
  • 當(dāng)函數(shù)返回指針時(shí),將星號(hào)對(duì)齊到返回類型
/*?OK?*/
const?char*?my_func(void);
my_struct_t*?my_func(int32_t?a,?int32_t?b);

/*?Wrong?*/
const?char?*my_func(void);
my_struct_t?*?my_func(void);
  • 對(duì)齊所有的功能原型(使用相同/相似的功能)以提高可讀性
/*?OK,?function?names?aligned?*/
void????????set(int32_t?a);
my_type_t???get(void);
my_ptr_t*???get_ptr(void);

/*?Wrong?*/
void?set(int32_t?a);
const?char?*?get(void);
  • 函數(shù)實(shí)現(xiàn)必須在單獨(dú)的行中包含返回類型和可選的其他關(guān)鍵字
/*?OK?*/
int32_t
foo(void)?
{
????return?0;
}

/*?OK?*/
static?const?char*
get_string(void)?
{
????return?"Hello?world!\r\n";
}

/*?Wrong?*/
int32_t?foo(void)?{
????return?0;
}

變量

  • 使變量名全部小寫(xiě),下劃線_字符可選
/*?OK?*/
int32_t?a;
int32_t?my_var;
int32_t?myvar;

/*?Wrong?*/
int32_t?A;
int32_t?myVar;
int32_t?MYVar;
  • 按類型將局部變量分組在一起
void
foo(void)?
{
????int32_t?a,?b;???/*?OK?*/
????char?a;
????char?b;?????????/*?Wrong,?char?type?already?exists?*/
}
  • 不要在第一個(gè)可執(zhí)行語(yǔ)句之后聲明變量
void
foo(void)?
{
????int32_t?a;
????a?=?bar();
????int32_t?b;??????/*?Wrong,?there?is?already?executable?statement?*/
}
  • 你可以在下一個(gè)縮進(jìn)級(jí)別中聲明新的變量
int32_t?a,?b;
a?=?foo();
if?(a)?{
????int32_t?c,?d;???/*?OK,?c?and?d?are?in?if-statement?scope?*/
????c?=?foo();
????int32_t?e;??????/*?Wrong,?there?was?already?executable?statement?inside?block?*/
}
  • 用星號(hào)聲明指針變量與類型對(duì)齊
/*?OK?*/
char*?a;

/*?Wrong?*/
char?*a;
char?*?a;
  • 當(dāng)聲明多個(gè)指針變量時(shí),可以使用星號(hào)對(duì)變量名進(jìn)行聲明
/*?OK?*/
char?*p,?*n;

結(jié)構(gòu)、枚舉類型定義

  • 結(jié)構(gòu)名或枚舉名必須小寫(xiě),單詞之間有下劃線_字符

  • 結(jié)構(gòu)或枚舉可以包含typedef關(guān)鍵字

  • 所有結(jié)構(gòu)成員都必須小寫(xiě)

  • 所有枚舉成員必須是大寫(xiě)的

  • 結(jié)構(gòu)/枚舉必須遵循doxygen文檔語(yǔ)法

在聲明結(jié)構(gòu)體時(shí),它可以使用以下三種不同的選項(xiàng)之一:

1、當(dāng)結(jié)構(gòu)體僅用名稱聲明時(shí),它的名稱后不能包含_t后綴。

struct?struct_name?{
????char*?a;
????char?b;
};

2、當(dāng)只使用typedef聲明結(jié)構(gòu)時(shí),它的名稱后面必須包含_t后綴。

typedef?struct?{
????char*?a;
????char?b;
}?struct_name_t;

3、當(dāng)結(jié)構(gòu)用name和typedef聲明時(shí),它不能包含_t作為基本名稱,它必須在它的名稱后面包含_t后綴作為typedef部分。

typedef?struct?struct_name?{
????char*?a;
????char?b;
????char?c;
}?struct_name_t;

錯(cuò)誤聲明的例子及其建議的糾正:

/*?a?and?b?must?be?separated?to?2?lines?*/
/*?Name?of?structure?with?typedef?must?include?_t?suffix?*/
typedef?struct?{
????int32_t?a,?b;
}?a;

/*?Corrected?version?*/
typedef?struct?{
????int32_t?a;
????int32_t?b;
}?a_t;

/*?Wrong?name,?it?must?not?include?_t?suffix?*/
struct?name_t?{
????int32_t?a;
????int32_t?b;
};

/*?Wrong?parameters,?must?be?all?uppercase?*/
typedef?enum?{
????MY_ENUM_TESTA,
????my_enum_testb,
}?my_enum_t;
  • 在聲明時(shí)初始化結(jié)構(gòu)時(shí),使用C99初始化風(fēng)格
/*?OK?*/
a_t?a?=?{
????.a?=?4,
????.b?=?5,
};

/*?Wrong?*/
a_t?a?=?{1,?2};
  • 當(dāng)為函數(shù)句柄引入new typedef時(shí),使用_fn后綴
/*?Function?accepts?2?parameters?and?returns?uint8_t?*/
/*?Name?of?typedef?has?`_fn`?suffix?*/
typedef?uint8_t?(*my_func_typedef_fn)(uint8_t?p1,?const?char*?p2);

復(fù)合語(yǔ)句

  • 每個(gè)復(fù)合語(yǔ)句必須包括左花括號(hào)和右花括號(hào),即使它只包含1個(gè)嵌套語(yǔ)句

  • 每個(gè)復(fù)合語(yǔ)句必須包含單個(gè)縮進(jìn);嵌套語(yǔ)句時(shí),每個(gè)嵌套包含1個(gè)縮進(jìn)大小

/*?OK?*/
if?(c)?{
????do_a();
}?else?{
????do_b();
}

/*?Wrong?*/
if?(c)
????do_a();
else
????do_b();

/*?Wrong?*/
if?(c)?do_a();
else?do_b();
  • 在if或if-else-if語(yǔ)句的情況下,else必須與第一條語(yǔ)句的右括號(hào)在同一行
/*?OK?*/
if?(a)?{

}?else?if?(b)?{

}?else?{

}

/*?Wrong?*/
if?(a)?{

}
else?{

}

/*?Wrong?*/
if?(a)?{

}
else
{

}
  • 在do-while語(yǔ)句的情況下,while部分必須與do部分的右括號(hào)在同一行
/*?OK?*/
do?{
????int32_t?a;
????a?=?do_a();
????do_b(a);
}?while?(check());

/*?Wrong?*/
do
{
/*?...?*/
}?while?(check());

/*?Wrong?*/
do?{
/*?...?*/
}
while?(check());
  • 每一個(gè)開(kāi)括號(hào)都需要縮進(jìn)
if?(a)?{
????do_a();
}?else?{
????do_b();
????if?(c)?{
????????do_c();
????}
}
  • 不要做沒(méi)有花括號(hào)的復(fù)合語(yǔ)句,即使是單個(gè)語(yǔ)句。下面的例子展示了一些不好的做法
if?(a)?do_b();
else?do_c();

if?(a)?do_a();?else?do_b();
  • 空while循環(huán)、do-while循環(huán)或for循環(huán)必須包含花括號(hào)
/*?OK?*/
while?(is_register_bit_set())?{}

/*?Wrong?*/
while?(is_register_bit_set());
while?(is_register_bit_set())?{?}
while?(is_register_bit_set())?{
}
  • 如果while(或for、do-while等)為空(嵌入式編程中也可能是這種情況),請(qǐng)使用空的單行括號(hào)
/*?Wait?for?bit?to?be?set?in?embedded?hardware?unit
uint32_t*?addr?=?HW_PERIPH_REGISTER_ADDR;

/*?Wait?bit?13?to?be?ready?*/

while?(*addr?&?(1?<13))?{}????????/*?OK,?empty?loop?contains?no?spaces?inside?curly?brackets?*/
while?(*addr?&?(1?<13))?{?}???????/*?Wrong?*/
while?(*addr?&?(1?<13))?{?????????/*?Wrong?*/

}
while?(*addr?&?(1?<13));??????????/*?Wrong,?curly?brackets?are?missing.?Can?lead?to?compiler?warnings?or?unintentional?bugs?*/
  • 盡量避免在循環(huán)塊內(nèi)遞增變量,參見(jiàn)示例
/*?Not?recommended?*/
int32_t?a?=?0;
while?(a?10)?{
????.
????..
????...
????++a;
}

/*?Better?*/
for?(size_t?a?=?0;?a?10;?++a)?{

}

/*?Better,?if?inc?may?not?happen?in?every?cycle?*/
for?(size_t?a?=?0;?a?10;?)?{
????if?(...)?{
????????++a;
????}
}

分支語(yǔ)句

  • 為每個(gè)case語(yǔ)句添加單個(gè)縮進(jìn)
  • 使用額外的單縮進(jìn)break語(yǔ)句在每個(gè)case或default
/*?OK,?every?case?has?single?indent?*/
/*?OK,?every?break?has?additional?indent?*/
switch?(check())?{
????case?0:
????????do_a();
????????break;
????case?1:
????????do_b();
????????break;
????default:
????????break;
}

/*?Wrong,?case?indent?missing?*/
switch?(check())?{
case?0:
????do_a();
????break;
case?1:
????do_b();
????break;
default:
????break;
}

/*?Wrong?*/
switch?(check())?{
????case?0:
????????do_a();
????break;??????/*?Wrong,?break?must?have?indent?as?it?is?under?case?*/
????case?1:
????do_b();?????/*?Wrong,?indent?under?case?is?missing?*/
????break;
????default:
????????break;
}
  • 總是包含default語(yǔ)句
/*?OK?*/
switch?(var)?{
????case?0:
????????do_job();
????????break;
????default:?break;
}

/*?Wrong,?default?is?missing?*/
switch?(var)?{
????case?0:
????????do_job();
????????break;
}
  • 如果需要局部變量,則使用花括號(hào)并在里面放入break語(yǔ)句。將左花括號(hào)放在case語(yǔ)句的同一行
switch?(a)?{
????/*?OK?*/
????case?0:?{
????????int32_t?a,?b;
????????char?c;
????????a?=?5;
????????/*?...?*/
????????break;
????}

????/*?Wrong?*/
????case?1:
????{
????????int32_t?a;
????????break;
????}

????/*?Wrong,?break?shall?be?inside?*/
????case?2:?{
????????int32_t?a;
????}
????break;
}

宏和預(yù)處理指令

  • 總是使用宏而不是文字常量,特別是對(duì)于數(shù)字
  • 所有的宏必須是全大寫(xiě)的,并帶有下劃線_字符(可選),除非它們被明確標(biāo)記為function,將來(lái)可能會(huì)被常規(guī)函數(shù)語(yǔ)法替換
/*?OK?*/
#define?MY_MACRO(x)?????????((x)?*?(x))

/*?Wrong?*/
#define?square(x)???????????((x)?*?(x))
  • 總是用圓括號(hào)保護(hù)輸入?yún)?shù)
/*?OK?*/
#define?MIN(x,?y)???????????((x)?

/*?Wrong?*/
#define?MIN(x,?y)???????????x?
  • 總是用括號(hào)保護(hù)最終的宏計(jì)算
/*?Wrong?*/
#define?MIN(x,?y)???????????(x)?
#define?SUM(x,?y)???????????(x)?+?(y)

/*?Imagine?result?of?this?equation?using?wrong?SUM?implementation?*/
int32_t?x?=?5?*?SUM(3,?4);??/*?Expected?result?is?5?*?7?=?35?*/
int32_t?x?=?5?*?(3)?+?(4);??/*?It?is?evaluated?to?this,?final?result?=?19?which?is?not?what?we?expect?*/

/*?Correct?implementation?*/
#define?MIN(x,?y)???????????((x)?
#define?SUM(x,?y)???????????((x)?+?(y))
  • 當(dāng)宏使用多個(gè)語(yǔ)句時(shí),使用do-while(0)語(yǔ)句保護(hù)它
typedef?struct?{
????int32_t?px,?py;
}?point_t;
point_t?p;??????????????????/*?Define?new?point?*/

/*?Wrong?implementation?*/

/*?Define?macro?to?set?point?*/
#define?SET_POINT(p,?x,?y)??(p)->px?=?(x);?(p)->py?=?(y)????/*?2?statements.?Last?one?should?not?implement?semicolon?*/

SET_POINT(&p,?3,?4);????????/*?Set?point?to?position?3,?4.?This?evaluates?to...?*/
(&p)->px?=?(3);?(&p)->py?=?(4);?/*?...?to?this.?In?this?example?this?is?not?a?problem.?*/

/*?Consider?this?ugly?code,?however?it?is?valid?by?C?standard?(not?recommended)?*/
if?(a)??????????????????????/*?If?a?is?true?*/
????if?(b)??????????????????/*?If?b?is?true?*/
????????SET_POINT(&p,?3,?4);/*?Set?point?to?x?=?3,?y?=?4?*/
????else
????????SET_POINT(&p,?5,?6);/*?Set?point?to?x?=?5,?y?=?6?*/

/*?Evaluates?to?code?below.?Do?you?see?the?problem??*/
if?(a)
????if?(b)
????????(&p)->px?=?(3);?(&p)->py?=?(4);
????else
????????(&p)->px?=?(5);?(&p)->py?=?(6);

/*?Or?if?we?rewrite?it?a?little?*/
if?(a)
????if?(b)
????????(&p)->px?=?(3);
????????(&p)->py?=?(4);
????else
????????(&p)->px?=?(5);
????????(&p)->py?=?(6);

/*
?*?Ask?yourself?a?question:?To?which?`if`?statement?`else`?keyword?belongs?
?*
?*?Based?on?first?part?of?code,?answer?is?straight-forward.?To?inner?`if`?statement?when?we?check?`b`?condition
?*?Actual?answer:?Compilation?error?as?`else`?belongs?nowhere
?*/


/*?Better?and?correct?implementation?of?macro?*/
#define?SET_POINT(p,?x,?y)??do?{?(p)->px?=?(x);?(p)->py?=?(y);?}?while?(0)????/*?2?statements.?No?semicolon?after?while?loop?*/
/*?Or?even?better?*/
#define?SET_POINT(p,?x,?y)??do?{????\???/*?Backslash?indicates?statement?continues?in?new?line?*/
????(p)->px?=?(x);??????????????????\
????(p)->py?=?(y);??????????????????\
}?while?(0)?????????????????????????????/*?2?statements.?No?semicolon?after?while?loop?*/

/*?Now?original?code?evaluates?to?*/
if?(a)
????if?(b)
????????do?{?(&p)->px?=?(3);?(&p)->py?=?(4);?}?while?(0);
????else
????????do?{?(&p)->px?=?(5);?(&p)->py?=?(6);?}?while?(0);

/*?Every?part?of?`if`?or?`else`?contains?only?`1`?inner?statement?(do-while),?hence?this?is?valid?evaluation?*/

/*?To?make?code?perfect,?use?brackets?for?every?if-ifelse-else?statements?*/
if?(a)?{????????????????????/*?If?a?is?true?*/
????if?(b)?{????????????????/*?If?b?is?true?*/
????????SET_POINT(&p,?3,?4);/*?Set?point?to?x?=?3,?y?=?4?*/
????}?else?{
????????SET_POINT(&p,?5,?6);/*?Set?point?to?x?=?5,?y?=?6?*/
????}
}
  • 不縮進(jìn)子語(yǔ)句內(nèi)#if語(yǔ)句
/*?OK?*/
#if?defined(XYZ)
#if?defined(ABC)
/*?do?when?ABC?defined?*/
#endif?/*?defined(ABC)?*/
#else?/*?defined(XYZ)?*/
/*?Do?when?XYZ?not?defined?*/
#endif?/*?!defined(XYZ)?*/

/*?Wrong?*/
#if?defined(XYZ)
????#if?defined(ABC)
????????/*?do?when?ABC?defined?*/
????#endif?/*?defined(ABC)?*/
#else?/*?defined(XYZ)?*/
????/*?Do?when?XYZ?not?defined?*/
#endif?/*?!defined(XYZ)?*/

文檔

文檔化的代碼允許doxygen解析和通用的html/pdf/latex輸出,因此正確地執(zhí)行是非常重要的。

  • 對(duì)變量、函數(shù)和結(jié)構(gòu)/枚舉使用doxygen支持的文檔樣式
  • 經(jīng)常使用\作為doxygen,不要使用@
  • 始終使用5x4空格(5個(gè)制表符)作為文本行開(kāi)始的偏移量
/**
?*?\brief???????????Holds?pointer?to?first?entry?in?linked?list
?*??????????????????Beginning?of?this?text?is?5?tabs?(20?spaces)?from?beginning?of?line
?*/

static
type_t*?list;
  • 每個(gè)結(jié)構(gòu)/枚舉成員都必須包含文檔
  • 注釋的開(kāi)頭使用12x4空格偏移量
/**
?*?\brief???????????This?is?point?struct
?*?\note????????????This?structure?is?used?to?calculate?all?point
?*??????????????????????related?stuff
?*/

typedef?struct?{
????int32_t?x;??????????????????????????????????/*!
????int32_t?y;??????????????????????????????????/*!
????int32_t?size;???????????????????????????????/*!????????????????????????????????????????????????????Since?comment?is?very?big,
????????????????????????????????????????????????????you?may?go?to?next?line?*/

}?point_t;

/**
?*?\brief???????????Point?color?enumeration
?*/

typedef?enum?{
????COLOR_RED,??????????????????????????????????/*!????????????????????????????????????????????????????spaces?offset?from?beginning?of?line?*/
????COLOR_GREEN,????????????????????????????????/*!
????COLOR_BLUE,?????????????????????????????????/*!
}?point_color_t;
  • 函數(shù)的文檔必須在函數(shù)實(shí)現(xiàn)中編寫(xiě)(通常是源文件)

  • 函數(shù)必須包括簡(jiǎn)要和所有參數(shù)文檔

  • 如果每個(gè)參數(shù)分別為in或out輸入和輸出,則必須注意

  • 如果函數(shù)返回某個(gè)值,則必須包含返回形參。這不適用于void函數(shù)

  • 函數(shù)可以包含其他doxygen關(guān)鍵字,如note或warning

  • 在參數(shù)名和描述之間使用冒號(hào):

/**
?*?\brief???????????Sum?`2`?numbers
?*?\param[in]???????a:?First?number
?*?\param[in]???????b:?Second?number
?*?\return??????????Sum?of?input?values
?*/

int32_t
sum(int32_t?a,?int32_t?b)?
{
????return?a?+?b;
}

/**
?*?\brief???????????Sum?`2`?numbers?and?write?it?to?pointer
?*?\note????????????This?function?does?not?return?value,?it?stores?it?to?pointer?instead
?*?\param[in]???????a:?First?number
?*?\param[in]???????b:?Second?number
?*?\param[out]??????result:?Output?variable?used?to?save?result
?*/

void
void_sum(int32_t?a,?int32_t?b,?int32_t*?result)?
{
????*result?=?a?+?b;
}
  • 如果函數(shù)返回枚舉的成員,則使用ref關(guān)鍵字指定哪個(gè)成員
/**
?*?\brief???????????My?enumeration
?*/

typedef?enum?{
????MY_ERR,?????????????????????????????????????/*!
????MY_OK???????????????????????????????????????/*!
}?my_enum_t;

/**
?*?\brief???????????Check?some?value
?*?\return??????????\ref?MY_OK?on?success,?member?of?\ref?my_enum_t?otherwise
?*/

my_enum_t
check_value(void)?
{
????return?MY_OK;
}
  • 對(duì)常量或數(shù)字使用符號(hào)(' NULL ' => NULL)
/**
?*?\brief???????????Get?data?from?input?array
?*?\param[in]???????in:?Input?data
?*?\return??????????Pointer?to?output?data?on?success,?`NULL`?otherwise
?*/

const?void?*
get_data(const?void*?in)?
{
????return?in;
}
  • 宏的文檔必須包括hideinitializer doxygen命令
/**
?*?\brief???????????Get?minimal?value?between?`x`?and?`y`
?*?\param[in]???????x:?First?value
?*?\param[in]???????y:?Second?value
?*?\return??????????Minimal?value?between?`x`?and?`y`
?*?\hideinitializer
?*/

#define?MIN(x,?y)???????((x)?

頭/源文件

  • 在文件末尾留下一個(gè)空行

  • 每個(gè)文件都必須包括文件的doxygen注釋和后跟空行的簡(jiǎn)要描述(使用doxygen時(shí))

/**
?*?\file????????????template.h
?*?\brief???????????Template?include?file
?*/

????????????????????/*?Here?is?empty?line?*/
  • 每個(gè)文件(頭文件或源文件)必須包含許可證(開(kāi)始注釋包括單個(gè)星號(hào),因?yàn)閐oxygen必須忽略這個(gè))

  • 使用與項(xiàng)目/庫(kù)已經(jīng)使用的相同的許可證

/**
?*?\file????????????template.h
?*?\brief???????????Template?include?file
?*/


/*
?*?Copyright?(c)?year?FirstName?LASTNAME
?*
?*?Permission?is?hereby?granted,?free?of?charge,?to?any?person
?*?obtaining?a?copy?of?this?software?and?associated?documentation
?*?files?(the?"Software"),?to?deal?in?the?Software?without?restriction,
?*?including?without?limitation?the?rights?to?use,?copy,?modify,?merge,
?*?publish,?distribute,?sublicense,?and/or?sell?copies?of?the?Software,
?*?and?to?permit?persons?to?whom?the?Software?is?furnished?to?do?so,
?*?subject?to?the?following?conditions:
?*
?*?The?above?copyright?notice?and?this?permission?notice?shall?be
?*?included?in?all?copies?or?substantial?portions?of?the?Software.
?*
?*?THE?SOFTWARE?IS?PROVIDED?"AS?IS",?WITHOUT?WARRANTY?OF?ANY?KIND,
?*?EXPRESS?OR?IMPLIED,?INCLUDING?BUT?NOT?LIMITED?TO?THE?WARRANTIES
?*?OF?MERCHANTABILITY,?FITNESS?FOR?A?PARTICULAR?PURPOSE
?*?AND?NONINFRINGEMENT.?IN?NO?EVENT?SHALL?THE?AUTHORS?OR?COPYRIGHT
?*?HOLDERS?BE?LIABLE?FOR?ANY?CLAIM,?DAMAGES?OR?OTHER?LIABILITY,
?*?WHETHER?IN?AN?ACTION?OF?CONTRACT,?TORT?OR?OTHERWISE,?ARISING
?*?FROM,?OUT?OF?OR?IN?CONNECTION?WITH?THE?SOFTWARE?OR?THE?USE?OR
?*?OTHER?DEALINGS?IN?THE?SOFTWARE.
?*
?*?This?file?is?part?of?library_name.
?*
?*?Author:??????????FirstName?LASTNAME?
?*/

  • 頭文件必須包含保護(hù)符#ifndef

  • 頭文件必須包含c++檢查

  • 在c++檢查之外包含外部頭文件

  • 首先用STL C文件包含外部頭文件,然后是應(yīng)用程序自定義文件

  • 頭文件必須包含其他所有頭文件,以便正確編譯,但不能包含更多頭文件(如果需要,.c應(yīng)該包含其余的頭文件)

  • 頭文件必須只公開(kāi)模塊公共變量/類型/函數(shù)

  • 在頭文件中使用extern作為全局模塊變量,稍后在源文件中定義它們

/*?file.h?...?*/
#ifndef?...

extern?int32_t?my_variable;?/*?This?is?global?variable?declaration?in?header?*/

#endif

/*?file.c?...?*/
int32_t?my_variable;????????/*?Actually?defined?in?source?*/
  • 不要把.c文件包含在另一個(gè).c文件中

  • .c文件應(yīng)該首先包含相應(yīng)的.h文件,然后是其他文件,除非另有明確的必要

  • 在頭文件中不包含模塊私有聲明

  • 頭文件示例(示例中沒(méi)有l(wèi)icense)

/*?License?comes?here?*/
#ifndef?TEMPLATE_HDR_H
#define?TEMPLATE_HDR_H

/*?Include?headers?*/

#ifdef?__cplusplus
extern?"C"?{
#endif?/*?__cplusplus?*/

/*?File?content?here?*/

#ifdef?__cplusplus
}
#endif?/*?__cplusplus?*/

#endif?/*?TEMPLATE_HDR_H?*/

本文來(lái)源網(wǎng)絡(luò),免費(fèi)傳達(dá)知識(shí),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系我進(jìn)行刪除。

往期推薦

《嵌入式Linux驅(qū)動(dòng)大全》

談?wù)勄度胧杰浖募嫒菪裕?/strong>

在公眾號(hào)聊天界面回復(fù)1024,可獲取嵌入式資源

嵌入式大雜燴 專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時(shí),內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!
評(píng)論
  •        很多人只見(jiàn)過(guò)封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過(guò)十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個(gè)生產(chǎn)過(guò)程里哪怕0.1微米的誤差,都會(huì)直接廢掉整批產(chǎn)品,這也是小尺寸晶振過(guò)去長(zhǎng)期依賴進(jìn)口,國(guó)內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 512瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 212432瀏覽
  • 導(dǎo)語(yǔ)在現(xiàn)代高速數(shù)字電路設(shè)計(jì)中,信號(hào)的完整性已不僅是理想波形推演,而是一場(chǎng)與物理非理想特性正面博弈的工程實(shí)踐。濾波器芯片作為凈化傳輸鏈路的關(guān)鍵屏障,其核心挑戰(zhàn)在于:能否有效識(shí)別并濾除那些隱匿在電平跳變過(guò)程中的亞納秒級(jí)瞬態(tài)脈沖干擾,這類干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統(tǒng)函數(shù)發(fā)生器受限于采樣率與邊沿速率,根本無(wú)法忠實(shí)復(fù)現(xiàn)如此狹窄且陡峭的異常波形。針對(duì)此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細(xì)刻畫(huà),配合SPG
    德思特測(cè)試測(cè)量 2026-08-05 14:06 5瀏覽
  • 做電池供電攝像頭、可視門(mén)鈴、戶外安防的同學(xué)應(yīng)該都踩過(guò)這個(gè)坑:攝像頭要拍,ISP、sensor、無(wú)線模塊全得開(kāi)著,整機(jī)電流動(dòng)輒幾百 mA。一節(jié) 18650 撐不了幾天,用戶投訴“怎么又沒(méi)電了”。有人會(huì)說(shuō):加個(gè) PIR 人體紅外不就行了?問(wèn)題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動(dòng)”,靈敏度飄忽。真正省電的思路應(yīng)該是:讓攝像頭平時(shí)徹底睡死,只有“前面有人/有動(dòng)靜”時(shí)才被一鍵喚醒——而負(fù)責(zé)這個(gè)“看門(mén)”角色的,最合適的是一顆低功耗雷達(dá)。一、為什么是雷達(dá),而不是 PI
    唯創(chuàng)知音語(yǔ)音芯片 2026-08-07 14:44 168瀏覽
  • 在物聯(lián)網(wǎng)從“萬(wàn)物互聯(lián)”邁向“萬(wàn)物智聯(lián)”的進(jìn)程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡(luò)覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場(chǎng)的絕對(duì)主力。隨著2G/3G網(wǎng)絡(luò)的逐步退網(wǎng)以及新國(guó)標(biāo)對(duì)終端設(shè)備智能化、定位功能的強(qiáng)制要求,Cat.1模組迎來(lái)了爆發(fā)式的增長(zhǎng)窗口。在這一關(guān)鍵節(jié)點(diǎn),基于華為海思Hi2131芯片設(shè)計(jì)的LTE Cat.1模組,憑借其在能效、射頻、架構(gòu)及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競(jìng)爭(zhēng)力的連接最優(yōu)解。核心技術(shù)優(yōu)勢(shì):重塑Cat.1能效與連接標(biāo)桿海
    用戶1778981989717 2026-08-05 21:04 199瀏覽
  • 摘要東莞市恒創(chuàng)連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專注于連接器國(guó)產(chǎn)替代、小間距大電流連接器、線對(duì)板連接器、線對(duì)線連接器、板對(duì)板連接器、電源連接器及定制連接器開(kāi)發(fā)。公司面向工業(yè)自動(dòng)化、新能源儲(chǔ)能、BMS、汽車電子、AI服務(wù)器、GPU供電、通信設(shè)備、醫(yī)療設(shè)備和智能家居等場(chǎng)景,提供從產(chǎn)品選型、替代評(píng)估、樣品驗(yàn)證到批量交付的一站式連接方案。恒創(chuàng)可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國(guó)際品牌部分系列的國(guó)產(chǎn)替代評(píng)估。常見(jiàn)替
    HC003 2026-08-07 10:14 155瀏覽
  • 在前六期中,我們已經(jīng)分別討論了 CRA 的適用范圍、整體影響、漏洞通報(bào)義務(wù)、風(fēng)險(xiǎn)評(píng)估與技術(shù)文檔證據(jù)鏈、第三方組件與 SBOM 供應(yīng)鏈治理,以及產(chǎn)品上市后的支持期、安全更新、用戶說(shuō)明和終止支持管理。到這里,企業(yè)已經(jīng)能夠回答幾個(gè)核心問(wèn)題:產(chǎn)品是否落入 CRA 適用范圍,產(chǎn)品由哪些組件構(gòu)成,企業(yè)如何證明自己在設(shè)計(jì)、開(kāi)發(fā)和上市前采取了必要的安全措施,以及產(chǎn)品上市后如何持續(xù)維護(hù)和安全下線。但對(duì)于真正準(zhǔn)備落地 CRA 合規(guī)的企業(yè)來(lái)說(shuō),還有一個(gè)更現(xiàn)實(shí)的問(wèn)題:CRA 的法規(guī)條文相對(duì)原則化,企業(yè)應(yīng)當(dāng)如何把“網(wǎng)絡(luò)安
    虹科云科技 2026-08-03 16:51 251289瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個(gè)產(chǎn)業(yè)園區(qū)里,暖通空調(diào)運(yùn)行著廠商私有協(xié)議,照明系統(tǒng)遵循專屬通信標(biāo)準(zhǔn),變配電、門(mén)禁安防各成體系——設(shè)備間數(shù)據(jù)壁壘森嚴(yán),上位平臺(tái)對(duì)接全靠定制化 “翻譯” 開(kāi)發(fā),不僅成本高企,交付周期也難以管控。這就是樓宇自控行業(yè)多年的痛點(diǎn):協(xié)議林立、封閉林立。而破局的鑰匙,早在30多年前就已經(jīng)寫(xiě)好了——BACnet。作為ASHRAE制定的樓宇自控國(guó)際標(biāo)準(zhǔn)協(xié)議,BACnet是如今全球樓宇自控系統(tǒng)(BAS)互聯(lián)互通的“通用語(yǔ)言”。新風(fēng)機(jī)、冷源群控、變配電、照明、門(mén)禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 193瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐?。使用開(kāi)關(guān)型的充電控制芯片不穩(wěn)定。嘗試自行設(shè)計(jì)一個(gè)。整體采用分立三極管 + TL431架構(gòu),分4個(gè)功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實(shí)現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導(dǎo)通,對(duì)地拉低 R1、R2 組成的分壓控制節(jié)點(diǎn)電位;該節(jié)點(diǎn)直
    southcreek 2026-08-07 13:45 468瀏覽
  • ?摘要:低價(jià)大流量卡正全面退市,政策收緊已成定局。面對(duì)傳統(tǒng)號(hào)卡的不確定性,隨身WiFi憑借穩(wěn)定連接、多設(shè)備共享、獨(dú)立設(shè)備和靈活套餐等優(yōu)勢(shì),成為務(wù)實(shí)可靠的備選方案。1、流量卡黃金時(shí)代要結(jié)束了通信行業(yè)正迎來(lái)一場(chǎng)前所未有的“地震式”調(diào)整——曾讓無(wú)數(shù)用戶追捧的低價(jià)大流量卡,正在全速退出各大平臺(tái)。這早已不是一次普通的競(jìng)合,而是一場(chǎng)趨勢(shì)性的行業(yè)洗牌?;赝^(guò)去,19元200G的神卡,那時(shí)真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及??扇缃瘢仡^再看,那種
    愛(ài)上電路設(shè)計(jì) 2026-08-03 10:21 128971瀏覽
  • 文:杜杰編輯:侯煜當(dāng)?shù)貢r(shí)間7月28日,美國(guó)特朗普政府落地最新科技封鎖政策,美國(guó)聯(lián)邦通信委員會(huì)(FCC)正式更新《受管制清單》,新增兩大類設(shè)備——境外生產(chǎn)的先進(jìn)機(jī)器人設(shè)備、境外生產(chǎn)的聯(lián)網(wǎng)電力逆變器。FCC在官方情況說(shuō)明書(shū)中明確,該類境外制造產(chǎn)品,“會(huì)對(duì)美國(guó)國(guó)家安全或美國(guó)民眾的人身安全構(gòu)成無(wú)法承受的風(fēng)險(xiǎn)”。本次新規(guī)設(shè)置明確豁免機(jī)制:經(jīng)美國(guó)國(guó)防部(DoW)、電力逆變器品類經(jīng)美國(guó)國(guó)土安全部(DHS)審核并授予“有條件批準(zhǔn)”,認(rèn)定對(duì)應(yīng)設(shè)備品類不存在重大安全風(fēng)險(xiǎn),即可獲得準(zhǔn)入豁免。同時(shí)政策嚴(yán)格執(zhí)行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 361瀏覽
  • 做藍(lán)牙音箱的工程師大概都碰過(guò)這個(gè)局面。產(chǎn)品要連手機(jī)放歌,要本地播開(kāi)機(jī)提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報(bào)。三件事拆開(kāi),早先的常規(guī)做法是音頻藍(lán)牙一顆料、數(shù)傳藍(lán)牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫(huà)越大,BOM 越算越貴,待機(jī)電流和固件工作量也跟著漲。WT2605C 出來(lái)以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍(lán)牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對(duì)藍(lán)牙音箱來(lái)說(shuō),最實(shí)在的好處就
    唯創(chuàng)知音語(yǔ)音芯片 2026-08-06 15:14 360瀏覽
  • 讓微弱脈沖信號(hào)更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測(cè)、時(shí)間分辨光譜、飛行時(shí)間質(zhì)譜等實(shí)驗(yàn)中,真正需要測(cè)量的信號(hào)往往只出現(xiàn)在一個(gè)很短的時(shí)間窗口內(nèi),卻被淹沒(méi)在遠(yuǎn)大于它的噪聲和背景之中。 針對(duì)這類穩(wěn)定重復(fù)的微弱脈沖與瞬態(tài)信號(hào),賽恩科儀為OE2052雙通道數(shù)字鎖相放大器帶來(lái)全新的Boxcar Averager功能升級(jí):在鎖相檢測(cè)之外,進(jìn)一步提供從周期波形觀察、門(mén)控測(cè)量到多周期平均的完整數(shù)字Boxcar測(cè)量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標(biāo)信號(hào)?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 13511瀏覽
  • 一、方案簡(jiǎn)介在Buildroot構(gòu)建的嵌入式Linux系統(tǒng)中部署Flutter應(yīng)用,主流有兩套成熟的開(kāi)源方案,分別適配不同的顯示場(chǎng)景與開(kāi)發(fā)需求:方案一:flutter-elinux(Sony開(kāi)源方案)由索尼官方維護(hù)的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場(chǎng)景適配性更廣。方案二:flutter-pi(輕量級(jí)嵌入器)一款輕量級(jí)Flutter引擎宿主程序,僅基于底層DRM/GBM接口實(shí)現(xiàn)渲染,無(wú)需依賴桌面環(huán)境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 150瀏覽
我要評(píng)論
0
主站蜘蛛池模板: 曾经爱过你郑源| 倔强驱魔师1-5集免费动漫| 一夜情电影| 爸爸种子2电影在线播放| 电影《美味快递员2》演员阵容| 赤峰派出所被打砸事件属实| 阳刚男孩读后感| 胭脂第45集电视剧在线观看| 原来神马电影手机在线观看完整版| 部长一起去出差在线观看| 黄皮子坟| 齉龘齉齾爩麤龗灪龖厵纞虋| 小小水蜜桃6电视剧全集在线观看| 龙骑假面骑士电影| 霜花店未删减| 我的朋友的瘦子4| 上一任国防部长| 回响42集电视连续剧免费观看| 流氓大亨粤语| 八戒八戒10免费观看完整版| 免费观看老妇人的电视剧大全 | 乌托邦电影| 美国电影《需要爸爸播种》电影在线 | 张学友什么歌好听| 电影在线免费观看修理工的艳遇| 哈马斯与法塔赫在北京磋商| 我和我的家乡免费版观看| 金装四大才子国语全集| 丑妻逆袭之华丽归来短剧免费观看| 特殊保险推销员5| 火影忍者忍者之路| 驯龙高手1电影免费观看| 朋友的妈妈在线观看免费| 星河影片| totakka haya kirguzux的功能介绍 | 妻子的滋味电影| 电视剧枣树湾免费观看| 有罪之身| 苏明明电影《暗夜》| 新杜十娘| 脔到她哭H粗话H好爽五星视频| 庆余年第二季全集免费观看| 劳德家族| 狂野时代未删减| 你是我的荣耀27集在线观看| 《拳击手2》在线观看| 名侦探柯南557| 榴莲色斑让你流连忘返503| 神级选择每次:都选对短剧全集| 雪烟追逐未删减| 凌晨三点女人免费观看电视剧| 公的浮之手中字1上映时间| 裂缝百度影音| 男女做爰猛烈叫床高潮的书| 电视剧火蝴蝶| 车水马龙电影免费版| 鬼父在线观看无删减1-16| 黄色仓库视频在线.| 百武装战记| 两个好媳妇中文在线观看| 邻居换娶妻1完整版中文| 科学的超电磁炮| 女保险推销员8中文| 花姑娘免费观看| 张杰回应丁太升| 小黄飞2014最新演出| EllieNova艾莉·诺娃《恋爱专家》| 电视剧潜行狙击| 东德国歌| 维修师傅的艳遇韩国BD| 西关大少国语| 邪恶护士1| 甲午大海战下载| 辣妹子影视电视剧免费高清| 《和讨厌的部长出差旅》在线观看高 | 我的后半生在线观看免费高清| 碧蓝幻想动漫| k8s经典版(老经典版)全集免费 | 按摩店电影叫什么名字| 《致命美丽》意大利| 芈月传多少集| 招远市| 《财阀家的小儿子》电视剧| 《部长出差的日子》在线| 浪漫女家教在线观看电影| 金屋藏夫电视剧免费观看完整版| 我是余欢水40集免费播放| 意大利《蝴蝶1975》电影主角是谁| 北方警察| 璨璀人生| 麦乐迪《女超人》在线观看| 现在正在分手中免费全集观看| 特殊精华油1-6集免费观看电视剧西瓜| 火山口的两个人的电影| 无声谎言短剧免费观看| 用你的手来打扰我吧第二季在线观看 | 韩国r级限制片| 火影忍者485集| 男人女人一愁愁愁电视剧| 大秧歌电视剧全集免费| 韩国电视剧漂亮女孩| 电视剧欢乐颂1全集完整版在线观看 | 我们永不言弃免费观看| 圣特洛佩斯的姑娘们在线观看| 德清点子| 电视剧冰锋剧情介绍| 小舍得电视剧免费观看完整版| 全肉野战高h| 维修师傅的艳遇BD电影| 穿越火线电视剧全集免费观看| 蜀山奇仙录动漫免费观看全集| 史上最强大魔王转生为村民a| 电影激战丛林在线观看完整版高清| 电影潘金莲完整版在线观看| 圣斗士混沌篇| 牧神记动漫全集观看| 丰满的继牳5伦A片在线播放| 安徽公共频道在线直播| 电影《姐妹牙医》赤子板栗| 东北警察故事2谢苗| 幸福爱人大结局| 黑人大战俄罗斯妞| 电视剧天地剑心| 难哄白敬亭电视剧在线免费观看| 中国警花| 凯登克劳斯电影在线观看| 泡沫爱情电视剧| 迷人的岳母| 007幽灵党在线观看完整免费版| 肖申克的救赎国语版| 电影修理人员的培训在线| 步步惊心八阿哥| 使徒行者2在线观看| 善良的妈妈中字开头9个字是什么两个 | 西瓜视频免费| 将界截取了一小段05| 我们在梦开始的地方电视剧| 真心英雄电视剧完整版在线观看| 售楼小姐在线观看高清完整版韩国| 美国三片在线播放免费| 超级女佣| 那年那兔第二季全部免费观看| 还珠格格第四部全集| 越光宝盒高清下载| 法国女版顶级飞行员哪里看| 岳母刺字| 天下第一镖局2长风行| 禁忌3年转一代| 赘婿免费观看| 用我的手指打扰你| 还珠格格第一部高清| 邵氏电影《聊斋奇谭》| 憨豆特工1电影| 假情真爱 阿华| 《羞耻(克罗地亚版) 第三季》| 《我的砍价女王》电视剧| 铿铿铿锵锵锵锵免费观看| 隐藏的面孔韩国电影在线观看| 友田真希《义子》在线观看| 大学生爬火车拍照被烧伤进ICU| 大学四第一季| 百战天龙| 颐和园在线观影| 孤男寡女战狼4妈妈结局| 电影需要爸爸播种子| 合伙人在线观看| 女超人麦乐迪免费观看完整电影| 分手大师| 风流的女管家电影| 高清《人间空间时间和人》电影| 穿越火线36集| 电视剧双城生活全集| 亲爱的,别!| 我和我的继女| 法国高压监狱2完整免费高清原声满天星 | 山东舰远海遭遇26架外军无人机 | 电影 妈咪| 我女友的母亲ID中字| 照亮你电视剧免费观看星辰影视| 麻豆小凤新婚在线观看| 六姊妹电视连续剧全集| 美丽的蜜桃5视频| 春晚贺电| 整容天后完整版视频| 铜陵市| 少年班 电影| 伊波拉病毒2HD国语版免费| 魁拔4之梅零落| 麦乐迪满天星| 战马在线观看| 四个少妇按摩| 阴宅凶灵| 战狼6免费高清999加拿大版下载| 天龙八部43| omoflow第一季免费观看在线观看 瓜达卢佩的玫瑰女邻居完整版在线观看 | 为什么高三的晚霞总是格外美| 别墅轮换5攻略免费观看| 奇葩说第六季| 唱歌的大姐姐第二季免费观看| 樱井莉亚bt| 黑道大佬第1季免费观看完整版| 《总统》星克莱尔1997年满天星在| 四海盟约 毛阿敏| 部长出差电影| 电视剧薄冰| 《壮志凌云》法国版在线观看 | 永夜星河电视剧高清免费| 丁俊晖今晚直播现场| 手机免费观看狂飙追剧| 《破冰行动》电视剧| 最新泰剧| 两天一夜韩国版2014| 美国三级《偷妻》| 怒晴湘西电视剧全集免费观看| eeUsS| 识骨寻踪第一季高清在线观看| 金银悔1一5集| 借口 电影| 我的老婆是大佬2| 《三大队》电视剧| 慈禧电影| 赤坂丽的《牙医诊所》结局是什么| 高清他和她的谎| 铿锵锵锵锵锵锵锵锵锵电视剧| 花木兰袁咏仪下载| 白嫖者联盟免费观看完整版电视剧 | 魔术师与巨人| 江苏卫视跨年彩排大片| 黑白潜行免费高清观看| 吞噬星空免费观看樱花动漫| 《钢之炼金术师》| 学渣学霸:高考状元短剧全集| 美丽的小蜜桃9| 大追追什么意思| 作家的谎言 笔忠诱罪| 电影hold住爱| 暮光之城破晓下| 空姐的秘密百度影音| 战毒在线观看| 四大美女西施惊艳版| 太极2 百度影音| 孤胆保镖电影完整版免费观看| 奔跑吧第十二季首播| 电视剧上海一家人| 复仇千金:手撕渣男贱女短剧全集| 泰国司机海螺里吃出龙珠| 下女韩国电影完整版| 人皮灯笼电影| 镖人动画| 自主招生自荐信| 马龙结了三次婚| 奢香夫人原唱完整版| 我们的父辈第一季全3集| 爱情公寓3 13| 岁岁青莲电视剧免费观看| 教皇的驱魔师人在线观看全集| 小时代2迅雷下载| 插曲的痛全集免费播放电影| 电影《战狼3》高清免费观看 | 奥伊米亚康村| 白峰电影高清版550| 空既是色| 《酒店服务员》| 23部人禽伦交| 月之晴天满天星版韩国| 高清鲁邦三世:钱形与两个鲁邦| 五峰| 寒战2粤语迅雷下载| o娘的故事电影免费观看策驰影院 寒夜尽处是卿心电视剧全集免费观看 | 少年派2正版全集免费观看| 八妻子视频观看| 漂白在线播放| 曰本战狼六免费国语板| 大地3资源在线高清免费| 绝代双骄梁朝伟| 禁止的爱善良的小姨子未删减版| 社会| 恐龙时代:你不知道的故事未删减| 哈利波特1—8免费观看| 《八佰》电影免费观看| 潜伏完整版电视剧免费观看| 天生一对综艺2025免费观看| 伊波拉病毒有第二部吗| 孟丽君越剧| 完美妻子满天星在线观看免费高清 | 时光正好免费观看全集| 韩剧流星花园| 小羊人台球| 爱的合体1982法国| 生死船票| 植物学家的女儿高清| 大明风华未删减完整版| 爱情公寓 第3季| 地铁跑酷怎么获得杰克 | 正在播放: JUQ-323 在没有丈夫陪伴的五天里,我被勒令禁欲,直到第一天晚上。不 | 超级奶爸:带娃赚钱两不误全集免费 | 爱你几何 在线| 朱易说想当花滑教练| 女员工付出的中字1230| 电视剧最后的子弹| 军事当行为2017法国(啄木鸟)| 幸福的旅程| 《美容院:特殊待遇》在线播放| 人鱼小姐央视版全集| 飞驰人生在线| 永不退缩3完整版| 电影大决战| 刘也行 一站到底| 孩子们的秘密| 地狱天使| 时间停止器韩国电影| 小寡妇在线观看免费播放电视剧| 白嫖者联盟电影高清在| 《幸福一家人》电视剧| 同学的妈妈电影| 聊斋先生全集| 杰西简《荣誉守则》电影免费观看 | 不道德的故事下载| 甄子丹锦衣卫| 毒液2电影免费版在线观看| 大神与七个伙伴| 《斯巴达1帝国女版》海盗在线观看 | 功夫厨神国语高清在线观看完整版| 十八岁完整版在线观看高清| 甘联珠大破红莲寺| 大漠枪神1一45集免费高清观看| 庭院女人| 被义子侵犯的继拇在线播放| 《古墓神蛇》| 新版娃娃脸9免费观看高清 | 霜花店未删减| 高压监狱法版免费观看| 特种兵之火凤| 意大利《开放庄园》在线观看| 迈阿密风云电影| 高压监狱飞机版| 高清《巴黎小姐》电影在线观看| 农村阳宅风水| 小王子 2015 电影| 不文女学堂快播| 流浪小妖怪电影在线观看| 家庭秘密教学在线看| 英雄虎胆电视剧全集| 啦啦啦中文日本免费高清完整版一| 狼来了电视剧| 奔跑吧第十一季免费观看| 德川幕府罚史三部曲之水月篇| 电视剧几度夕阳红| 韩剧水电工的外遇| 电车痴汉小说| 越王勾践全集| 回复术士的重启人生4集在线观看| 余罪第三季在线观看完整高清| 电影廊桥遗梦| 通往你的地图未删减| 新版娃娃脸9在线观看| 中共八大元老| 山村孽情| 永不妥协| 哈利波特1国语版免费| 花千骨电视剧| 神偷奶爸国语| 入室强奸在线免费观看| 新月格格电视剧全集播放免费观看| 修理工的艳遇免费观看| 中国海峡网| 疯狂小女生法国版| 电影全集国语高清| 潜行狙击国语版| 卿本佳人在线观看免费国语电影 | 嫣语赋在线观看| 成人版禁忌的神话欧美| 李崇霄的经典作品回顾| 乱世桃花全集免费观看| 猩猩将军| 偷偷藏不住在线免费看| 埃丽诺娃满天星| 命中婚劫未删减| 美景之屋6在线观看高清完整版| 暗格里的秘密追剧日历| 古惑仔之猛龙过江| 直播:女子乒乓球单打决赛| 无尽动漫在线观看完整版| 特殊的游泳教练在线观看| 唐宫奇案之青雾风鸣电视剧| 高清死人开关未删减| 假日暖洋洋2剧情介绍| 黑白诀电视剧免费观看完整版高清| 千年僵尸王国语版高清| 韩国伦理免费网爸爸播下颗种子| 勇往直前20100516| 15yc电影院免费观看电视剧最新版本更 | 奥特银河格斗3免费观看中文版| 电影在线观看高清完整免费观看| 愤怒的她短剧免费观看| 《战争之暴行女囚》电影电影| 120天索多玛电影在线观看| 不当军事行为在线| 以爱书写爱电视剧| 《21世纪爱情指南》| 电视剧生死相依| 离人心上番外| 97电视剧在线播放免费观看| 高清《地狱来的芳邻》电视剧| 兽皇电影在线观看完整版| 北京打车难| 陈意涵 听说| 吉林生活全城热恋| 黑暗视频大全免费观看| 爱我几何免费完整版多长| 家教reborn| 法国电影私人航空在线观看| 开枪庆祝打死邻居| 宗馥莉因爱生恨换了王力宏| 男双乒乓球决赛结果| 斗罗大陆178集| 金银梅5普通版在线观看免费| 日本女人的真实生活| 人世界电视剧免费观看全集完整版| 夜店北京百度影音| 女人自熨全过程视频| 我想和你好好| 360大佬爱上我第三季免费观看| 金鸡sss| 哇嘎影视大全在线观看| 风雨木林| 心理心里有个谜粤语| 心动的信号4| 李献计历险记下载| 落魄的琉璃川贵族动漫| 双面娇娃| 名媛望族电视剧40集免费| 情深深雨蒙蒙49全集完整版| 传说中的七公主国语版全集| 飞虎出征什么时候上映| 高等教欲| 妇女的觉醒| 三姐妹健身瑜伽女孩2| 哪吒之魔童降临| 美国矿桥第20集体检视频| 香烟爱上火柴dj| 爱壹帆电视剧| 比特犬多少钱| 离婚律师结局| 新有菜电影免费观看在线| 交换上司的秘书免费看| 刘学义电视剧免费观看| 骄阳似火电视剧全集在线观看| 高清轮回的花瓣未删减| 美国空乘2019电影完整免费高清原声奔跑吧中文字幕 | 继续宠爱十年音乐会| 电影《我要上学》| 缘分五月在线播放| 小小水蜜桃6[电视剧]| 婚姻时差电视剧| 名侦探柯南 百度影音| 高朋满座近义词| 青木玄德| 三年中国国语高清免费播放| 绝密卧底电视剧免费观看| 旧里番无修在线观看| 电视剧虎刺红| 囧妈在线播放高清| 徐锦江陈雅伦三部曲电影| 雪豹38集| 甜蜜皮鞭百度影音| 太祖秘史全集高清版| 泡面小食堂| jizz365| 两天一夜韩国版2014| 学生的妈妈4在观完整有限中字| 我可能不会爱你微电影| 女友的妈妈在线| 金并梅电视剧全集免费观看| 仁心俱乐部电视剧免费观看| 我是你儿媳韩剧| 仙逆剧场版 神临之战| 男人不难嫁片尾曲| 酒醉的玫瑰免费播放观看| 少女大人在线观看免费韩剧| 异物志在线观看全集免费| 风云传奇剧情介绍| 子夜电视剧| 战狼6免费播放观看入口 | 白发魔女练霓裳| 按摩乳房的电影| 《惊天魔盗团3》| 我们民谣2022| 血战钢锯岭在线观看| 赊刀人电影| 《蛇王波后》完整版| 十七岁完整版在线观看| 限制级贴身高手| 女超人麦乐迪A片未删减版免费观看| 疫情期间我和母亲完整版一| 羽生稀IPZ376在线播放观看| 大唐女将樊梨花优酷| 冒牌上尉| xl司令34集全免费观看 | 绝地枪王2| 美女午夜福利4K视频在线观看| 凌云志志法国满天星在线 | 案发现场第二部全集| 斯巴达第四季未删减版在线看 | 世界杯巴西对克罗地亚| 双面太子妃| 吵闹的邻居| 韩国金银梅| 御前四宝高清下载| 命定之人电影| 龙帅归来:都市风云全集免费| 黄金瞳在线观看免费全集高清 | 与部长出差的日子在线观看| 宫锁珠帘27| 宽城| 哈哈哈哈哈第五季免费观看完整版| 都市条形码直播| 锕锵锵锵铜铜铜铜免费| 撒贝宁崔永元| 剑来第二季在线观看入口| 遭义子侵犯的寡妇日韩电影| 零号基地在线观看| 同学的妈妈中韩双字ID贤宇| 谭咏麟演唱会2012| 今天是个好日子舞蹈| 侯玉洁2017年讲道视频| 地铁逃生五子棋| 国庆六十周年阅兵式| 《女子高压监狱2》法国版完整版免费| 意大利种马| 成龙武打片| 风云再起:龙帅归来短剧全集| 电影1942| 二对一的商务模式2| 小丹慢慢的张开了双腿 | 白蛇后传分集剧情| 经典电影《香水》| 迪加奥特曼国语版全集爱奇艺| 电影钢琴教师| 姐姐的男朋友韩国电影中文字幕| 《尖帽子的魔法工坊》| 盒子里的猫| 妈妈爱上儿子同学在线播放| 俺家小院| 坐公交车失去了第一次| 仙逆128全集观看| 美人为馅第二季| 1995版《泰山和珍妮》在线观看 | 西班牙电影《掌中之物》在线播放 | 九歌电影| 查泰莱夫人的情人2022| 姨母家客厅| 金品梅在线| 电视剧大全免费观看100部| 二十一世纪x性格爱情| 氪金玩家第一季免费播放| 电影《戴恩的爱情故事》免费播放| 修理工艳遇在线| 交换玩弄两个美妇教师韩国电影| 战狼6免费观看网站| 魔术师库诺看得见一切电视剧| 章小蕙 桃色| 《航空服务4》电影| 蜜桃成熟时2未删减版| 呕吐娃娃韩国版| 僵尸肖恩下载| 邯郸大学教室门| 法国空姐4(多塞尔航空)完整版免费中文 | 皮囊之下免费观看| 结论英语| 《刺激的瑜伽教练3》 | 赖汉的幸福指数 电视剧| 正在播放: 解决学生的性爱烦恼不穿内衣裤的美波老师硬硬教学 _美波汐里 - 91n | 年轻的继坶5免费观看| 做aj的剧免费观看| 复仇者联盟4豆瓣| 从结婚到恋爱电视剧免费观看全集| 塔日酒店在线观看高清完整版| 中央台中秋晚会2022| 普通事故未删减| 古墓丽影法国版女版在线观看| 不速之亲| 你给我的喜欢电视剧免费| 塔日酒店未删减版在线观看| 胜者为王iv争霸粤语| 我是余欢水免费全集在线观看高清| 3d 肉| 荡女奇行| 电影《女超人麦迪娜》免费观看高清 | 无颜之月在线观看免费| 罗娜言情录| 上海上海电视剧| 女律师替丈夫还欠款| 一人之下第六季| 王贵与安娜电视剧免费观看| 美国式家庭的忌| 农民伯伯乡下妺| 美国惊悚片《峡谷》| 韩剧《隐身帽》朴亚珍| 《冰血暴》首播时间| 大小姐tik免费观看全集高清| 4999高清播放器| 战旗如画电视剧| 盛唐风流2国语版播放| 情深深雨蒙蒙高清| 波野结衣qvod| 家属无码| 被夫の上司持久侵犯在线观看| 雷军向华为宣战| 女房东的秘密在线观看| 电影教父1| 大唐女将樊梨花百度影音| 日本混血女大学生按摩在线观看| 恋恋茶园电视剧免费| 无限资源在线观看完整免费| 电影伊波拉病毒完整版在线观看 | 《女儿们的男朋友》评分| 刻舟求剑| 圣德罗佩的姑娘们高清| 克隆人的进攻| 念念不忘短剧| 小二姐可不胖| 中国机长免费观看| 奇妙的发型屋中字韩国| 大神同学想要被吃掉!| 5哈第一季| 莉娜安德森主演的电影满天星| 大耳朵图图5部全集| 缱绻仙凡间电视剧| 爱我几何电影免费观看高清完整版| 黑帮大佬和我的365天完整| 人世间在线| Overflower| 神笔马亮在线观看喜剧| 爱你没商量| 奇领6080 奇领yy6080影院 奇领yy6080七剑| 篱笆女人和井| 你是我的荣耀免费观看完整版西瓜| 盛唐风流国语版在线播放| 《爱情公寓5》电视剧| 欲望酒店 百度影音| HD版《人猿泰山H版》完整版意大利 | 电视剧无所畏惧全集播放| 需要爸爸的精子在线观看| 长公主和她的男宠们吃个菠菜卷| 凹凸世界免费看| 《女销售的销售秘密》2| 《重返狼群》免费观看| 百日的郎君| 江华| 《他为什么依然单身》电视剧| 萌宝助攻追妻:神级奶爸短剧全集| 鸭王2免费观看完整版普通话| 爱 回家| 惊声尖叫4百度影音| 年轻的后妈在观整有限中字| 《贪婪之岛2》完整版| 女友的闺蜜电影| 现代情欲篇之换妻档案| 97影院在线观看免费播放电视剧大全| 爱就宅一起优酷| 《图书女朋友》动漫免费观看全集| 《禁忌的爱》结局揭秘| 战地花开| 幸得相遇离婚时短剧免费观看| 高压监狱2法国版下载| 汪小鱼和汪小米| 打黑风暴22集全免费| 花垣县| 一路向西国语在线观看| 荒岛生存| 飓风奇劫| 战狼9欧式少女免费播放电影推荐 金刚驱魔师第一季免费观看全集 (已屏蔽) | 看不见的枕边人电影| 还珠格格第一部高清| 三年在线观看免费国语| 北京青年9| 爱情美剧盛典爱情公寓完整版| 战狼6免费观看下载高清| 4999高清播放器| 玫瑰的故事电视剧在线| 拳王粤语版| 寸止挑战大赛在线| 林风短剧| 哪吒2在线观看免费观看完整版| 3对1:2人一次性体检4| 为有暗香来免费观看全集| 秋元まゆ花| 《卖保险套销售员》导演麦金| 少年大钦差电视剧| 恶之华在线观看| 王牌大贱谍2008| 偷窥无罪吴彦祖电影全集| 鬼同你ot粤语版| 单身妈妈3高清全集在线观看| 坎贝奇的品味人生完整版| 乌拉草特点| 一夜皇帝在线观看| 庶女有毒全集免费| 《粉红小白菜》美国| 神探夏洛克电影| 沉默的真相在线观看免费完整版| 《睫毛膏》9| 四少妇的秘密按摩在线观看伦理电影| 武媚娘传奇在线| 高压监狱完整版在线观看完整免费高清原声满天星2023 | 隔壁邻居很美味免费观看电视剧| 平凡的荣耀免费观看| 露营后营露宿第一季未增减野营| 新世界孙红雷电视剧| 电视剧心跳全集完整版免费观看 | 潘晓婷教你打台球| 男生女生一愁愁愁电视剧在线观看30分 | 炼气十万年动漫全集免费观看| 正在播放: 【传媒】《小凤新婚》下集-高冷新妻性奴 - 91n | 狂飙免费播放| 战神阿修罗| 纪连海 灌篮高手| 《犯罪现场 Zero》| 激战丛林在线观看免费完整电影| 《给我钱 第12季》未删减| 纸箱包子| 《最高的爱人诏三上》| 韩国女主播朴妮唛kw7142| 爱的3温暖| 新乱世佳人第9集最火的一集| xl司令第二季全集免费观看动漫 | 间谍过家家第二季在线观看免费| xl司令在线观看免费| 太子妃她是隐藏大佬全集免费| 带货女王全集免费| 《驯服小峓子》2| 玉城麻衣| 毒战1韩版免费完整观看| 小鸡快跑电影免费完整版| 与部长妻子一起过周末的日子| 中国梦我的梦网络视听年度盛典 | 总裁的独家私宠全集免费| 三生三世十里桃花在线观看| 《我的身体》1985年帕尼怀尔| 民间怪谈录| 一人客栈| 电影加勒比海盗女版| 年轻的母亲4先看免费观看| 星汉灿烂电视剧全集在线观看免费| 判逆者第43集| 电影巜商务旅行戴帽子| 梅花三弄鬼丈夫电视剧免费观看 | 商道国语版| 瑜伽老师诱惑2| 新娘之无悔的爱| 她的潮汐| 舒克贝塔动画片全集| 卖百科全书的女人电影在线观看 | 夏目友人帐 第一季| 泾阳县| 美国蜜桃在线| 地狱解剖 在线观看| 唱k小鱼仙| 韩国《维修师傅的艳遇》| 钟表馆事件未删减| 动漫美女被狂揉下部羞羞视频| 大叔小馆第1季完整版| 棍勇| 影子战士| 文豪野犬第四季在线观看| 逃狱者天海翼在线观看国语| 邻家特工电影| 平凡之路40集完整版| 我为妻子找男妓| 《美容院的特殊待遇| 杜汶泽3d豪情| 冲动的惩罚未删减动漫| 婚前游戏| 我的好兄弟的女朋友短头发| 庄智渊获得亚洲杯男单季军| 超级经纪人在线观看| 插曲的痛30集全播放免费下载| 林正英僵尸全集国语| 二胡独奏演奏曲大全| 少年包青天1在线观看免费完整版| 妈妈照顾儿子同学电影免费观看 | 四大探长国语| 酒店服务生动漫第一季| 电视剧铁血尖刀| 英语老师充足的奶水| 我的左手右手演员表| 老女人免费观看高清电视剧| 误杀3免费观看完整电影2024| 高清阿尔法未删减| 上虞市| 泰坦尼克号成人版2小时46分版本| 乡村爱情小夜曲剧情介绍| 夺粮剿匪记全集| 离岛区| 电影视频在线观看完整免费高清原声满天星在线观看 | 《半妖倾城》| 需要爸爸来播种电影| 大肚孕妇2在线观看免费版高清| 超级教师电视剧免费观看高清| 苍兰诀观看完整版全集| 需要哥哥的种子| 帕尔哈提礼物| 慈禧秘密生活 国语| 徐凤年电视剧免费播放| 仙踪大陆免费观看高清| 电视剧劫中劫免费观看| 电视剧夏妍的秋天| 乱世三义高清全集| 铿锵免费观看在线播放| 僵尸世界大战超清版| 嫦娥奔月电视剧| 免费看电视剧漂白| 女友的妈妈双字ID高冷| 我的世界叶枫| 朋友的女儿2| 回复术士的重启人生2季在线观看| 火山两人没有打马赛| 香气电影| 老三国演义84集免费观看网站 | 妻子8免费观看全集| 沉香如屑在线观看| 相门嫡女全集免费| 执掌大权:豪门弃少短剧全集 | 好好的时光电视剧 | 庆余年免费观看网站| 特攻联盟| 隋唐英雄117| 甜蜜惩罚无马赛| 一不小心爱上你主演| 3d玉蒲团迅雷下载| 二龙湖爱情故事2021在线观看| 再来一次第48集| 钻石大劫案电影张浩| 山野女人香| 高分少女| 酒店1-90集免费观看高清| 女子被摁桌扒窃电影免费观看 | 追风在线观看免费高清| 恐怖大师| 长相思第二季免费完整版| 上司趁丈夫不在家来拜| 电视剧铁面歌女| 大清徽商| 动真格了!渤海打响“第一枪”| 女员工的付出5中字| 牧化师4污染的讲台在线观看| 长相思2免费观看全集完整版| 黑街舞男高清版免费观看| 十九岁观看免费高清完整版| 《私密女性监狱》中文|