使用weak(弱函數)構建跨平臺的C語言代碼

嵌入式電子 2023-05-23 22:14


弱符號

弱符號是指在定義或者聲明一個對象(變量、結構體成員、函數)時,在對象的前面添加?__attribute__((weak))?標志所得到的對象符號。如下所示函數即為一個弱對象符號 void test_weak_attr(void),或者稱該函數是弱函數屬性的、虛函數。

__attribute__((weak)) void test_weak_attr(void)// 或者使用如下樣式的定義,兩者等效void __attribute__((weak)) test_weak_attr(void){    printf("Weak Func!\r\n");}


弱符號的作用與示例

弱符號是相對于強符號而言的,在定義或者聲明變量、函數時,未添加?__attribute__((weak))?標識的就默認為強符號。如下,最普通的函數定義,就是定義了一個強符號 void test_strong_ref(void):

void test_weak_attr(void){    printf("this is a strong func\r\n");}

驅動程序往往需要考慮兼容性,因為要兼任很多廠商的不同型號的設備。若驅動程序中使用強符號定義一些與適配的設備的特性相關的功能,則下次適配其他設備時,該強符號函數可能需要被修改,以兼容新的設備。當適配的設備很多時,頻繁地更改驅動代碼將破壞驅動的可維護性。

弱符號的出現可以很好地解決該問題。弱符號的對象具有可以被重定義的功能(即可以被重載)。下面通過測試說明弱符號這種可被重載的特性。

在 test_weak_attr.c 程序中定義如下弱函數:

// test_weak_attr.c#include  __attribute__((weak)) void test_weak_attr(void){    printf("this is a weak func\r\n");}

在 main.c 中定義如下程序:

// main.cvoid test_weak_attr(void){    printf("this is a strong func\r\n");} void app_main(void){    printf("init done\r\n");         test_weak_attr();}

編譯運行該 main.c 程序,得到的結果是什么樣子的呢?

1

this is a strong func

將 main.c 中的 void test_weak_attr(void) 函數注釋掉,再重新編譯運行程序得到的結果是:

1

this is a weak func

小結:在使用弱符號函數時,我們可以重新定義一個同名的強符號函數來替代它;若沒有重新定義一個強函數來替換它,就使用弱函數的實現。弱函數就好像是一個可以被替換的“默認函數”。

值得一提的是,舊版本的編譯器還可以使用如下方式的定義(僅聲明無效)將一個對象定義為一個弱對象:

1

2

3

4

__weak void f(void)

{

//code

}

在 linux 的一些代碼中,__weak 其實就是通過?__attribute__((weak))的重命名,兩者等效。

弱引用

