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

李肖遙 2023-07-07 22:18
? ? 關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

來(lái)源:網(wǎng)絡(luò)素材


最重要的一條規(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?*/


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

???????????????? ?END ????????????????

關(guān)注我的微信公眾號(hào),回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


點(diǎn)擊“閱讀原文”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。

李肖遙 公眾號(hào)“技術(shù)讓夢(mèng)想更偉大”,作者:李肖遙,專注嵌入式,只推薦適合你的博文,干貨,技術(shù)心得,與君共勉。
評(píng)論
  • 做藍(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 361瀏覽
  • 在物聯(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瀏覽
  • 讓微弱脈沖信號(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 14051瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 212950瀏覽
  • 導(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瀏覽
  • 摘要東莞市恒創(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 156瀏覽
  • 文:杜杰編輯:侯煜當(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瀏覽
  • 摘要在防爆電氣設(shè)計(jì)中,只參照芯數(shù)選型而忽略額定載流量,長(zhǎng)期滿負(fù)荷運(yùn)行會(huì)出現(xiàn)插頭發(fā)熱、接觸面氧化、IP67 密封受熱老化等問(wèn)題。結(jié)合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級(jí)電流參數(shù)對(duì)照表,區(qū)分冷壓免焊接、焊接兩種接線結(jié)構(gòu)的安全載流數(shù)值,設(shè)置合理電流冗余系數(shù),搭配使用環(huán)境修正參數(shù),規(guī)范防爆接近開(kāi)關(guān)連接器、防爆法蘭插座的選型計(jì)算方式。關(guān)鍵詞圓形防爆連接器,載流參數(shù)表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產(chǎn)品概述圓形防爆連接器觸點(diǎn)載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128700瀏覽
  • 一、方案簡(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 154瀏覽
  •        很多人只見(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瀏覽
  • 在前六期中,我們已經(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 251394瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個(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 195瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐 J褂瞄_(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 475瀏覽
  • 做電池供電攝像頭、可視門(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 171瀏覽
  • ?摘要:低價(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 128975瀏覽
我要評(píng)論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請(qǐng)使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 岳飞传117集全免费听 | 古装三级片名| 《酒店激情1-5集在线观看| 母亲主动给孩子降火好吗| 小凤新婚台湾版| 爱hifi| 惊声尖笑5下载| 办公室刺激战场一共几集| 沧元图第二季59集完整版| 大侦探第八季综艺| 斗罗大陆第171集免费观看| 老版四大名捕全集| 电视剧 原谅| 扫黑风暴25集| 银梅瓶电视剧全集电视剧在线观看免费| 我哥我嫂电视剧全集50集大结局 | 大染坊第一部高清电视剧在线观看| 新九品芝麻官| 星克莱尔电影在线| 有秘密的我们| 烧饼皇后下载| 露营后营露宿第一季未增减0.0.0 H版《激战丛林》中文完整版 | 战狼6免费观看完整版国语| 火影火之意志继承者| 韩剧我的漂亮瘦子8剧情介绍| 蜜中妻ova无修版国语版| 宁安市| 假面骑士最新| 董卿的点评| 三年大片观看免费国语第一集| 聊斋艳谭之月光宝盒| 新妹魔王的契约者第二季无修版| 3d柔铺团之极宝乐鉴宝鉴电影中文在线观看演 | 非常小特工| 法国电影私人航空免费观看| 金太狼的幸福生活2| 父子 完整版| 千斤肉板栗1985| 高清《职场妻子的出轨》中语字| 加勒比女海盗在线| 我家有喜的全部歌曲| 黑道悲情全集| 泰剧《蛇姬恋》免费观看| 低俗小说免费| 情陷夜中环第一部| 《法国空乘5》免费播放| 长城电影发布会| xl司令在线观看免费| 泰勒斯威夫特时代巡回演唱会| 外国孩子中国爸| 青青草在9线观看| 战狼9999| 但丁的地狱| 第八个嫌疑人| 军事不当行为电影全集在线观看高清| 恋恋维纳斯泰剧| 我和继夫做了爱一次有事吗| 少女动漫在线观看完整版动漫| 嘉庆王朝42集免费观看电视剧| 荣耀法则满天星在线观看| 大话西游之月光宝盒电影| 彭丹徐锦江电影《悟间道之奇缘》| 反恐24| 翁虹版《一代妖后》| 韩剧女人心| 秋瓷炫在19禁大尺度电影生死决断在线观看 | 《房屋销售的秘密》日本| 河南一家6口被杀 警方通报| 时光沙漏| 胭脂雪电视剧| 天堂有难| 《隔壁女邻居》完整版| 年轻的嫂2| 战狼6双人版高清下载| 绽放的许开心在线免费观看| 我和岳交换夫妇交换系列| 97在线影院免费播放电视剧大全| 祁同伟的原型| 侠岚第3季全集| 义姐是不是良喂养1-2集动漫在哪里看 | 3d版玉蒲团| 无敌猪哥聊天室| 额济纳旗| 好想跟你在一起| 聊斋志异三| 《特别的酒店| 胜者为王张智霖| shameless第三季免费观看| senima| 真心请按两次铃优酷| 新猫和老鼠全集| 韩国电影推油| 天地民心| 大汉王朝电视剧免费观看| 希望爸爸播种| 从结婚开始恋爱1-35集免费观看| 赵露思许我耀眼电视剧免费观看| 麦乐迪《忠诚少女》完整版| 苦尽甘来的遇见你韩剧| 哀乐大全| 皇家奶娘碰碰| 奥特曼电影版| 人生遥控器影评| 坎贝奇无憾完整版免费观看| 最新黑社会电影| 哥哥的老婆韩国电影| 日本版《牙医姐妹》| 何以笙箫默在线看免费西瓜视频| 梁家辉情人完整版| 最美的时光番外二| 老电影《山神》免费观看| 销售的销售秘密3HD中字国| 大话西游3 豆瓣| 总会再相见全集观看| 美国《不忠》原版| 我老婆的闺蜜ID中字| 电影登山的目的| 娃娃脸9| 陆贞传奇电视剧59| 情非情 电视剧| 《娃娃脸4》少女| 心灵捕手 电影| 变种特工第一季| 控制女上司的遥控器在线观看 | 巨茎挺进李淑芬| 茅坑里的僵尸完整版| 也平凡电视剧免费观看| 吴健版农民伯伯免费看 | 切糕段子| 凯·帕克《囚禁》| 大夏龙帝短剧全集免费观看高清| 喜爱夜蒲种子下载| 灭火宝贝2美版罗丽莎的启蒙 | 《花子vs倔强驱魔师》动漫第4集在线 | 漂亮妈妈7中字开头歌曲| 末代皇帝免费| 光荣时代| 需要爸爸播种子电影在线观看 | 美式忌讳5--8| 第二次人生电视剧免费播放| 性的暴行2糟蹋女兵电影在线观看| 高清江湖夜雨十年灯| 在线免费观看最新电影| 大兵寝室第一季在线观看| 日本语徐娘半老电影有哪些| 《替夫还债妻子》大结局在线观看| 扎职3义薄云天在线观看国语| 国家机密电视剧| 三级片美国男按摩师| 高清钻石王牌 第四季| 婚巢 电视剧| 颐和园纪录片| 漂亮的妈妈7开头的字| 一屋老友记 国语| 与狼共舞30| 满清十大酷邢| 渔夫荒野史1988版免费观看| 女士的品格电视剧免费| 韩国伦理电影《陪部长出差的日子》在线观看 | 维修师傅的艳遇| 失忆的劳拉电影| 爱我几何未删减版最经典十首歌曲| 我和丰满老师疯狂做爰漫画| 哑巴薛之谦| 泰国剧泰剧大全| 阿凡达3d版在线观看| 正者无敌剧情| 《善良朋友的妻子》hd| 客途秋恨| 鉴证实录| 《偿还2》免费观看完整版| 恶魔幸存者第二季动漫| 三年全免费观看在线播放| 最后的华雨滋动漫在线观看| 加勒比海盗1黑珍珠的诅咒| 老电影庐山恋| 高压监狱2无删减1080P| 《法国空乘1》在线观看免费高清版| 火影剧场版7| 韩剧《隐身蓝帽子》短剧| 一线生机 电影| 美味快递员特殊待遇2在线观看 | 奥利维亚斯帕克满天星禁忌日记短剧| 老千全集完整版免费观看| 麦乐迪版满天星无删减观看| 元龙第三季动漫在线观看免费版| 善良的嫂子2韩国| 啄木鸟《劳拉的遗产》叫什么| 电影《恋爱之瘾》免费观看| 《爱我几何》免费观看完整版电影法| 星汉灿烂电视剧免费观看| 爱盛开电视剧| 以爱为契电视剧免费观看| 敢梦有爱| 激战丛林电影版无删减版在线观看| エロください资源| 奇葩一家亲剧情介绍| 《密爱》未删减版中字| 黄飞鸿与十三姨| 双女任务电影高清完整版| 七擒萌货| 法国空乘11未删减版在线观看| 天下第一日本高清在线观看| 无名世界的终结电影免费观看| 特殊服务韩国| 需要爸爸播种子2全集免费看| 我是特种兵第二部全集| 房屋销售电影在线观看完整版| 元旦节祝福老师的话| 中国在日博主街头抗议核污水 | 青山不老课件| 刑警使命电视剧全集免费观看 | 仙逆130集完整版观看| 圣斗士星矢欧米茄| 超好听的网络歌曲| 电影《需要爸爸播种美国》观看 | 霍元甲黄元申粤语| 李伯清大话水浒| 王多鱼高清观看视频全集免费观看大全| 两个女人 qvod| 闯关东免费完整版| 三级《出差被同房》| 玉蒲团全集在线观看 | 战狼6高清完整免费观看国语电影下载应用安装最新版 | 不当军事行为2017法版迅雷磁力| 摩登家庭第二季在线| 爱情交叉点电影| 吸血贵族满天星免费观看完整版 | 斗罗大陆免费观看视频| HD版泰山《激战丛林》主演| 金瓶梅1-5电影观看完整版丿| 恩娇 电影| 卖保险套的女销售| 《我是余欢水》电视剧| 策驰影院电视剧策驰2023| 魔术电影| 《新搬来的邻居》日本| 《沉默的真相》江阳的职业| 《延禧攻略》在线观看免费高清全集| 吸血贵族5满天星电影免费观看高清| 归路30集全集观看免费| 美国派4百度影音| 法国少女农场高清在线看 | 大秦赋全集在线观看免费| 吴艳妮回应造谣者被拘留| 《水野朝阳之出差电影 | 桃色成人| 森奈奈子在线 | 逆转未来 彩蛋| 满清十二帝| 过气明星:复出即顶流全集免费| 浪漫黛比在线观看| 泰剧乱点鸳鸯谱| 薛平贵王宝钏全集| 跟部长一起去出差旅行住同一个房间| 黑执事第三季全集| 机械姬迅雷下载| 插曲的痛30集全集观看免费| 冰与火之歌第八季| jizz妇女| 恶灵骑士2在线看| 赤子板栗美柿妹| 韩剧 拜托小姐| 美国1985G点中文| 哈利 波特与火焰杯| 斗破苍穹缘起在线观看| 星汉灿烂电视剧全集| 年轻的保险销售员2| 陆贞传奇在线观看免费全集高清| 黄石的孩子下载| 我需要爸爸播种子| 语义错误无删减全集在线观看| 《战国》| 黄沙战神| 金银1-5美国| 超兴奋朋友的妈妈| 《万》观看完整版| 年轻的母轻4在钱| 最终列车醉汉第一季| 步步倾心| 一起愁愁愁30集全免费版在线观看| 周年纪念日全集观看| 糊涂小天使| 夏津县| 战狼12欧美版免费观看完整版国语百度 | 浴室情欲HD三级| 蜘蛛侠3英雄无归在线观看枪版| 长津湖电影| 《爱我几何》在线观看免费| 高清《沸腾人生》免费观看| 男女生一起愁愁愁电视剧在线观看 漫画 | 酒店1-90集全集在线观看| 最终幻想电影| 终末的女武神2| 家庭教师动漫全集4集| 三年成全免费观看高清在线播放 | 电影天海翼匿名侦探免费观看| 使徒行者1在线完整版免费观看| 高清临租家庭未删减| 妻子被黑人在丈夫面前欺负的电影| 农场保卫战完整版免费观看 | 罗丽星克莱尔成人版HD版| 姜子牙电影在线观看| 暗格里的秘密电视剧在线观看西瓜| 360天大佬爱上二免费全集| 死亡空间3解说| 纸钞屋第五季在线观看完整版| 地道战全集| 男女一起愁愁愁免费观看91| 《年轻女教师2》电影| 怒晴湘西电视剧| 化骨龙与千年虫粤语| 夜访吸血鬼剧情| 与部长出差免费观看| 禁忌魅惑| 回响电视剧在线观看| 你安全吗一共多少集| 理想照耀中国 电视剧| 铿锵铿铿锵铿锵免费观看| 泰山恩仇| 鸡毛飞上天58集完整版免费观看| 唯你归途短剧免费观看| 小越勇辉| 安吉拉主演的《透视》| 高清《周年纪念日》电影| 少年派百度影音| 混元24式太极拳| 《牙医姊妹》完整版1986| 真命天子朱元璋在线观看| 雪中悍刀行第三季免费播放| 《被下药强辱的妻子》| 大姨姐的滋味| 咱们结婚吧28| 夏日口袋动漫免费观看| 女斯巴达2新开始在线观看免费下载 | 爱情公寓发布会完整版 | 沼泽深处的女孩| 《法国空乘2018》在线完整观看视频 | 平凡之路电视剧免费观看| 《驯服》电影完整版丽卡结局| 台湾版《棘手狂情》电影免费观看| 繁华落尽电视剧| 活着电视剧| 私人助理2法国版电影在线观看| 善良的妈妈| 亿万第二季| 李云迪嫖娼女主| 本相爱在线观看| 山村老尸| 快17电影网| 男生女生一愁愁愁电视剧在线观看30分钟| 即刻上场免费观看完整版| 十七岁版在线观看免费| 济南电视台少儿频道| 《伊波拉病毒2》未删版| 军医电视剧| 名侦探学院第七季在线观看| 朝鲜拼音| 倾城雪全集在线观看| 女人的故事| 徐梦桃高喊我是第一吗| 色即是空2迅雷下载| 意大利《女子护卫队》在线播放免费| 十天十夜剧情| 亲吻姐姐02| 最强车模| 邻居也疯狂电视剧| 日本修理工的艳遇 | 缘之空03| 三年大片大全免费观看国语版2| 变形金刚动画片| 嘉庆王朝56集免费观看电视剧| 麦乐迪版安娜和父亲哪里看| 新金瓶梅3d 龚玥菲| 快刀斩乱麻成语| 陪部长出差的电影叫什么名字| 神兽金刚2天神地兽| 半熟恋人| 《maruzzella》完整版在线观看| 高清《女机械人》| 顺流逆流粤语| 牙医赤子板栗免费| 屋顶的散步者| 狙击部队高清| 飞机上的性服务免费看| 《咒》恐怖电影完整版在线观看| 五号特工组电视剧全集在线观看| 爱我几何在线版免费看| 车水马龙电影免费版| 都市猎人| 《杨贵妃秘史》完整版在线观看| 人民的名义dvd版| 21世纪爱情指南在线播放| 下女 完整版| 高清恋爱恐惧症| 《血恋3之血河重生》 | 黑白禁区在线观看视频电视剧| 女儿需要播种电影美国 | 修理工的艳遇在线| 吴京电视剧全集| 像小朵一样| 《房产销售员》在线| 法网狙击 粤语| 契约情人第三条| 控制女老板的遥控器| 广场舞林妹妹爱上贾宝玉| 蜜桃成熟时高清版| 坏妻子(便利店)| 冰雪奇缘1普通话版| 所有女人都是骗子| 女超人满天星版麦乐迪马克斯在线观看视频| 小爸爸全集在线观看| 疯狂历史补习社粤语| 反黑路人甲粤语| 尖峰时刻3国语高清| 战狼6免费高清版视频| 麦子交换1的中文翻译曼哪| 尖叫之夜免费观看2023年电影| 笑傲江湖第一季| 危情营救在线观看| 情陷夜中环吻戏| 《偷极乐宝鉴》叶子楣国语百度网盘| 香气电影| 您好母亲大人| 《维修工》电影王李丹妮| 笑林小子3| 女教师3在线| 战狼6女版全集免费看| 箭在弦上12| 魔宫魅影| 木下子檀檩子电影免费播放| 满天星电视剧全集| 火线干探| 男生女生一起愁愁愁电视剧在线观看| 归山辞短剧免费观看| 神探夏洛克可恶的新娘字幕| 秘密女搜查官の天海翼| 虎胆女儿红电影| 中国新说唱第一集| 肯德桑德兰满天星免费观看| 甜蜜家园3第三季电视剧在线观看 中国驻英领馆遭冲闯 | 欧式少女18集全集在线看| 法网狙击粤语17| 银魂251| 只愿君心似我心短剧免费观看全集| 中国刑警电视剧| 暮光之城4破晓下bd| 光影在线| 新房里干了女销售电影| 妖精的尾巴119预告| 刘亦菲合成10p| 《汤唯》电影免费观看高清| 美容院的待遇服务3| 电影杜十娘完整版| 生死线电视剧全集免费观看完整版| 《花儿与少年》被曝重启| 十四岁姑娘免费观看电视剧剧情 | 分手后程医生哭出鼻涕泡短剧免费| 重生为怪兽什么鬼动漫免费观看| 女儿的男朋友av| 花开山乡电视剧免费观看完整版| 你微笑时很美23集免费观看| 歌唱党的歌曲| 0verflwer第一季无码| 女教师的滋味在线播放| 法证先锋5粤语全集免费观看| 玩偶游戏第二部| 电影《牙医姐妹》完整版| 翻斗鞋柜的安装视频| 大城小事电视剧免费观看全集| 小草进城电视剧全集免费观看| 牙医姐妹 赤子板栗| 怪奇物语第三季| 亡者之谜泰剧在线观看泰剧 | 少妇的味道4| 《黑寡妇》电影| 《优雅贵族的休假指南。》| 《OverFlower》无码| 黑天鹅在线观看| 亚塞诺瓦茨电影完整版在线观看| 酒店1-45集全免费观看国内 | 无颜之月下载| 被赠与的未来| 保罗一家1--4美国版免费观看| 禁忌3| 放映完整版电影| 高清凤仙花未删减| 恭喜发财短剧免费观看| 美容特殊待遇2怎么读| 牧神记40集全免费播放| 夏目友人帐第一季ed| 爱情狂 韩国| 宝贝老板2| 佘诗曼吹哨召唤张智霖| 头号公敌| 老阿姨与小年轻的爱情电视剧| 兔子先生第一季在线观看免费高清| 女朋友的丰满妈咪2| 巴霍巴利王2在线观看| 1995版人猿泰山hr版本百度网盘| 家庭主妇肉身归属| 塔斯尼帝复仇2成电影6月12| 电影私人航空在线观看完整免费高清| 《丈夫邀部长来家吃饭》日剧中文版2. | 美国youtube在线| 无法坦诚相对| 月之晴天满天星完整版| 高清《反叛的鲁路修》动漫| 高清火遮眼未删减| 酒店刺激战场免费观看| 朋友的妈妈2020中字| 新一剪梅| 电影朋友的妈妈| 土豆网电视剧情非情| 锡盟蒙中| 兔子先生免费全集在线| 电影《暴行3》| 古惑仔2高清| 拜托小姐主演| 韩国野花精油按摩师视频| 奥特大战争| 中岛知子| 《激战后厨5》完整版日本| 漂亮的保姆6在线观看| 三妻四妾电视剧免费观看| 女婿爱上母娘免费版电视剧2| 一又二分之一的夏天| 爱的迷局| 雪烟追逐未删减| 栋笃神探结局| 《女仆小姐的贪吃日常》 | 爱我就别想太多大结局| 完美有多完美免费观看电影| 星辰变在线观看全集免费播放| 《维修工人的艳遇》| 电影一帘幽梦| 疾速营救| 木下檩檩子电影免费观看2023年最新 | 纵横四海| 又拐个皇帝回现代 电视剧| 美国睫毛膏3免费播放| 黑夜终至全集观看| 女仆小姐的贪吃日常全集观看| 《美容院5:特殊待遇》| 两个女人 qvod| 感恩自然作文| 女佐罗在线看| 电视剧风筝| 侠客行吴健版| 莫妮卡《爱我几何》在线观看| 正是青春璀璨时| 姐姐妹妹闯北京| 凯登克劳斯壮志凌云3第三部| 神隐电视剧1-40集免费看| 僵尸道长1高清国语版在线观看 | 卖房子的女销售在线播放 | 法国护士长| 天海翼全集迅雷种子| 生肉动漫免费观看| 我的莫格利男孩在线观看| 炽热吸引电视剧全集免费观看| 北原多香子无打码在线观看| 千金奴隶| X L司令| 缘分电影| 歌唱党的歌曲| 克莱尔的觉醒满天星免费观看| 男子被关押1349天后无罪释放| 满清十大刑酷快播| 夏树电影免费观看完整版全集最新一 | 余罪第一季24全集未删减版| 荷尔蒙6美国版| 姚明场边大喊:不要犯规| 铠甲勇士铠传免费观看| 战狼6大牛老黑免费观看| 猫愿三角恋第二季| 求佛mtv| 新孟丽君传奇| 按摩店的待遇1电影| 冲上云霄2优酷| 名侦探柯南之世纪末的魔术师| 缉恶电影在线完整版免费观看| star467| 邻家特工 下载| 护理学校完整免费版| 郑福浩烈士| 箭在弦上大结局| 妈妈的职业5完整版结局在线看| 日本的妈妈| 雅帕菲卡| 风月宝鉴之云雨之欢在线观看| 啄木鸟:女满天星《壮志凌云》电免费| 名创优品指甲油致癌物超标 | 电视剧红颜的岁月| 《爱我几何》免费完整版 | 三河市| 《电梯里的拥挤》电影免费观看| 诡秘之主免费看| 《偿还3》完整版| 善良的嫂子4在线高清免费观看| 电影《千金与佣人》完整版| 善良的妻子1中字巴巴鱼汤饭惹人 乡村爱情7免费全集播放 | 黑白配美国版在线播放| 《依然闪亮》| 我的不靠谱白马王子| 绅士的品格 手机| 360大佬爱上我第二季| 意大利《蝴蝶1975》电影主角是谁 | 女子护卫队1973在线观看| 乌龙闯情关| 招摇电视剧免费观看全集完整版| 棋士电视剧免费观看| 非凡医生电视剧| 村妓一级| 醉拳2免费| 余味毛豆豆| 不扣纽扣的女人| 镇沅| 日本波多野吉衣| 迈克杰克逊演唱会高清下载| 隋唐英雄120集| 想要成为影之实力者在线观看| 日本《乳房按摩》在线| 法国版《女超人:麦乐迪》是不是黄| 非狐外传 周秀娜| 山野女人香| 唐朝艳史| 双人调情按摩术伦理片在线观看 | 韩国色情 2024| 胡歌杨幂唐嫣开场同台| 塔日酒店在线| 电影《荷兰风情》在线观看| 新三国演义| 聊斋艳谭艳梅在线观看| 宁安如梦免费| 《美姐妹很努力》| 运河边的人们电视剧免费观看| 电影画皮| 小爸爸全集在线观看| 武林幸运星| 欧式少女16集全在线观看优酷下载| 大宋王朝| 满天星版《荒!女儿国》| 爱的罗曼史无删减在线观看| 寒战2西瓜影音| 爸爸给我播种籽| 这里是预备自卫英雄补?!电视剧| 苏琪电影全集| 年轻的母亲韩国在线| 是爸爸也想谈恋爱动漫| 侵犯的继拇中字夫人| 想要成为影之实力者第二季pv| 易经风水涣| 全网影视大全| 梦比优斯奥特曼国语全集高清| 凯登克洛罗斯全部电影| 擅长捉弄的高木同学第二季| 动漫无双3终极无敌版| 爱情公寓5免费观看完整版| 汾阳市| 后营露营第二季无增减| 安全屋全集观看| 依家有喜电视剧| 启示录完整版免费观看| Ovflower全集免费观看| 玄女心经1免费观看全集| 让一切随风 钟镇涛| 双女任务免费观看| 新婚夜全集免费观看电视剧| 暗暗在线观看| Jul505在线| 特战荣耀在线观看免费| 老电影洪湖赤卫队| 歼灭天际线的日韩专辑在哪| 进击的巨人真人版后篇| 强摸秘书人妻大乳BD| 妈妈的职业5结局原声在线看视频| 搏击之王之反击电影完整版免费观看 | 郑州海洋馆潜水员溺亡| 佳期如许| 亲爱的妈妈3高清HD| 修理工的艳遇日韩伦理片在线观看| 新神奇四侠2015| 森林里的熊先生冬眠中动漫完整版| 妖女迷行第五季| 天下粮田| 美丽的樱桃| 意大利电影《渔夫和妻子》主演| 特种兵之火凤凰27| 信任 陈奕迅| 花琉璃电视剧全集免费播放| 捉鬼敢死队满天星版| 四个少妇去按摩| 爱人同志免费观看全集完整版| 《秘密囚禁》完整版| 法政先锋第三部粤语| 总裁的小甜妻短剧全集| 日本差旅电影| 牧马人电影完整版高清免费观看| 爱的释放电影完整版在线观看| 第十九层电视剧| 大内密探零零性| 美味快递员特殊待遇| 情爱天空| 春节起源于哪个朝代| 狙击蝴蝶电视剧全集| 密爱 在线看| 一起愁愁电视剧40集在线观看| 法国版电影满天星HD版女超人| 野蛮的托姆| 情陷夜中环吻戏| 好日子在线观看免费播放| 新金银悔1-5普通话免费播放| 做aj的电视在线观看免费大陆| 怦然与你未删减| 上瘾电视剧16~20集| 娜塔莎 劳佳姆| 怒潮在线观看完整普通话2023| 人猿泰山真人版1995年| 监狱医生| 人间正道是沧桑多少集| 深情眼全集免费完整版| 17岁免费完整版在线观看| 黑白配hd1080完整版在 | 美人鱼在线观看免费观看| 加勒比海盗 电影| 24世纪性格爱情指南大结局 | 王守义十三香广告| 暴躁老妈46集全免费播放柳暗花明又一春的上句是什么? | 魔女宅急便电影| 欧美男男video在线观看| 爸爸需要播种子| 国风按摩院 在线| 东成西就| 黄金渔场130605| 火红年华电视剧在线播放| 《除却巫山》无删减版| 劳拉失忆症1997免费版| 云南蔡总 裸体| 淘宝公布2023年度丑东西 | 翡翠王下载| 试爱房奴《高潮》4| 完美真相优酷| 《氪金玩家》3d动漫在线观看| 《俄版女儿国》满天星在线观看| 与女部长出差的日子电影在线观看| 越南姑娘MV高清免费| 电影《魔女3》超清在线观看| 为人民服务完整版| 拼多多倒闭| 销售的销售秘密6HD中字国| 仙女湖全集| 星光美丽电视剧全集在线观看免费| 澳门回归22周年| 王蓉蓉龙凤呈祥| 玉女心经阴阳和合在线观看免费版电视剧全集 | 护国战神:卸甲归田当奶爸短剧全集| 义子的侵犯电影| 缉魂完整版免费观看电影| 广场舞豆芽菜的爱| 关于未知的我们| 我是会长| 朱迅的葬礼现场照片| 三人第一次体检电影免费观看| 韩剧《恶行之外》| 借种韩国电影| 新还珠格格53集| 一路向西 国语| 酒泉市| 插曲的痛60集全剧情简介| 女童乱小便被父亲倒挂窗外| 电影杨三姐告状| 李连杰电影全集高清| 电影满清十大酷刑免费观看完整版 | 修真高手在校园短剧全集| 欢乐群家长第二季| 怡红院官网| 男女一起愁愁愁免费全集观看| 莲花楼连续剧40集高清| 最长的一天电影高清在线观看| 韩国n房| 黑狐31| 行唐县| 韩国美容院特殊服5| 帕丁顿熊3| 再说一次我爱你 刘德华| 漂亮的女客栈| 《激战丛林》完整版免费观看中文字幕 | 电视剧婚变| 绝伦人妻的一夜日本电影| 爱丫爱丫免费国语高清| 长风渡电视剧免费观看| 萧红电影高清免费观看| 兄弟换麦子6国语版1080P| 吉他精灵| 文豪野犬第三季免费观看| 人生路不熟免费| 郝板理子电影免费观看| 黑社会之龙城岁月| 丫鬟主母:侯府逆袭短剧全集 | 我年轻瘦子8| 歼灭天际线1-24全集| 新乱世佳人电影完整版| 十二生肖快乐街全集| 短剧《撕夜》免费观看| 漂亮书生在线观看| 电影《无憾》坎贝奇| 吴健版《农民伯伯2》电影免费观看 | 斗罗大陆第228集| 逆袭的第二名| 变相怪杰| 多哈十米台决赛| 天美影院电视剧电影在线观看| 曰本jiZZ| 《查泰莱夫人的情人》电影| 瑞奇宝宝中文版1一52集| 好姑娘中文在线观看| 《空中小姐》凯登克罗斯演员是谁扮 | 人生七年| 高清《我的个神啊》| 《丰胸沙龙治疗3》HD无字高清完整版 | 为人民服务全文| 朴智秀的三部必看电影| 断刀朝鲜战场大逆转| 天星之爱泰剧免费观看全集| 僵尸启示录好看吗| 漂亮的保姆韩国电影全集| 好好的时光| TOTAKKAHAYAKIRGUZUX_手游大全| 日本电影女部长出差精油按摩完整版在线播放中文字幕 | 少年包青天2部| 诺言郭有才歌曲| 聚会的目的1在观完整有限中字| 浮之公9| 做aj的电视剧大全免费观看导演金| 风铃动漫在线观看完整版与| 著名导演韦廉病逝| 电视剧《寻路》| 神偷奶爸国语| 阿里巴巴与四十大盗| 我女友的妈妈双字ID免费韩剧| 《无憾》完整版免费观看| 高清特权| 四月一日灵异事件簿·继动漫| 人生若只如初见解释| 汤唯 电影| 牙医姐妹| 激战从林h版在线播放| 日冕之恋| 和尚扒开双腿蹂躏h| 高h乱np甄宓|