弱引用是在聲明一個對象時,通過__attribute__ ((weakref())?定義一個符號的引用關系。如下所示即定義 test_weakref() 函數弱引用 test_weak_ref() 函數。

1

static void test_weakref(void) __attribute__ ((weakref("test_weak_ref")));

弱引用是相對于強引用而言的。未通過?__attribute__ ((weakref())?的符號和實現代碼之間的關系是強引用。如下即為一個強引用函數。它直接給出了 函數 test_strong_ref(void)?的實現。

1

2

3

4

static void test_strong_ref(void)

{

????printf("this is a strong ref\r\n");

}

在編譯程序的時候,我們可以直接使用 test_strong_ref(void)?而不必擔心編譯不通過。如果,我沒有時間去實現 test_strong_ref(void) ,還想在程序里先使用該函數那該如何呢?(是的,就是想白嫖,不想實現,還想先在程序里使用這個函數)。

這個時候弱引用就派上用場了。可以先將該函數定義為弱引用插入到代碼中,待后期有時間再慢慢優(yōu)化代碼實現這個函數完整的功能。下面結合測試進行說明。

測試代碼1:

static void test_weakref(void) __attribute__ ((weakref("test_weak_ref")));void app_main(void){    printf("init done\r\n");    if (test_weakref) {        test_weakref();    } else {        printf("There is no weakref\r\n");    }}

測試結果:

There is no weakref

測試代碼2:

void test_weak_ref(void){    printf("this is a weak ref\n");}static void test_weakref(void) __attribute__ ((weakref("test_weak_ref")));void app_main(void){    printf("init done\r\n");    if (test_weakref) {        test_weakref();    } else {        printf("There is no weakref\r\n");    }}

測試結果:

this is a weak ref

小結:強引用,在未定義該強引用的實現時,編譯會報錯誤:未定義的引用。弱引用允許定義一個未實現(未實例化)的對象,這在編譯的時候會將該對象處理成 NULL,編譯器并不會報錯。通過使用弱引用可以實現后期優(yōu)化代碼的功能。而避免改動使用該函數的地方。使用弱函數可以實現類似“鉤子(hook)"函數的功能。

實際上,包括C、python、go 編程語言在內的很多語言 都有類似用法,本篇文章敘述的方法同樣適用于這些語言的相關開發(fā)。

注意:弱引用僅在靜態(tài)編譯中有效,動態(tài)鏈接中可能無效。

總結:

弱符號、弱引用都是增強程序的可維護性的方法。弱符號通過可以被重定義的特性,實現可以被替換實現。弱引用通過可以暫時使用一個未定義的函數的功能,實現允許后期再實現該函數具體功能,而不必擔心編譯不通過。

為了方便理解,我們先預設一個應用場景:

我們編寫了一個模擬IIC的驅動,希望它能夠在不同的的平臺運行,目標的平臺就設為 stm32 標準庫,stm32 HAL 庫,stm32 LL 庫,和 RT-Thread Driver 驅動庫。

或許讀者有疑惑,為什么同樣是 stm32 ,卻分成三個平臺呢?這是因為從跨平臺軟件編寫者的角度看,只要調用的庫的 API 不一致,就和換一個不同的平臺沒有什么本質的差別,如果在代碼中寫死了 API 的調用,即使是同一個平臺,仍然像多平臺一樣不能運行。

由此可以看出,跨平臺的困難所在,也不是由硬件平臺所導致的,而是由代碼所依賴的 API 的不同導致的。同一個平臺,如果依賴的 API 不同,代碼就不能跨平臺,同樣地,不同的平臺,如果依賴的 API 相同,也可以跨平臺。

所以歸根結底,是代碼所依賴的 API 出現了不同,所以下文中所說的“平臺”,實際上對應的是一套 API 。

我們繼續(xù)說這個模擬 IIC 的驅動,模擬 IIC 驅動是使用 GPIO 的反轉來模擬 IIC 協議,所以依賴了平臺的 GPIO API,如果把調用 GPIO 的部分寫死,那么換一個平臺,就肯定不能在多個平臺上運行。

下面我們開始討論在多平臺運行的解決方案。

我們先從最樸素簡單的解決方案開始,然后逐步迭代到弱函數的方案,這樣有兩方面好處:

一是從簡單的方案開始,循序漸進地介紹,可以降低閱讀門檻。
二是可以帶讀者親歷一遍方案的演進過程,以及演進動因。

和給直接給結果相比,注重過程和動因更能夠還原技術決策的真實過程。因為任何技術都是從簡單樸素逐步演進而來的,如果直接給出最后的結果,會產生理解的斷層,即使記住了幾種技術的優(yōu)劣,在新的場景中,面對更加多樣化的實際問題也會難免乏力。

先從最樸素的方案講起。

方案一、手動控制添加編譯的 .c 文件

樸素的方案有很多,比如就是多搞幾個版本的 .c 文件,比如SIMU_IIC_STM32_HAL.c ,SIMU_IIC_STM32_LL.c, SIMU_IIC_RTT.c 需要哪個就添加哪個進去編譯不就完了嘛!

這種樸素的方案雖然看起來簡單,但是,這幾個文件中包含有共用的邏輯,例如模擬 IIC 的協議的實現,如何將 8bit 的數據依次發(fā)送,等等。

這些共用的邏輯,相當于在每個文件中都復制了一份,一旦修改到共用的邏輯,就要手動同步每個文件,這會導致代碼冗余和維護難度的急劇增加,很容易出現人為失誤。如果需要添加更多的平臺支持,就需要再次復制修改代碼。

另一個問題是,使用不同的編譯工具鏈,添加編譯文件的方式并不一樣,例如,Visual Studio 和 MDK keil 通常是手動添加,而 CMake 通常直接添加目錄或者通過文件后綴進行搜索。用戶在使用不同的編譯工具時,需要針對編譯工具來分別處理,這也增加了維護的成本。

因此,我們需要尋找更加優(yōu)雅的解決方案。

方案一中最核心的問題,是沒有分離共用的邏輯,和各個平臺的適配接口。
在通常的命名慣例中,共用的邏輯稱為 Common,而各個平臺的適配接口稱為 Port。

在接下來的方案中,我們就會引入 Common 和 Port 分離的設計思想,Common 和 Port 的分離,使得對共用邏輯的修改和增強直接 “分發(fā)” 到了各個的 Port 中,而增添新的平臺,不需要對 Common 做任何修改。

方案二、條件編譯

一種更加優(yōu)雅的解決方案是使用條件編譯。條件編譯是一種編譯時根據條件選擇編譯代碼的技術,可以通過編譯器提供的宏定義和預處理指令來實現。

在我們的模擬 IIC 驅動中,可以直接編寫 Common 部分,然后 Common 部分通過條件編譯,可以根據平臺的不同選擇不同的 GPIO Port API。

例如,在 STM32 標準庫中,可以使用 GPIO_SetPinMode 和 GPIO_WritePin 接口來模擬 IIC 協議,而在 STM32 HAL 庫中,可以使用 HAL_GPIO_WritePin 和 HAL_GPIO_ReadPin 接口來模擬 IIC 協議。因此,在代碼中可以使用如下的條件編譯方式:

#if defined (USE_STM32_STD_LIB)    /* STM32 Standard Peripheral Library */    GPIO_SetPinMode(SDA_PORT, SDA_PIN, GPIO_MODE_OUTPUT_PP);    GPIO_SetPinMode(SCL_PORT, SCL_PIN, GPIO_MODE_OUTPUT_PP);    ...#elif defined (USE_STM32_HAL_LIB)    /* STM32 HAL Library */    HAL_GPIO_WritePin(SDA_PORT, SDA_PIN, GPIO_PIN_SET);    HAL_GPIO_WritePin(SCL_PORT, SCL_PIN, GPIO_PIN_SET);    ...#elif defined (USE_STM32_LL_LIB)    /* STM32 LL Library */    LL_GPIO_SetOutputPin(SDA_PORT, SDA_PIN);    LL_GPIO_SetOutputPin(SCL_PORT, SCL_PIN);    ...#elif defined (USE_RTT_DRIVER)    /* RT-Thread Driver */    rt_pin_mode(SDA_PIN, PIN_MODE_OUTPUT);    rt_pin_mode(SCL_PIN, PIN_MODE_OUTPUT);    ...#endif

這樣,在編譯代碼時,我們可以通過宏定義來選擇編譯使用哪個平臺的代碼,

從而實現跨平臺運行。

然而,這種條件編譯方式還是有一些問題,如果我們需要添加新的平臺支持,就需要添加新的宏定義和條件編譯,而且需要修改模塊的源碼。

方案三 函數指針

我們可以進一步分離 Common 和 Port,將其放在不同的 .c 文件中,Common 通過函數調用的方式來訪問 Port 提供的接口,這樣可以更加靈活和方便地添加新的平臺支持。

具體實現可以通過在 Common 中定義一些函數指針類型來實現。

例如,我們可以定義一個名為 IICOps 的結構體,其中包含了一些指向函數的指針,這些函數實現了具體的 IIC 操作。

在 Port 中,我們實現這些函數,并將其指針傳遞給 Common 中的 IICOps 結構體。

這樣,在 Common 中就可以通過調用這些函數指針來訪問 Port 提供的接口了。

這種方案的好處是,添加新的平臺支持時,只需要實現相應的 Port 函數,并將其指針傳遞給 Common 中的結構體即可,不需要修改 Common 的源碼。

同時,由于 Common 和 Port 分離,不同平臺的適配代碼可以相互獨立,修改一方不會影響到另一方,從而減少了代碼冗余和維護難度。

但是,使用函數指針有兩個主要的缺點,一是函數指針本身需要占據內存,增加了內存的開銷,二是函數指針需要在初始化時進行加載。

具體來說,函數指針的內存開銷相對于代碼本身并不大,通常可以忽略不計,但在嵌入式系統中,資源有限,內存開銷需要更加注意。

而函數指針的初始化需要在程序啟動時進行,這也會對程序的啟動時間產生一定的影響。此外,函數指針的使用可能會導致一定的運行時開銷,需要在程序性能和資源利用方面做出權衡。

另外,函數指針的使用需要程序員有一定的技術水平和經驗,需要合理地進行函數指針的定義、傳遞和調用等操作,避免出現潛在的錯誤和安全問題。

總的來說,函數指針是一種比較靈活和方便的方式,可以幫助我們實現代碼的跨平臺支持,但需要在實際應用中仔細考慮其使用場景和影響,做出合理的決策。

方案四、Common 中聲明,Prot 中實現

在這種方案中,我們仍然將 Common 和 Port 分離,但是我們不再使用函數指針來訪問 Port 中的接口,而是將其定義為 extern 聲明,由 Port 來實現具體的函數。

具體實現可以通過在 Common 中定義一些 extern 聲明的函數,這些函數實現了具體的 IIC 操作,但是并不在 Common 中實現具體的代碼邏輯,而是在 Port 中實現。

在 Port 中,我們實現這些函數,并將其聲明為 extern,然后在編譯時鏈接到 Common 中。

這樣,在 Common 中就可以通過調用這些函數來訪問 Port 提供的接口了。

這種方案的好處是,添加新的平臺支持時,只需要實現相應的 Port 函數,并在編譯時鏈接到 Common 中即可,不需要修改 Common 的源碼。

這樣 Port 的實現函數的掛載就提前到了編譯階段,避免了運行時掛載函數指針的復雜性和容易出錯問題。以及避免了函數指針的內存占用。

但是,和 IIC 的例子不同的是,在一些更實際的項目中,隨著軟件復雜度的提升, Common 中使用的 Port 函數數量會快速膨脹,這時,每個 Port 函數都必須要實現,即使這個功能非常的冷門,這樣 Common 中每增加一個 Port 的依賴,都要求所有的 Port 進行及時的跟進,否則整個項目都無法編譯通過。

接下來,就要有請 weak (弱函數)機制出馬了

但方案四的缺點在于,在一些更實際的項目中,隨著軟件復雜度的提升,Common 中使用的 Port 函數數量會快速膨脹,這時,每個 Port 函數都必須要實現,即使這個功能非常的冷門,這樣 Common 中每增加一個 Port 的依賴,都要求所有的 Port 進行及時的跟進,否則整個項目都無法編譯通過。

方案五 弱函數

為了解決這個問題,可以使用 weak (弱函數)機制,將所有的 Port 函數都定義為 weak 函數。

weak 函數是一種特殊的函數類型,帶 weak 的函數和不帶 weak 的函數可以同時存在,如果有不帶 weak 的函數,就會優(yōu)先鏈接不帶 weak 的實現,如果沒有找到不帶 weak 的實現函數,就會使用 weak 函數作為默認的實現。

即,在使用弱函數時,如果找到多個實現,鏈接器會選擇優(yōu)先級最高的實現。

在 C 語言中,可以使用 attribute((weak)) 來聲明一個函數為弱函數。例如:

attribute((weak)) void port_func(){    // 默認實現}attribute((weak)) void port_func()

而在 Port 中,只需要實現需要的函數即可,如果某些函數不需要實現,可以不用管它,因為在鏈接時會使用 Common 中的默認實現。

這樣在編譯時如果沒有找到相應的實現函數,就會使用默認的實現,而不會導致編譯錯誤。

而在 Port 中,只需要實現需要的函數即可,如果某些函數不需要實現,可以不用管它,因為在編譯時會使用 Common 中的默認實現。

這樣,在添加新的平臺支持時,只需要實現需要的函數,而不用實現所有的函數,大大簡化了開發(fā)的難度和工作量。同時,也避免了函數指針的內存占用和運行時掛載函數指針的復雜性和容易出錯問題。

弱函數的多編譯器支持

在不同的平臺上, weak 的聲明方法也會有所不同,因此需要自己定義一個 weak 聲明,例如 MY_WEAK,來支持不同的平臺:

/* Compiler */#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 5000000) /* ARM Compiler \                                                              */#define MY_WEAK __attribute__((weak))#elif defined(__IAR_SYSTEMS_ICC__) /* for IAR Compiler */#define MY_WEAK __weak#elif defined(__MINGW32__) /* MINGW32 Compiler */#define MY_WEAK#elif defined(__GNUC__) /* GNU GCC Compiler */#define MY_WEAK __attribute__((weak))#endif/* default MY_WEAK */#ifndef MY_WEAK#define MY_WEAK#endif

可以看到,在不同的編譯器下,weak 有不同的寫法,上面的這些定義包含了對 armcc5、 armclang、IAR、GCC 的支持。

然而,弱函數的方案在一些平臺有一些明顯的缺陷,例如,MSVC編譯器是微軟公司開發(fā)的C/C++編譯器,在Windows操作系統下被廣泛使用。與GCC和Clang等主流編譯器相比,MSVC對于弱函數的支持不太完善。

MSVC 中,可以通過使用#pragma weak來聲明弱函數,但是這個特性只能在 x86 和 x64 平臺下使用,而在 ARM 平臺下是不支持的。

此外,在一些版本的MSVC編譯器中,#pragma weak 的功能也存在一些限制和bug,所以一般在 MSVC 中直接取消 weak 還會更實際一些。

用弱函數對 Port 進行分類

weak 的引入使得我們的 Port 可以根據實際的需求進行劃分,而不是一股腦地必須實現所有的 Port 函數。

引入了 weak 之后,我們就有條件將 Port 劃分為以下的幾種:

1.核心且無默認實現的 Port

這屬于必須實現的 Port,缺乏這個 Port,模塊的核心功能就運行不起來。例如模擬 IIC中對 IO 的操作 Port 函數,這種 Port 用不用 weak 的區(qū)別不大,屬于最硬的骨頭,在設計軟件時應當注意盡可能地減少這種 Port。

在設計軟件時,可以直接取消這類 Port 的弱定義,讓編譯器在編譯時就拋出錯誤。既然缺少了這類 Port 系統的核心功能就無法工作,那么編譯通過了也沒有什么意義。

2. 核心且有默認實現的 Port

這類 Port 可以直接定義一個默認實現,在大多數情況下,用戶就可以不用管這個 Port 了,而在有定制需求的場合下,又可以靈活地定制。

例如弱定義一個 port_printf 用來支持跨平臺軟件的打印輸出,默認是直接使用平臺的 vprintf,對于大多數的用戶來說,只需要打印到平臺自帶的 printf 即可,因此對于大多數用戶來說,這個 Port 不用實現,就能正常使用系統了。

attribute((weak)) void port_printf(char* fmt, ...) {  va_list args;  va_start(args, fmt);  vprintf(fmt, args);  va_end(args);}

而有定制需求的用戶可以通過自己重寫 port_printf() 來打印到其他的地方(比如輸出到 log,或者輸出到其他串口)。

在 printf 的例子中,我們默認了 printf 是所有的平臺都提供了的,對 printf 進行這種假設是合理的,因為它是 libc 的標準函數。

然而,有些 Port 雖然有默認實現,卻不能支持所有的平臺,例如線程操作的 Port,在常見的平臺中,如 linux、RT-Thread、FreeRTOS ,我們知道如何寫默認實現,但是這些實現又不通用,這時我們可以在默認實現中結合條件編譯,為常見的平臺提供默認實現,例如:

attribute((weak)) void port_thread_start(port_thread_t* thread) {#ifdef __linux    pthread_mutex_lock(&(thread->mutex));    pthread_cond_signal(&(thread->cond));    pthread_mutex_unlock(&(thread->mutex));#elif USE_FREERTOS    vTaskResume(thread->thread);#else    #error "port_thread_start() 需要用戶實現"#endif}

這個例子中為 linux 和 FreeRTOS 提供了默認的線程啟動 Port 的實現,使用 linux 或者 FreeRTOS 的用戶可以通過條件編譯來直接使用默認實現。

而既不用 linux 也不用 FreeRTOS 的用戶,則會在編譯時遇到 #error,這提示他們要自己實現 port_thread_start()。

這種寫法還有一種好處,就是在不支持 weak 的平臺,例如 MSVC,就可以通過 _WIN32 條件編譯來進行跨平臺支持。

3. 邊緣但無默認實現的 Port

還有一類 Port,它們比較冷門,只有部分用戶會使用到,但是又難以提供默認的實現。例如用 port_reboot() 來重啟硬件,每個硬件平臺重啟硬件的 API 都是不同的,我們無法提供一個默認的實現。

但是,沒有這個 Port,也不影響系統的核心功能,只是在某些時候(例如開啟了超時自動重啟功能),又有這個 Port才行,這樣的 Port 就屬于是邊緣但無默認實現的 Port。

這時,就可以選擇將 Port 缺失的錯誤延后到運行時,具體在操作時,就可以編寫一個 weak 的實現,而這個實現中拋出一個運行時錯誤,例如:

attribute((weak)) void port_reboot(void){    printf("Error: port_reboot() 需要用戶實現\r\n");    while(1);}

這樣,只要不用到這個 Port,都可以編譯通過且順利運行,只有實際用到時,才會在運行時報錯。

weak 在 GCC 鏈接靜態(tài)庫時的問題

這里我想特別提示一種常見的 weak 失效的問題,這種問題目前我只發(fā)現在 gcc 鏈接靜態(tài)庫時包含 weak 會出現。

gcc 在鏈接靜態(tài)庫時,默認的行為是只要找到第一個(不管是不是弱符號),就會將其鏈接,然后停止繼續(xù)尋找,這樣一來,如果你的 weak 是被第一個找到的,那么強定義的函數就失效了。

這個問題有多種解決方案,我這里只提示一種,有更好的方案可以進qq交流群:577623681 大家一起討論。

解決方案:使用 "-Wl,--whole-archive" 選項來解決。當使用這個選項時,鏈接器將整個庫文件都包含在鏈接輸出文件中,而不考慮這些庫文件是否實際上被使用了。這樣就可以保證弱符號在整個庫中得到了正確的鏈接,并且在可執(zhí)行文件或其他庫中保持有效。

需要注意的是,當使用 "-Wl,--whole-archive" 選項時,可能會將一些不必要的庫文件鏈接到最終的可執(zhí)行文件或庫中,這可能會增加最終文件的大小。因此,應該僅在必要時使用這個選項。


定期以通俗易懂的方式分享嵌入式知識,關注公眾號,加星標,每天進步一點點。


聲明:

本號原創(chuàng)、轉載的文章、圖片等版權歸原作者所有,如有侵權,請聯系刪除。

?

關注、點贊、在看、轉發(fā),支持優(yōu)質內容!?

評論
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩(wěn)定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節(jié)點電位;該節(jié)點直
    southcreek 2026-08-07 13:45 491瀏覽
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態(tài)上報。三件事拆開,早先的常規(guī)做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創(chuàng)知音語音芯片 2026-08-06 15:14 382瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 216966瀏覽
  • 一、方案簡介在Buildroot構建的嵌入式Linux系統中部署Flutter應用,主流有兩套成熟的開源方案,分別適配不同的顯示場景與開發(fā)需求:方案一:flutter-elinux(Sony開源方案)由索尼官方維護的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場景適配性更廣。方案二:flutter-pi(輕量級嵌入器)一款輕量級Flutter引擎宿主程序,僅基于底層DRM/GBM接口實現渲染,無需依賴桌面環(huán)境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 181瀏覽
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發(fā)式的增長窗口。在這一關鍵節(jié)點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統魔咒,為行業(yè)提供了極具競爭力的連接最優(yōu)解。核心技術優(yōu)勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 206瀏覽
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰(zhàn)在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態(tài)脈沖干擾,這類干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統函數發(fā)生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 做電池供電攝像頭、可視門鈴、戶外安防的同學應該都踩過這個坑:攝像頭要拍,ISP、sensor、無線模塊全得開著,整機電流動輒幾百 mA。一節(jié) 18650 撐不了幾天,用戶投訴“怎么又沒電了”。有人會說:加個 PIR 人體紅外不就行了?問題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動”,靈敏度飄忽。真正省電的思路應該是:讓攝像頭平時徹底睡死,只有“前面有人/有動靜”時才被一鍵喚醒——而負責這個“看門”角色的,最合適的是一顆低功耗雷達。一、為什么是雷達,而不是 PI
    唯創(chuàng)知音語音芯片 2026-08-07 14:44 198瀏覽
  • 讓微弱脈沖信號更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測、時間分辨光譜、飛行時間質譜等實驗中,真正需要測量的信號往往只出現在一個很短的時間窗口內,卻被淹沒在遠大于它的噪聲和背景之中。 針對這類穩(wěn)定重復的微弱脈沖與瞬態(tài)信號,賽恩科儀為OE2052雙通道數字鎖相放大器帶來全新的Boxcar Averager功能升級:在鎖相檢測之外,進一步提供從周期波形觀察、門控測量到多周期平均的完整數字Boxcar測量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標信號?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 18122瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 539瀏覽
  • 摘要東莞市恒創(chuàng)連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專注于連接器國產替代、小間距大電流連接器、線對板連接器、線對線連接器、板對板連接器、電源連接器及定制連接器開發(fā)。公司面向工業(yè)自動化、新能源儲能、BMS、汽車電子、AI服務器、GPU供電、通信設備、醫(yī)療設備和智能家居等場景,提供從產品選型、替代評估、樣品驗證到批量交付的一站式連接方案。恒創(chuàng)可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國際品牌部分系列的國產替代評估。常見替
    HC003 2026-08-07 10:14 179瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個產業(yè)園區(qū)里,暖通空調運行著廠商私有協議,照明系統遵循專屬通信標準,變配電、門禁安防各成體系——設備間數據壁壘森嚴,上位平臺對接全靠定制化 “翻譯” 開發(fā),不僅成本高企,交付周期也難以管控。這就是樓宇自控行業(yè)多年的痛點:協議林立、封閉林立。而破局的鑰匙,早在30多年前就已經寫好了——BACnet。作為ASHRAE制定的樓宇自控國際標準協議,BACnet是如今全球樓宇自控系統(BAS)互聯互通的“通用語言”。新風機、冷源群控、變配電、照明、門禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 218瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 至尊神皇短剧免费观看完整版| 抗美援朝保家卫国纪录片| 电影《美容院的特殊待遇》纹身男演| 秘密人质| 需要爸爸播种子在线| 黑帮大佬爱上我第二集完整版| 夺命金免费| 鄂温| 天空之城国语版高清| 家属动漫1~6全集免费观看| 浪漫满屋泰国版12| 窥视电影| 国外真人版csgo| 芬兰浴风云1987国语版| 天骄 电视剧| 从化龙卷风| 妖艳西游国语版免费观看| 剑门道中遇微雨| 丁宝桢40集电视剧免费下载| 天下哪有不散的宴席| 《房屋销售的秘密》2| 晚娘 电影完整版1| 韩国女主叫梅川,丈夫叫小帅的电影| 艳姆动漫第6集免费| 《公的浮之手中字电影 | 公公的浮之手电| 好姐妹高清在线韩国电影观看| 二阶堂完整版在线观看| 梦魇绝镇第一季免费观看完整版| 台剧黛比浪漫女家教在线观看免费第6 | 浪子回头电视剧| 李云迪为什么嫖娼| 叙利亚地图中文版| 电影银饰| 粉红女郎电视剧免费高清 | 风语电视剧在线观看免费完整版| 迪迦奥特曼第52集| 新水浒传26集| 警探迷案| 宝贝女孩电影免费观看完整版高清| 妈妈的职业免费完整版在线观看| 三级片爸爸帮我播种子| 河流如血| 丰满的女同学电影| 《女销售员的销售秘密2》| 我们都是好朋友电视剧| 《哪吒1》免费观看完整版| 新天龙八部43集| 斗罗大陆186| 年经继拇| 战狼6欧美版免费资源下载| 袁隆平去世降半旗| 宝乐婶的烦心事全集| 倚天屠龙记电视剧免费观看完整版 | 镀金时代第二季| 混血大学生精油按摩电影| 未来影院手机版在线播放版| 站着再来一次17集全免费高清| 电视剧成吉思汗| 电视剧猎狼十二钗| 桃色凶气| 两个人电影在线观看| 战狼6免费播放观看完整版| 四季歌简谱| 武庚纪在线观看| 《驯服2》丽卡| 红壳的潘多拉| 《部长来我家》在线观看| 他夏了夏天什么意思| 超级校长| 电视剧女人何苦为难女人| 徐少强版《金悔瓶》2演员阵容是谁扮 | 电视剧永不回头| 梁家辉情人完整版| 女房东的密秘电影在线观看| 宝贝我跟你老公比谁的更大 | 韩国电影朋友家的麦子| 聊斋:兰若寺全集观看| 新的妈妈在线观看电视剧免费高清 | 监狱不设防百度影音| 电影长津湖战役完整版播放免费观看 | 《要听爸爸的话》第4集| 非诚勿扰于之飞| 手遮天电影| 无赖勇者的鬼畜美学| 铜梁县| 大头儿子小头爸爸2| 《朋友夫妇:交换》3中文在线| 新世纪福音战士新剧场版 破| 漂亮的瘦子| 梁祝艳谭电影全部播放| 黑白配高清中文在线观看全集免费| 电影《迷犴》全集免费观看| 战狼2电影观看| 《女超人(麦乐迪)》在线观看| 女忍大桥未久无删减版电影| 斗罗大陆209| 冰河剧集法国空姐4| 镖人动画| 你微笑时很美31集免费观看| 哇嘎电影国语版免费看| 《三十而已》电视剧| 抚养中心49天死20人| 19岁三个女儿1锅端续集免费观看| 白发魔女传电影| 环翠峪门票| 木下檀檩子jlU698零售价| 银魂188| 韩剧制造情缘| 荣耀守则啄木鸟法版| 铁拳无敌孙中山| 电视剧追日| 韩国女销售卖房子电影叫啥| 大江大河第一部全集免费观看| 天使追魂| 篠田优电梯被困086在线观看 | 朝花若锦电视剧免费观看| 露营地宋孝敏韩国| 生化危机:惩罚| 张康贾旭明为什么消失了| 电影上司的老婆双字ID| 《耻辱の女潜入搜查官地狱电影| 农场主三姐妹美国与意大利版对比| 冰糖炖雪梨在线观看免费| 理发师剧情介绍| 青云志第二季免费观看完整版| 衢州新闻联播| 自治县| 讽刺澳军漫画作者:有空再画一张 青梅竹马是消防员第一季未增删看 | 恶魔恋人| 法证先锋4国语版免费下载| 蒋玲玲版《渔夫的荒野史记》电影医ww | 男生女生嗟磋嗟磋磋| 最后的幸存者第二季| 拳皇格斗全集| ylacoyote女超人| 李小龙电影全集国语高清| 权力的游戏前传龙之家族第二季| 坏妻子:便利店做爰,| 如懿传高清| 仓井空电影网| 插曲的痛30免费观看| 《爱的方程式》动漫免费观看| 电视剧因为遇见你| 1986《牙医姐妹》在线看| 我推的孩子动画免费观看全集| 红蜘蛛2剧情| 韩国午夜剧场《分娩按摩2》HD免费在线观看高清完整版-如意影院 | 韩国上流社会| 前夜 电视剧| 私人女姓监狱| 倩女喜相逢| 魔王学院的不适合者动漫免费观看 | 一个朋友的妈妈中韩双字改编歌曲| 韩国电影隐身帽子| 熊出没高清观看| 天师钟馗3| 不当军事行为满天星在线观看| 创造营亚洲版2024| 鄂州父女瓜完整版| 《厨房》韩剧视频在线观看| 肉蔻之香无删减版在线观看完整版 | 小萍的性荡生活第24集| 未来日记 日剧| 鬼子进村终结版| 战狼6双人版高清下载| 韩国情书复古舞| 狙击蝴蝶电视剧全集| 牙医姐妹在线完整播放电影| 和大佬的365| 泽塔奥特曼普通话免费版在线观看 | 赵本山相亲3高清| 酒井法子电影| 不雅空乘4| 辣妈庄园| 实地探访银川烧烤店爆炸事故现场| 韩国电影我的游泳教练| 奇迹笨小孩将在网飞播出| 爱我就别想太多1-40集免费完整| 仙尊宠妃:三界横着走全集免费| 《流光引》| 女战狼6在线高清免费观看全集| 冷风暴1-48集免费观看| 秒速5厘米| 《分娩按摩》2| 韩媒曝刘亚仁男友潜逃海外失败| 挣扎吧当亚君| 初音未来歌姬计划2pc| 法国外籍兵团谈论站| 星辰变在线观看完整版免费观看| 弹丸论破op| 想要爸爸播种手机播放| 甄嬛传63集剧情| 新羔羊医生| 美国电影《需要爸爸播种2》在线观看| 名门绅士之珍爱妙方| 密桃成熟时1993| 渔夫荒淫史电影在线| 歌后歌坛:称王称霸完整版观看 | 爱情最美丽 电视剧全集| 电视剧重生之门免费观看完整版| 《在姨妈家的客厅》免费观看| 王庆爽知己红颜| 自古英雄出少年之岳飞| 镜花缘之决战女儿国| 《浪漫女家教》| 《街头顽童》| 一路向西在线观看电影完整版| 保险公司推销员2中字剧情简介| 苍井空电影全集快播| 新乌托邦免费完整版| 女学生被强伦轩无删减| 直击白玉兰颁奖典礼| 宝贝计划免费观看完整版| 壮志凌云2(啄木鸟)| 樱桃小丸子动画片| 《刘墉铡许翠萍》全场戏第五段| 忍不住的继拇| 穿越弃少短剧全集| 孟瑶 三级| 假日暖洋洋电视剧| 美国爸爸要播种免费看| 野狼王的士高| 新金平瓶梅2| 杰西简壮志凌云免费观看影视大全| 小叔子看我喂奶他硬了| 家有虎妻 电影| 玩弄丰满的女学生在线观看| 阿b哥非你莫属| 仙逆112集完整版高清4k| 《爸爸种子2》英文翻译| 谢孟伟《无主之城》在线观看 | 年经年经母年经7| 千金归来全集免费| 伊人网站在线观看| 会理县| 爸爸的种子伦理片在线观看| 电影《学生》完整版播放| 甜蜜宠物我是看守宠物第二季| 我的美女姐姐欧洲。| 斗罗大陆117集| 美女食神国语版| 红颜知己短剧免费观看| 如舞薄冰未删减| 好想被cao啊随便cao| 电视剧西安事变| 传闻中的陈芊芊第一集| 坎贝奇无憾完整版观看| 破晓之爱| 父女大作战2在线观看| 电影禁忌3大结局| 星际特工在线观看免费完整版| 斗罗大陆免费完整观看208集| 年轻的的小瘦子5| 黄鳝21分钟完整版| 卧底 电视剧| 禁忌4年转一代| 再见爱人2024第四季| 激情社区在线观看| 今夜天使降临电视剧| 台版1987渔夫荒野史电影| 莫斯科行动电视剧| 《朕与她》短剧免费观看| 《村枝》周弘版高清版| 赌侠大战拉斯维加斯| 绅士的品格在线观看免费完整版| 哇嘎免费观看完整版高清在线观看| 韩剧电影在线观看免费完整版| 胭脂第45集电视剧在线观看| 电视剧皇太子秘史| 1995版《泰山和珍妮丛林》男女主角是 | 朝国年轻继拇6免费版| 雪中悍刀行第三部50集免费观看 | 爱情公寓在线观看完整版免费| 电影《爱我几何》| 三门峡金燕| 密桃仙子| 西瓜膨大剂| 高压监狱在线观看完整免费高清原声满天星2019美国 | 赌神1国语高清| 灵域电视剧免费观看全集在线| 插曲的痛30集全集观看免费| 聊斋狐仙电影在线观看| 大梦归离电视剧免费观看| 请回答1988 电视剧| 意大利电影护士转正| 燕赤霞猎妖传| 三进山城在线观看| 免费观看法国空乘4| 孝敬爸爸的好女儿父女| 父辈的荣耀电视剧| 手机| 偷偷藏不住免费观看25集| 致命弯道8免费看| 密室大逃脱5大神版高清免费| 1995激战丛林洛可·希佛帝| 我是妈妈电视剧免费观看| 刘羽琦喜爱夜蒲2| 灭火宝贝2斯托雅| 我们结婚吧中国版| 猫和老鼠全集| 雅典娜 歪歪| 高压监狱1法国电影完整版| 剥茧电视剧免费全集在线播放| 理想之城全集| 私人航空在线观看完整版| 女烈影视| 女女电影免费观看完整版大结局| 再见十八班| 《高压监狱2| 不见不散 电影| 毒爱泰剧| 高清《蜜桃成熟时》无删减版 | 少林方世玉| 黑白配HD1080完整版高清| 生活中的马丽电影免费观看| 美味快递在线| 水电工的艳遇1日本电影| 亲爱的妈妈3高清| 婆婆来了分集介绍| 高清望向太阳未删减| 来和我玩吧1977国语版| 斑马电影街| 连诗雅三级| 海魂电视剧| 电影《美容院的特殊待遇》1演员表 | 特殊美容室2| 牙医姐妹郝板栗完整版电影 | 战狼6高清国语免费看| 公路文糙汉文有肉女强男强小说| ZLJZLJZLJ日本妈妈| 姐姐的朋友在线观看免费完中文整版| 虎鹤妖师录 电视剧免费观看| 需要爸爸种子| 前度电影完整在线| 了不起的盖茨比 在线| 潘多拉魔盒满天星无删减版在线观看 | 上司来我家做客完整版| 刘宝瑞 官场斗| 至高指令无修| 鹿鼎记陈小春| 《农场保卫战》满天星法国| 医院回应女子穿着暴露在院内跳舞| 独一无二在线观看完整版| 锁春宵短剧全剧免费观看| 游泳女教练未删减版在线观看视频| 两个女人 qvod| 爱情睡醒了21| 墨西哥电影《瓜达卢佩的玫瑰》的女| 女扮男装闯江湖短剧全集| 隋唐英雄传第四部| 法国女版《壮志凌云》演员表| 七大罪无删减完整版在线观看| 混血的摇篮曲在线播放| 隔离区2| 黑豹乐队 无地自容| 《楚汉传奇》免费观看| 极品教师第二季免费观看完整版| 朝夕录电视剧| 免费全集观看| 大山的女儿全集免费播放在线观看| 欧美战狼4免费完整版| 孤单又灿烂的神 鬼怪| 错点鸳鸯电视剧50集免费播放| 高清《笑刃荒途》电影| 同学的妈妈ID| 对不起我不爱你了短剧免费观看 | 拳皇八神庵| 方块大背头| 西班牙版《荷尔蒙》| 吉星拱照免费完整版粤语| 陈雅伦快播| 翻转立方体| xl司第一季全集在线观看完整版免费高清| 我的私人女教师3中文字幕版| 逍遥龙哥| 赚他一千万| 越南电影《性的暴行》| 绅士大盗| 电影《金钱和我》国语版| 勐海县| 壮志凌云电影女版| 换妻经历| 当我的指尖触碰到你温度时| 360大佬爱上我第二季| 麦迪乐在线| 都铎王朝第一季| 美人心计全集在线观看| 图书馆的女朋友动漫在线观看完整免费版电视剧第五集 | 爸爸的种子第二季免费播放| A片按摩师未删减在线看| 军统的女人| 以法之名电视剧全集| 金银悔1-5普通话国语版免费观看| 木府风云电视剧| 美国电影禁忌4| 空中飞人打一字| 白峰电影在线播放| 留存的爱全集观看| 地狱宝贝| 血战上海滩电影| 爆操老妈第46集完整版| 放弃我抓紧我| 世家嫡女全集免费| 妻子的秘密免费完整版电视剧| 丈母娘来了电视剧| 《我的娜塔莎》电视剧| 变形金刚国语版| 插曲的痛60集全免费播放剧情介绍| 女员工滋味| 魔界之龙珠下载| 洛阳影视| 男女一起愁愁愁的在线观看次数统计| 文豪野犬第三季免费观看| 金银瓶1-5国语普通话2| 射雕英雄传EAGLET| 女友的母亲 双字id| 萨达姆墓| 以家人之名免费播放| 《贝拉1》完整版| 幸福密码电视剧| 21世纪爱情指南| 春逝旧年舟大结局| 发财秘籍| 火热的部长妻子结局 | 狙击之王暗杀在线观看| 少妇的诱惑电影观看| 《女超人(麦乐迪)》在线观看| 极乱家族| 东陵大盗电影全集| 《印尼空姐》免费观看完整版高清 | 男女一起愁愁愁在线免费观看| 打狗棍大结局| 漂流欲室 在线观看| 电影地道战| 古船女人和网全集| 木下凛凛子的一级电影| 地铁跑酷2| 十年爱电影| 爱我几何原版在线观看| 远离人群的地方| 将夜第三季电视剧免费观看完整版 | 金瓶风月电视剧免费播放在线观看 | 真爷们儿电视剧全集| 水灵的继拇BD中字3| 龙八夷在线观看| 突围靳东43集全集免费观看策驰 | 动漫在线观看免费全集| 《花子vs倔强驱魔师》在线| 四项公投是哪四项| 忘川的河原唱完整版| 需要爸爸的种子 在线| 全职猎人88| 神级选择每次:都选对短剧全集| 暮光之城四| 张学友什么歌好听| 俄罗斯女儿国2完整版| 金手指电影国语在线观看免费高清 | 夏日口袋动漫免费观看| 大学四第一季| 幸福的面包| 国光帮帮忙沈玉琳| 流星花园第2部全集| 姐妹免费观看国语电影动漫 | 壮士出征全集| 第二名的逆袭电视剧免费观看完整版| 功夫足球粤语版| 实地探访银川烧烤店爆炸事故现场| 保罗在美国的日常小视频| 欢乐颂5在线播放免费观看高清| 侏罗纪公园 2013 电影| 360大佬爱上我第四季 | 凡尘称尊:仙帝弃少全集免费| 银瓶梅电视剧第5集电视剧在线观看下| 斗罗大陆漫画77| 史前巨鳄2| 双女任务在线观看完整版高清电影免 | 三妻四妾免费观看完整版高清,皇家女 | 千金归来全集免费| 道士下山 豆瓣| 暴躁老妈40集全在线观看| 三边坡是哪个国家| 男篮亚锦赛2015| 美国女儿国满天星在哪能看| 高清危情蜻蜓未删减| 国产观看免费高清电视剧在线播放| 灵与肉1992| 瓜达卢佩玫瑰2008版| 《谍战深海之惊蛰》电视剧| 神探夏洛克可恶的新娘字幕| 法国空乘2016未删减| 小娘惹新版| 恋爱男孩泰剧| 法国电影《灭火行动》免费观看| 哈儿司令| 唐凯vs丹勒| 国产免费观看高清电视剧在线观看| 花宫亚美| 我们彼此相爱泰剧在线观看免费 | 门第31集在线观看| 食物链美国大尺寸148| 浙江卫视跨年演唱会2024| 雁南飞刀郎| 沙龙美容服务| 天海翼lpⅹ566中文字幕在线| 都市桃花运| 色影影院| 液晶电视安装| 神印王座动漫免费版| 满天星电影免费观看高清在线播放| 赵丽颖《小城大事》在线观看免费| 纵情欲海3| 《被下药强辱的妻子》免费看| 高校教师 赤子板栗| 法国空乘在线观看完整免费高清原声满天星奔跑吧式叫庆 | 三位大学位按摩记的更新内容和角色| 伯虎为卿狂国语| 案发现场第二部下载| 1986牙医在线观看完整版| 我们都要好好的| 自古美女爱英雄dj| 《饥饿的女儿国》| 恶作剧之吻1台湾版| 我推的孩子第8集| 我和继拇做爰A片| 高清《惊呆》短剧全集观看| 赤坂丽令嬢肉奴隷未删减版| 两人世界插曲30分钟| 杨思敏1一5集手机版| 一二三四在线观看免费中文动漫版| 《美容院:特殊待遇在线观看 | 盲井电影完整版| 电影《特殊游泳课》完整版| 忘年恋电影| 怪咖啡 电视剧| 女人的战争2完整版| 超星五灵侠第七季免费观看| 功夫粤语高清免费| 荒井小姐的秘密生活日剧全集| 美丽小蜜桃6| 美丽猎人在线观看| 《最高的爱人诏》| 五凤朝阳刀评书| 名侦探柯南国语| 电影要爸爸播种子意大利| 港台古装三级| 刘老根1| 《金牌销售的秘密5》| 暗黑西游记| 我在他乡挺好的一共多少集| 沂水县| 火线全集| 友人母在线播放BD高清| 季雨倾城未删减| 法国满天星古墓丽影合集 | 1994年意大利赛伦渔夫和他的妻子| 高清《与讨厌的姐姐超契合》结局| 牛魔王和铁扇公主| 《维修师傅的艳遇HD》韩国 | 魔帝归来:三界唯我独尊全集免费| 爱情不设限第一季无删减版在哪看| 战狼6免费观看在线播放完整版视频软件下载| 漂亮妈妈3未删减版免费观看| 盛夏晚晴天全集在线观看| 瓜达卢佩的玫瑰完整在线| 水鬼电影| 新上门女婿电视剧完整版免费| 铜铿锵锵锵锵锵在线观看| 第三队电视剧免费观看| 一个女人韩剧全集免费观看| 激战丛林h| 黑暗精灵免费观看全集| 电影《主人》免费观看全集| 粉红大白菜在线观看| 古代的排水系统好吗| 少年派百度影音| 粉红大白菜经典版丹麦| 白魔女学园| 沙漠女王1983意大利| 意大利电影《贵妇的觉醒》简介| 小虎还乡动画片在线观看| 特战荣耀电视剧全集免费观看策驰| 当代弃少短剧全集| 法国高压监狱3完整版| 时来运转国语高清| 以法之名张译在线播放 | 专家谈济南不明飞行物坠落| 新女员工的味道| 总统夫人星克莱尔1997满天星| 歪星撞地球| 夺命小丑2| 法国空姐4号| 神级选择:每次都选对短剧全集 | 《厨房》韩剧视频在线观看| 白衣女超人电影完整版| 施公奇案第二部| 快乐星球全集| 《越南女兵满天星》是什么电影| 秘密身份短剧全集| 歌手在线观看免费完整版| 沧元图免费在线观看| 高压监狱1| 年轻的母亲如如| 我是刑警29集| 伊波拉2病毒完整国语版免费 | 中国高清观看免费观看| 海员记录在杜苏芮影响下航行遭遇| 意大利爸爸的种子免费观看电视剧中 | 需要爸爸播种美国第二季| 四项公投是哪四项| 温暖的村庄电视剧全集在线观看| 美国式保罗| 天际歌曲原唱| 一点就到家在线观看| 史丹利三安复合肥广告| 铿锵锵锵锵免费观看完整版| 青草青在线视频| 无限春光27 豆瓣| 《和讨厌部长一起去出差旅》播放 | 绝对权利| 黑白潜行2 电影| 柔情挚我电影| 坏性:被强奸的妻子| 森林泰山| 神之晚餐| 维修员的艳遇伦理片| 中国机长电影免费观看| 带货女王全集免费| 朋友互换| 金瓶爱的奴隶| 太平年未删减| 赌侠1990刘德华| 卖百科全书的女人在线观看| 电视剧咱们结婚吧免费观看| 兽魂觉醒动漫免费观看高清| 酒店1至75集免费观看| 李嘉诚次子出席重要论坛| 火星西路7号| 暖暖国语高清免费观看完整| 麻花mV无痕| 舞帝利哥个人资料| 彼女动漫| 白峰美羽 在线| 未来之星电影免费观看完整版高清| 瘦身男女粤语| 韩剧花样男子国语版| 扬门虎将| 守候我们的幸福| 白日梦我电视剧在线观看免费版| 伦理《法国护士长》2006在线| 汉武大帝| 凡尘称尊:仙帝弃少全集免费| 电影《需要爸爸播种子》HD中字在线观看,高清完整版美国倫理片_屠夫电影网 | 吾妻正斗| 我和我的祖国电影在线观看免费| 浩瀚宇宙| 《特殊游泳课》波多野结衣| 花与爱丽丝| 阿诺拉电影高清在线观看免费版| 泰国双人按摩在线观看| 电视连续剧家常菜| 3d肉蒲团蓝燕| 水手服饰育1982年完整版| 《秘密》菲律宾电影在线观看| 二泉映月课文朗读| 黄秋生电影人肉叉烧包| 公公的浮之手中字电影| 科学化学症候群| 人生遥控器影评| 出差遇到前任渣男完整版| 萨顶顶快去歌手顶一顶| 幸福触手可及百度百科| 女销售靠睡觉卖房子电视剧叫什么| 小姑子的味道2有翻译视频| 许我耀眼32集免费观看| 鹿鼎记陈小春| 97在线影院免费播放电视剧大全| 唐朝好男人下载| 电视连续剧天行健免费播放| 大埔县| 《特殊的保险推销员》| 一打开就是立体的贺卡| 更衣人偶| 日本混血大学生按摩3| 妖精在线观看免费高清电视剧大全| 田震最新歌曲| 爆裂飞车22017| 周弘版村枝(原版)| 潜伏者40集在线播放免费| 我会好好的电影| 漂亮妈妈6 中字 开头 歌曲| 你是我的姐妹| 教授和他的女大学生| 萌宝厨神闹新春短剧免费观看| 俺去也在线播放| 第一次经历的秘密| 樱井利亚torrent| 贝拉1980在线观看| 身份互换:真豪门主全集免费 | 冰冷热带鱼电影日本版| 永不磨灭的番号电视剧| 新白蛇传插曲| 圣特罗佩斯的姑娘| 李采潭在线全部电影| 平凡的世界全集| 誓言电视剧| 男按摩师黄色电影| 高清《爱情怎么翻译?》电视剧| 棋魂2第二部在线观看| 插曲的痛30集全集| 情罪电影未删减版在哪里可以看| 水手服电影| 缘之空在线观看视| 荒野渔夫高清免费观看| 小斯亲口宣布离开篮网| 一一影视| 中国远征军电视剧| 《加勒比海盗1》(女版)| 监狱医生| 夏至未至豆瓣| 酒店沐浴露里疑似精液 市监局调查| 欧美黑白配在线免费观看| 郭晓冬郝蕾| 全球最让人害羞的时装比赛 | 日本战狼6免费观看完整版高清版| 神医小娇妻:总裁别碰我全集免费 | 《贝利弗山的秘密》电影在线观看| 美人电影在线观看| 美国电影村妓| 神偷奶爸3(普通话)| 重影电视剧免费观看全集完整版| 月里二嫂猪肉换米| 陆犯焉识| 电视剧最后的较量| 欧美战狼4免费完整版| 同门往事| 仙逆104全集完整正版| 凌云壮志(法国)满天星电影免费观看| 广场舞最美西藏| 罗曼蒂克地下室骑马多少分钟| 女友妈妈韩字的ID| 工作励志文章| 替嫁公主短剧全集| 暴躁46集全集免费观看下载| 窃听风云在线观看| 局长从后面握住我的奶| 斯巴达第四季无删减在线看| 青春草免费在线视频| 高清《九重紫》在线观看电视剧| 妈妈2免费观看完整电视剧中文版 穿越时空的爱恋免费观看完整版 打雀英雄传 | 台湾马友蓉| 行尸走肉大结局| 《牙医姐妹》在线观看| 警察锅哥播放电视剧一共40集| 30天韩剧| 社长妻子大物社长秘书是谁演的| 朱锁锁叶总什么电视剧| 弹珠汽水猴子全集观看| 日剧一吻定情2013| 大梦归离电视剧免费观看全集高清| 王者之风| 许冠文粤语电影| 妹妹有点怪真人演员全集| 刺客伍六七第6季免费观看完整版| 结衣波多野电影| 女刑警满天星电影免费观看| 高清《她和她的她》电视剧| 金刚狼1迅雷下载| 赫板栗电影在线观看 | 美景之屋电影完整版在线播放| 韩剧女友的母亲双字ID| 穿越火线36集| 天空电影在线观看免费完整版| 台剧黛比浪漫女家教在线观看免费第6| 梅艳芳梦伴| 爱情公寓免费观看完整版在线观看 | 电视剧温柔的背后在线观看| 苍老师免费观看电视剧电影| 广场舞电话情缘| 尖叫之夜免费观看2023年电影| 无法抗拒的他10集全集| 换伴5美国版高清免费版在线观看| 尸控警戒在线完整版免费观看| 在暴风雨时分| 暴躁老妈46集全免费播放柳暗花明又一春的上句是什么? | 黑帮大佬和我的的356在线观看| 哪里可以观看《V酒店第一季》?| 哪吒第2部免费| 短道速滑王蒙| 加百列的地狱| 我的学生的爸爸中字ID| 鲜花盛开的村庄电视剧| 电影车票| 金装的维尔动画免费观看| 正在播放: JUL-520 留下好色的老爹和软弱的妻子 我去了三天两夜的出差... 成 | 奈何boss要娶我2| 美妙人生韩剧| 罗克星克莱尔所有电影在线观看 | 当我飞奔向你免费看全片| 搞乜鬼大制作| 爱人电影免费观看韩国 | 新水浒传26集| 回复术士第三集真人版| 梅花三弄鬼丈夫电视剧免费观看| 九九电视剧免费观看| 暴躁46集全在线观看免费高清 | 地爆天星意大利完整版| 《黑暗荣耀》第二季| 犬夜叉完结篇国语版全集| 急诊护士电影完整版在线观看| 不要见怪电影| 猎人电视剧| 变形金刚7免费完整版在线观看| 幽灵射手电影免费观看完整版| 子弹慢镜头| 开江县| 奔跑吧第12期画中人| 陆贞传奇电视剧59| 小苹果原版mv| 建湖县| 三姐妹招聘男保姆| 隋唐英雄传4部| 三大队电影免费抢先观看| 爱情牧场| 魔镜号中文在线播放| 向东是大海 电视剧| 天魔异种| 新奥特曼在线观看免费| 法国空姐5免费高清原声满天星美版| 瓜达卢佩的玫瑰哪里能免费看| 圣诞节的英文单词| 120天索多玛电影在线观看| 周星驰粤语| 《美容院:特殊待遇》在线| 人间毒物| 见好就收电视剧免费完整版| 剑网3坐骑| 金牌销售秘密5HD| 牙医姐妹电影免费版在线看| 给你我的喜欢电视剧| 妈咪直播打扑克| 凉宫春日| 双女任务电影免费观看完整版| 人民的名义电视剧| 暗格里的秘密追剧日历| 古董局中局第一部免费观看| 情侠追风剑| 女保险推销员8中文| 交警一把抓住300多斤电缆线卷筒| 双肥临门| 双谍姐妹花|