久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

單片機(jī)C庫運(yùn)行時libspace與多任務(wù)安全實(shí)戰(zhàn)指南

單片機(jī)C庫運(yùn)行時libspace與多任務(wù)安全實(shí)戰(zhàn)指南 1. 從一次HardFault說起為什么C庫運(yùn)行時值得單獨(dú)拎出來講很多人寫單片機(jī)代碼注意力幾乎全放在寄存器配置、外設(shè)驅(qū)動、通信協(xié)議上覺得C庫就是#include string.h之后隨便調(diào)調(diào)memcpy、strlen、sprintf的事。我早年也是這么想的直到有一次在Cortex-M3上跑一個帶FreeRTOS的多任務(wù)采集系統(tǒng)任務(wù)里調(diào)了一次malloc運(yùn)行了大概四十分鐘之后系統(tǒng)直接進(jìn)了HardFault?;厮葜赶虻牡刂仿湓诹艘粋€我從來沒見過的段里。查了兩天才反應(yīng)過來問題出在C庫的堆管理和多任務(wù)搶占的交互上。這件事之后我才認(rèn)真去翻C庫運(yùn)行時的實(shí)現(xiàn)包括newlib、newlib-nano、ARM Compiler自帶的microlib以及各家IDE默認(rèn)鏈接進(jìn)去的那套啟動代碼。越看越覺得C庫運(yùn)行時C Runtime Library在單片機(jī)上是一個被嚴(yán)重低估的領(lǐng)域。它不像外設(shè)驅(qū)動那樣有直觀的寄存器可以看也不像RTOS那樣有明確的API文檔但它幾乎滲透在你寫的每一行C代碼里——從main函數(shù)被誰調(diào)用、全局變量誰清零、堆棧指針誰設(shè)置到printf重定向、malloc的線程安全、中斷里能不能調(diào)memcpy全都?xì)w它管。這篇內(nèi)容我打算把單片機(jī)C庫運(yùn)行時這條線從頭到尾捋一遍。核心圍繞幾個問題展開libspace到底是什么、C庫啟動流程在單片機(jī)上是怎樣一個順序、多任務(wù)環(huán)境下C庫的哪些函數(shù)是雷區(qū)、中斷安全到底該怎么保證。適合已經(jīng)能寫裸機(jī)程序、正在往RTOS或多任務(wù)方向走的開發(fā)者也適合那些被printf卡死、被malloc坑過、被HardFault折磨過的朋友。我會盡量把原理講透同時給出可以直接抄的配置和代碼讓你少走我當(dāng)年走過的彎路。2. libspace與C庫運(yùn)行時的真實(shí)邊界2.1 libspace不是某個具體庫而是一類運(yùn)行時支撐空間先澄清一個概念。很多人在論壇上看到libspace這個詞以為是某個具體的庫文件或者某個廠商的專有組件。實(shí)際上在單片機(jī)語境下libspace通常指的是C庫運(yùn)行時所占用的那一塊代碼空間和數(shù)據(jù)空間的總和包括啟動代碼startup、C庫函數(shù)本體、庫內(nèi)部使用的靜態(tài)數(shù)據(jù)區(qū)、堆區(qū)heap以及庫初始化時依賴的各類段section。你可以把它理解成編譯器把你的main函數(shù)和它依賴的所有C庫函數(shù)打包在一起再加上一段在main之前運(yùn)行的啟動代碼這一整套東西在Flash和RAM里占據(jù)的空間就是libspace。它不是一個.a文件的名字而是一個空間概念。理解這一點(diǎn)很重要因?yàn)楹竺嬷v的所有優(yōu)化、裁剪、多任務(wù)安全本質(zhì)上都是在管理這塊空間。在ARM GCC工具鏈下libspace的構(gòu)成大致是這樣的組成部分典型來源占用位置啟動代碼startup_*.s/crt0.oFlashC庫函數(shù)本體newlib / newlib-nanoFlash庫靜態(tài)數(shù)據(jù).data/.bss中的庫變量RAM堆區(qū)_sbrk管理的區(qū)域RAM棧區(qū)MSP/PSP指向的區(qū)域RAM初始化表.init_array/.fini_arrayFlash這里有個容易被忽略的點(diǎn)C庫函數(shù)本體在Flash里的占用往往比你想象的大得多。一個完整的printf加上浮點(diǎn)格式化支持在newlib下能吃掉十幾KB甚至二十幾KB的Flash。對于STM32F103C8這種只有64KB Flash的芯片來說這是致命的。所以后面我會專門講怎么裁剪。2.2 啟動代碼到底替你做了哪些事很多人寫單片機(jī)程序從來沒看過startup文件里到底寫了什么。但C庫運(yùn)行時的第一站就是啟動代碼不理解它后面全是空中樓閣。以Cortex-M為例上電復(fù)位后硬件做的第一件事是從向量表的前兩個字取出初始MSP和Reset_Handler地址。Reset_Handler里通常按這個順序執(zhí)行設(shè)置棧指針其實(shí)硬件已經(jīng)幫你從向量表加載了MSP但有些啟動代碼會再確認(rèn)一次。調(diào)用SystemInit配置時鐘、向量表偏移等這個函數(shù)由廠商提供。調(diào)用__libc_init_array這是C庫運(yùn)行時的關(guān)鍵入口它會遍歷.init_array段執(zhí)行所有標(biāo)注了__attribute__((constructor))的函數(shù)以及C的全局構(gòu)造函數(shù)。清零.bss段把所有未初始化的全局變量和靜態(tài)變量置零。搬運(yùn).data段把Flash里的初值拷貝到RAM。調(diào)用main終于輪到你的代碼。這里有個非常關(guān)鍵的細(xì)節(jié).bss清零和.data搬運(yùn)的順序以及它們和__libc_init_array的先后關(guān)系不同工具鏈?zhǔn)遣灰粯拥摹RM Compiler的__main會先做段初始化再調(diào)__rt_entry而GCC的crt0順序又不同。如果你在全局對象的構(gòu)造函數(shù)里訪問了另一個全局變量而那個變量還沒被初始化就會讀到垃圾值。這種bug極難排查因?yàn)樗趩尾秸{(diào)試時可能表現(xiàn)正常一上電跑就出問題。提示如果你在C環(huán)境下寫單片機(jī)全局對象的構(gòu)造函數(shù)里絕對不要依賴其他全局對象的狀態(tài)。所有跨對象的初始化依賴都應(yīng)該顯式地放到main里按順序執(zhí)行。2.3 堆和棧在libspace里的位置關(guān)系棧和堆是libspace里最容易出問題的兩塊。棧由鏈接腳本里的_estack符號定義頂部向下增長堆由_end符號定義起始向上增長在_sbrk實(shí)現(xiàn)里。兩者相向而行中間的空隙就是可用空間。很多默認(rèn)的鏈接腳本只給了一個_Min_Heap_Size和_Min_Stack_Size實(shí)際運(yùn)行時如果堆??偤统^RAM就會發(fā)生堆棧碰撞。這種碰撞不會立刻報(bào)錯而是表現(xiàn)為某個全局變量莫名其妙被改寫、某個函數(shù)返回地址被覆蓋、系統(tǒng)跑一段時間后隨機(jī)死機(jī)。我實(shí)測過一個案例STM32F407有192KB RAM鏈接腳本里棧給了1KB堆給了512字節(jié)看起來綽綽有余。但系統(tǒng)里有個任務(wù)遞歸調(diào)用了深度較大的函數(shù)棧實(shí)際用了1.8KB直接沖進(jìn)了堆區(qū)把malloc的元數(shù)據(jù)踩爛了。后來把棧調(diào)到4KB問題消失。判斷堆棧是否夠用的方法我常用這兩個棧水位檢測啟動時把棧區(qū)域全部填成0xDEADBEEF運(yùn)行一段時間后掃描看最深用到哪里。堆使用統(tǒng)計(jì)在_sbrk里加計(jì)數(shù)器記錄歷史最大堆用量。這兩個手段配合使用基本能摸清libspace在RAM里的真實(shí)占用。3. 多任務(wù)環(huán)境下C庫函數(shù)的雷區(qū)清單3.1 為什么malloc在RTOS里是頭號危險分子裸機(jī)程序里malloc用起來很爽因?yàn)闆]有并發(fā)堆的管理是串行的。但一旦上了RTOS多個任務(wù)可能同時調(diào)用malloc而標(biāo)準(zhǔn)C庫的malloc實(shí)現(xiàn)無論是newlib還是microlib默認(rèn)不是線程安全的。newlib的malloc內(nèi)部維護(hù)一個空閑鏈表_sbrk負(fù)責(zé)向系統(tǒng)要內(nèi)存。當(dāng)任務(wù)A正在遍歷空閑鏈表準(zhǔn)備分配時如果被任務(wù)B搶占任務(wù)B也來遍歷同一個鏈表兩個任務(wù)就可能拿到同一塊內(nèi)存或者把鏈表指針改亂。這種問題的可怕之處在于它不一定立刻崩潰而是讓堆慢慢碎片化、元數(shù)據(jù)錯亂最后在某個不相干的地方爆出來。解決方案有三條路給malloc加互斥鎖重寫_sbrk或者在malloc外層包一層用RTOS的mutex保護(hù)。但要注意malloc本身可能被中斷服務(wù)程序調(diào)用而mutex不能在中斷里用所以這條路有局限。使用RTOS自帶的內(nèi)存管理FreeRTOS的pvPortMalloc、RT-Thread的rt_malloc都是線程安全的且針對嵌入式做了優(yōu)化。這是我最推薦的做法——在RTOS項(xiàng)目里徹底禁用標(biāo)準(zhǔn)malloc把所有動態(tài)分配換成RTOS的接口。干脆不用動態(tài)內(nèi)存所有緩沖區(qū)靜態(tài)分配。這是最穩(wěn)的方案代價是靈活性下降。我個人的經(jīng)驗(yàn)是在RAM小于64KB的單片機(jī)上動態(tài)內(nèi)存能不用就不用。靜態(tài)分配雖然浪費(fèi)一點(diǎn)空間但換來的是確定性這在嵌入式里比什么都值錢。3.2printf家族的重入問題printf、sprintf、snprintf這些函數(shù)在多任務(wù)下的問題比malloc更隱蔽。它們內(nèi)部通常有一個靜態(tài)的緩沖區(qū)或者文件流狀態(tài)FILE結(jié)構(gòu)體多個任務(wù)同時調(diào)用時輸出會交錯、錯亂甚至因?yàn)閮?nèi)部指針被改而崩潰。更麻煩的是很多人為了調(diào)試方便在中斷服務(wù)程序里也調(diào)printf。中斷可能打斷正在執(zhí)行printf的任務(wù)導(dǎo)致庫內(nèi)部的靜態(tài)狀態(tài)被破壞。這種問題在調(diào)試階段可能看不出來因?yàn)橹袛嘤|發(fā)頻率低但產(chǎn)品上線后中斷頻繁觸發(fā)就會隨機(jī)死機(jī)。我的處理原則很明確中斷里絕對不調(diào)printf。需要輸出調(diào)試信息時往一個環(huán)形緩沖區(qū)里寫由低優(yōu)先級任務(wù)負(fù)責(zé)搬運(yùn)。多任務(wù)環(huán)境下用snprintf而不是sprintf并且每個任務(wù)用自己的局部緩沖區(qū)避免共享。如果必須共享一個輸出通道用RTOS的mutex把整個格式化加輸出過程保護(hù)起來。這里有個細(xì)節(jié)snprintf本身在newlib里也不是完全可重入的因?yàn)樗赡苷{(diào)用locale相關(guān)的函數(shù)。但在單片機(jī)環(huán)境下locale通常被裁剪掉了所以實(shí)際風(fēng)險可控。真正危險的是printf直接操作stdout的那部分。3.3strtok、rand這些隱藏的不可重入函數(shù)除了malloc和printfC庫還有一批函數(shù)是明確不可重入的因?yàn)樗鼈儍?nèi)部使用了靜態(tài)變量函數(shù)不可重入原因替代方案strtok內(nèi)部靜態(tài)指針保存上次位置strtok_rrand/srand內(nèi)部靜態(tài)種子自己實(shí)現(xiàn)或加鎖asctime/ctime返回靜態(tài)緩沖區(qū)指針asctime_r/ctime_rgmtime/localtime返回靜態(tài)結(jié)構(gòu)體gmtime_r/localtime_rgetenv可能操作共享環(huán)境區(qū)避免在任務(wù)中調(diào)用這些函數(shù)在裸機(jī)下用沒問題但在多任務(wù)下就是定時炸彈。我見過一個項(xiàng)目兩個任務(wù)同時調(diào)strtok解析不同的字符串結(jié)果解析結(jié)果互相串臺查了一周才發(fā)現(xiàn)是庫函數(shù)的問題。注意帶_r后綴的可重入版本在newlib里是有的但會額外占用Flash。如果你的項(xiàng)目對空間敏感可以自己實(shí)現(xiàn)簡化版比如strtok_r的邏輯其實(shí)很簡單二十行代碼就能寫出來。4. 中斷安全從原理到可落地的防護(hù)策略4.1 中斷安全的核心是可重入和原子性中斷安全這個詞聽起來很玄拆開來看就兩件事可重入一個函數(shù)在執(zhí)行過程中被中斷打斷中斷里又調(diào)用了同一個函數(shù)等中斷返回后原來的執(zhí)行能正確繼續(xù)。原子性對共享數(shù)據(jù)的讀-改-寫操作不能被中斷打斷否則會出現(xiàn)丟失更新。C庫函數(shù)里大部分純計(jì)算函數(shù)如memcpy、strlen、abs是可重入的因?yàn)樗鼈冎挥眉拇嫫骱蜅I系木植孔兞?。但涉及全局狀態(tài)、靜態(tài)緩沖、堆管理的函數(shù)就不可重入。判斷一個函數(shù)是否中斷安全我的經(jīng)驗(yàn)法則是看它有沒有訪問函數(shù)作用域之外的、可寫的數(shù)據(jù)。如果有就要警惕。4.2 中斷里調(diào)用C庫函數(shù)的實(shí)際風(fēng)險等級我把常見C庫函數(shù)在中斷里的風(fēng)險分成三檔低風(fēng)險可以直接用memcpy、memset、memcmp、memmovestrlen、strcmp、strcpy前提是目標(biāo)緩沖區(qū)不被其他上下文共享abs、labs、簡單的數(shù)學(xué)運(yùn)算中風(fēng)險需要評估snprintf如果只往局部緩沖區(qū)寫且不涉及浮點(diǎn)通常安全。但newlib的浮點(diǎn)格式化會用到較大的??臻g中斷??赡懿粔?。sin、cos、sqrt數(shù)學(xué)庫函數(shù)通常是可重入的但浮點(diǎn)運(yùn)算在中斷里可能觸發(fā)FPU上下文保存問題如果RTOS沒做懶加載。高風(fēng)險絕對不要在中斷里用malloc、free、calloc、reallocprintf、fprintf、putsstrtok、rand、localtime任何涉及文件流操作的函數(shù)4.3 用臨界區(qū)保護(hù)共享的C庫狀態(tài)如果你確實(shí)需要在多個上下文任務(wù)和中斷之間共享某些C庫功能就必須用臨界區(qū)保護(hù)。在Cortex-M上最常用的方法是關(guān)中斷// 進(jìn)入臨界區(qū)保存當(dāng)前中斷狀態(tài) __attribute__((always_inline)) static inline uint32_t enter_critical(void) { uint32_t primask __get_PRIMASK(); __disable_irq(); return primask; } // 退出臨界區(qū)恢復(fù)之前的中斷狀態(tài) __attribute__((always_inline)) static inline void exit_critical(uint32_t primask) { __set_PRIMASK(primask); }使用方式uint32_t state enter_critical(); // 這里操作共享的C庫狀態(tài)比如調(diào)用一個非線程安全的函數(shù) exit_critical(state);注意這里保存和恢復(fù)PRIMASK而不是簡單地開中斷是因?yàn)榕R界區(qū)可能嵌套直接__enable_irq()會破壞外層臨界區(qū)的狀態(tài)。在FreeRTOS里更推薦用taskENTER_CRITICAL()和taskEXIT_CRITICAL()它們內(nèi)部處理了嵌套計(jì)數(shù)。但要注意臨界區(qū)里不能調(diào)用任何可能引起任務(wù)切換的函數(shù)否則會觸發(fā)斷言。4.4 中斷棧和任務(wù)棧的分離配置Cortex-M的MSP和PSP分離機(jī)制是保證中斷安全的重要硬件基礎(chǔ)。通常的配置是MSP給中斷服務(wù)程序和啟動代碼用大小要能容納最深的ISR調(diào)用鏈。PSP給任務(wù)用每個任務(wù)有自己的棧。如果中斷里調(diào)用了C庫函數(shù)比如snprintf消耗的是MSP。很多人只關(guān)注任務(wù)棧大小忽略了MSP結(jié)果中斷里一調(diào)庫函數(shù)就棧溢出。我的配置習(xí)慣是MSP至少給1KB如果中斷里要用浮點(diǎn)格式化給2KB。任務(wù)棧根據(jù)實(shí)際水位檢測來定一般1KB起步。在FreeRTOS的FreeRTOSConfig.h里configISR_STACK_SIZE_WORDS或者鏈接腳本里的_Min_Stack_Size控制的就是MSP。這個值不能省。5. 裁剪與優(yōu)化讓libspace瘦下來的實(shí)操手段5.1 從newlib切換到newlib-nano的收益與代價ARM GCC工具鏈默認(rèn)鏈接的是完整版newlib功能全但體積大。切換到newlib-nano只需要在鏈接選項(xiàng)里加--specsnano.specsarm-none-eabi-gcc --specsnano.specs -o firmware.elf ...實(shí)測數(shù)據(jù)STM32F103-Os優(yōu)化配置Flash占用RAM占用printf浮點(diǎn)支持完整newlib約28KB約4KB支持newlib-nano約12KB約2KB默認(rèn)不支持newlib-nano 浮點(diǎn)printf約18KB約3KB支持newlib-nano的代價主要是printf默認(rèn)不支持浮點(diǎn)、部分函數(shù)的實(shí)現(xiàn)被簡化、malloc的行為略有不同。如果你的項(xiàng)目需要打印浮點(diǎn)數(shù)要額外加-u _printf_float鏈接選項(xiàng)這會增加約6KB Flash。5.2 用-u _printf_float之外的辦法處理浮點(diǎn)輸出如果只是偶爾需要打印浮點(diǎn)加6KB Flash有點(diǎn)虧。我的做法是自己寫一個定點(diǎn)格式化函數(shù)把浮點(diǎn)轉(zhuǎn)成整數(shù)和小數(shù)兩部分分別打印void print_float(float value, int decimals) { int int_part (int)value; float frac value - int_part; if (frac 0) { frac -frac; int_part -int_part; } char buf[16]; int i 0; // 打印整數(shù)部分 // ... 省略整數(shù)轉(zhuǎn)字符串邏輯 // 打印小數(shù)點(diǎn) buf[i] .; // 打印小數(shù)部分 for (int d 0; d decimals; d) { frac * 10; int digit (int)frac; buf[i] 0 digit; frac - digit; } buf[i] \0; uart_send_string(buf); }這個函數(shù)只占幾百字節(jié)Flash比鏈接整個浮點(diǎn)printf劃算得多。缺點(diǎn)是精度和舍入行為要自己控制但對于調(diào)試輸出足夠了。5.3 重定向_write和_sbrk的正確姿勢在GCC newlib環(huán)境下printf最終會調(diào)用_writemalloc最終會調(diào)用_sbrk。這兩個函數(shù)需要你自己實(shí)現(xiàn)#include sys/stat.h #include errno.h // 重定向printf到串口 int _write(int file, char *ptr, int len) { (void)file; for (int i 0; i len; i) { while (!(USART1-SR USART_SR_TXE)); USART1-DR ptr[i]; } return len; } // 堆管理 extern char _end; // 鏈接腳本定義的堆起始 extern char _estack; // 棧頂 static char *heap_ptr _end; void *_sbrk(int incr) { char *prev heap_ptr; if (heap_ptr incr _estack - 1024) { // 留1KB給棧 errno ENOMEM; return (void *)-1; } heap_ptr incr; return prev; }這里有個坑_sbrk的返回值必須是之前的位置而不是新的位置。很多人寫反了導(dǎo)致malloc拿到的指針錯位堆直接亂掉。另外_write里如果用了while等待發(fā)送完成在中斷上下文里調(diào)用printf就會死等。所以再次強(qiáng)調(diào)中斷里不要調(diào)printf。5.4 用鏈接腳本精確控制libspace布局鏈接腳本是控制libspace的最終手段。一個典型的STM32鏈接腳本關(guān)鍵部分MEMORY { FLASH (rx) : ORIGIN 0x08000000, LENGTH 64K RAM (rwx) : ORIGIN 0x20000000, LENGTH 20K } SECTIONS { .text : { *(.isr_vector) *(.text*) *(.rodata*) *(.init_array*) } FLASH .data : { _sdata .; *(.data*) _edata .; } RAM AT FLASH .bss : { _sbss .; *(.bss*) *(COMMON) _ebss .; } RAM ._user_heap_stack : { . ALIGN(8); _end .; . . _Min_Heap_Size; . . _Min_Stack_Size; . ALIGN(8); } RAM }關(guān)鍵點(diǎn)是_end符號的位置它標(biāo)記了堆的起點(diǎn)。_sbrk里用的就是這個符號。如果你改了鏈接腳本一定要確認(rèn)_end還在正確的位置。6. 實(shí)戰(zhàn)案例一個多任務(wù)采集系統(tǒng)的C庫安全改造6.1 問題現(xiàn)象與初步定位回到開頭那個HardFault的案例。系統(tǒng)配置是STM32F103 FreeRTOS三個任務(wù)采集任務(wù)100Hz、處理任務(wù)10Hz、通信任務(wù)事件驅(qū)動。采集任務(wù)里用malloc分配臨時緩沖區(qū)處理任務(wù)里用printf輸出調(diào)試信息。運(yùn)行約四十分鐘后死機(jī)HardFault。用調(diào)試器看出錯地址在_malloc_r內(nèi)部。初步判斷是堆被破壞。6.2 逐步排查的完整鏈路第一步檢查棧溢出。把MSP和任務(wù)棧都填成0xDEADBEEF跑十分鐘后掃描發(fā)現(xiàn)采集任務(wù)的棧用了約800字節(jié)配置的是1KB沒溢出。MSP用了約400字節(jié)配置1KB也沒問題。第二步檢查堆棧碰撞。計(jì)算_end到_estack的距離減去棧配置剩余約8KB給堆。采集任務(wù)每100ms分配一次每次128字節(jié)理論上不會耗盡。但malloc的元數(shù)據(jù)有開銷實(shí)際每塊占用約144字節(jié)。跑四十分鐘約24000次分配如果free沒正確執(zhí)行堆早就爆了。第三步加日志。在_sbrk里記錄每次調(diào)用的incr和返回地址發(fā)現(xiàn)堆指針一直在增長沒有回落。說明**free沒有真正釋放內(nèi)存**。第四步查free的調(diào)用。采集任務(wù)里確實(shí)調(diào)了free但處理任務(wù)里也調(diào)了malloc和free。兩個任務(wù)并發(fā)操作堆導(dǎo)致空閑鏈表被破壞free時無法正確合并相鄰塊堆碎片化越來越嚴(yán)重最終_sbrk返回失敗malloc返回NULL而采集任務(wù)沒檢查NULL就直接寫踩了空指針。6.3 修復(fù)方案與驗(yàn)證修復(fù)分三步禁用標(biāo)準(zhǔn)malloc在FreeRTOSConfig.h里把configUSE_NEWLIB_REENTRANT設(shè)為0所有動態(tài)分配改用pvPortMalloc和vPortFree。printf加互斥創(chuàng)建一個mutex所有printf調(diào)用前先獲取mutex輸出完釋放。中斷里改用環(huán)形緩沖區(qū)串口中斷收到數(shù)據(jù)后寫入環(huán)形緩沖區(qū)通信任務(wù)負(fù)責(zé)讀取和解析。改造后連續(xù)運(yùn)行72小時無故障。堆使用量穩(wěn)定在2KB以內(nèi)沒有增長趨勢。6.4 這個案例暴露的通用問題這個案例的核心教訓(xùn)是C庫的線程安全性不會因?yàn)槟阌昧薘TOS就自動獲得。RTOS只提供調(diào)度和同步原語C庫的狀態(tài)保護(hù)需要你自己做。另外malloc返回NULL的檢查經(jīng)常被忽略。在裸機(jī)下malloc幾乎不會失敗但在多任務(wù)下堆被耗盡是很常見的。所有malloc調(diào)用后都必須檢查返回值。7. 幾個容易被忽略的細(xì)節(jié)與個人經(jīng)驗(yàn)7.1errno在多任務(wù)下的表現(xiàn)errno在標(biāo)準(zhǔn)C里是一個全局變量但在多任務(wù)環(huán)境下每個任務(wù)應(yīng)該有自己獨(dú)立的errno。newlib通過_impure_ptr和struct _reent來實(shí)現(xiàn)這一點(diǎn)但需要RTOS配合。FreeRTOS提供了configUSE_NEWLIB_REENTRANT選項(xiàng)開啟后每個任務(wù)有自己的_reent結(jié)構(gòu)。開啟這個選項(xiàng)的代價是每個任務(wù)多占用約100字節(jié)RAM。如果你的任務(wù)多、RAM緊張要權(quán)衡。不開的話errno就是全局的一個任務(wù)設(shè)置的值可能被另一個任務(wù)覆蓋導(dǎo)致錯誤判斷。7.2atexit和全局析構(gòu)在單片機(jī)上的行為atexit注冊的函數(shù)在main返回后執(zhí)行。但單片機(jī)的main通常是個死循環(huán)永遠(yuǎn)不會返回所以atexit注冊的函數(shù)永遠(yuǎn)不會被調(diào)用。同理C的全局析構(gòu)函數(shù)也不會執(zhí)行。這意味著不要依賴析構(gòu)函數(shù)來釋放資源。所有清理邏輯要么顯式調(diào)用要么放在看門狗復(fù)位前的鉤子里。7.3 浮點(diǎn)運(yùn)算與FPU上下文如果芯片有FPU如Cortex-M4F中斷里使用浮點(diǎn)運(yùn)算時硬件會自動保存FPU寄存器到棧上。但如果RTOS配置了懶加載lazy stacking而中斷里又調(diào)用了C庫的浮點(diǎn)函數(shù)可能出現(xiàn)上下文保存不完整的問題。我的建議是如果中斷里要用浮點(diǎn)關(guān)閉懶加載。在FreeRTOS里configENABLE_FPU和configENABLE_LAZY_STACKING要配合設(shè)置。關(guān)閉懶加載會增加中斷延遲但換來的是確定性。7.4 一個實(shí)用的調(diào)試技巧當(dāng)你懷疑C庫運(yùn)行時出問題時可以在鏈接選項(xiàng)里加-Wl,-Mapoutput.map生成map文件。map文件里能看到每個C庫函數(shù)占用的Flash地址和大小以及堆棧符號的位置。配合arm-none-eabi-nm和arm-none-eabi-objdump可以精確定位問題。我常用的命令組合# 查看符號地址和大小 arm-none-eabi-nm -S --size-sort firmware.elf | tail -30 # 反匯編特定函數(shù) arm-none-eabi-objdump -d firmware.elf | grep -A 50 _malloc_r # 查看段布局 arm-none-eabi-readelf -S firmware.elf這幾個命令配合使用基本能摸清libspace的全貌。7.5 關(guān)于libspace裁剪的取舍最后說一個心態(tài)問題。很多人為了省Flash把C庫裁到極致結(jié)果調(diào)試時連printf都用不了開發(fā)效率大幅下降。我的建議是開發(fā)階段用完整庫發(fā)布階段再裁剪。用條件編譯或者不同的鏈接配置來切換不要為了省幾KB Flash犧牲整個開發(fā)體驗(yàn)。Flash便宜時間貴。這個賬要算清楚。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美韩国你懂得在线| 日韩女优中文字幕| 啊v在线观看视频| 丝袜综合色图| 91蜜臀熟女| 国产又黄又粗的视频| 欧美在线亚洲| 中文区中文字幕免费看| 天天射夜夜| 老女人爆菊| 澳门特级毛片免费观看| www.伪伪| 免费视频在线一区二区不卡| 3P丝袜熟女 色综合| 欧美日韩淫加| 极品白嫩福利在线| 欧美激情综合色综合啪啪五月| 人妻啪| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 夜夜爽爽夜夜精品视频| 韩国女主播青草在线| 婷婷香蕉欧美在线一区二区三区| 欧美成人黄网色网站| 天天艹天天日| 色久综合| 五月丁香| 激情五月丁香五月| 超碰在线人妻| 大屁股xxxxx| 国产黄色av大片网站| 日本视频一区二区三区| 一起草欧美| 五月天激情国产综合婷婷婷| 97人妻色| 九九国产| 欧美日韩制服| 亚洲欧美人妻| 无码 黑人一区二区三区| 日韩成年人性爱视频| 熟妇色99| 麻豆天美一区二区| 色综合一本| 亚洲图片欧美色| 色爱天堂| 日韩性爱1级片视频| 欧美自拍偷拍综合图片| 亚瑟国产精品久久无码| 午夜电影在线观看无码专区| 日韩另类| 欧美综合骚| 亚洲激情 欧美色图| 久久亚洲不卡一区二区三区| 日本精品性生活久久久| 91影视亚洲| 少妇贴图| 一区二区三区免费视频入口| 加勒比久久综合网高清| 亚洲综合五月天| 欧美日韩夜夜| 五月开心久久AV官网| 久久精品一区一起草| 欧美第五页| 私人尤物在线精品不卡| 快播久久人人aV| 亚洲美腿丝袜香蕉影视欧美成人| 麻豆天美91| 国产成人99久久亚洲综合| 综合久久久久久久综合网| 人人妻人射| 色爱综合网| 超碰三级秋霞| 亚欧美色图| 97啪啪| 日日干天天干夜夜爽| 日韩人妻播放| 男人的天堂激情| 亚洲色图自拍| 97精品免费| 日本精品网站在线中文| 欧美一级色| 清纯唯美激情四射| 日韩综合色网| 内射小黄片| 竹菊影视国产一区二区| 超碰在线1234区| 中文字幕丰满人妻日本| 亚洲欧美精品福利在线| 中文字幕久久精视频久久大全| 午夜精品久久久久久久| 无码一区二区精品视频久久久春药| 最新日产中文在线麻豆| 91高潮喷水美女| 久久六六| 国产成人网| 操一区| 欧美AB在线| 极品粉嫩一区二区| 天天干天天爽| 后入日本1234| 日韩欧美成人性爱在线| 看黑丝美女操逼青青网站| 欧美人妖内射| 国产农村一一级特黄毛片| 干b在线性社区| 中文字幕一二三| 亚洲AV成人无码一区二区三区在线观看| 国产伦精品免编号公布| 国产黄色视频久久| 欧美日韩国产传媒在线精品| 亚洲 小说 欧美 激情 另类| 丰满翘臀美女影院视频| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 在线观看黄色电话| 麻豆精品三区视频| 伊人五月天| 极品少妇久久久| 操逼操网| 啊啊啊轻点在线观看| 成人自拍三级在线观看| 免费农村成人少妇人妻Aa一区二区视频| 伊人国产AV| 五月天丁香| 中文字幕青青草| 国产又黄又爽又刺激久久久久久| 在线观看黄色电话| 久久久久无码一妻区| 亚洲综合另类小说色区亚洲成av人片在www| 色情综合| 人人操人人肉久久精品| 超碰爽人妻熟女Av| 国产无马在线| 精品一区二区麻豆| 国模吧 一区二区三区| 91劲爆| 亚洲熟女av日韩熟女| 中文字幕人乱码中文字的预防方法| 精品一区二区三区国产 | yirendaxiangjiashipin| 日韩成人无码| 91九九九小逼| 国产99 中文字幕日韩小视频| 99热大香蕉伊在线| 91丨国产丨白浆| 国产乱伦亚洲色图高清无码| 欧美综合传媒| 亚洲丝袜色| 国产主播福利| 小电影欧美91| 宗合情欲网| 国产精品久久久久久久电影渣男| 啊啊啊不要嗯嗯在线观看| www.色综合| 中文字幕国产在线天堂| 91美女视频直播| 久久这里精品国产99丫e6| 日韩在线性爱免费视频| 好吊色青靑草| 蜜桃午夜视频一区二区| 加勒比综合九九99视频在线播放| 乱伦日本色图AⅤ| 亚洲男人天堂2017| 97超碰中文| 亚洲天堂另类美腿| 亚洲无码一区二区三区三州| av强奸乱轮| 夜夜高潮夜夜爽国产伦精品| 亚洲狼狼干综合1| 亚洲成人在线播放| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 欧美后入式| 日韩草久视频| 亚洲少妇色| 操啊国产| 97碰久久| 亚洲无码一区成人免费午夜| 国产乱人妻精品入口| 蜜乳性色无码专日粉嫩骚逼AV| 欧美精品黑人猛交高潮| 操我无码| 日本成a人v网站在线观看| 欧美91在线+|+欧美| 91色久| 强奸乱伦AV一天堂网| 色香伊人| 91女优在线观看| 磁力99AV| 欧美丝袜激情| 91在线美女| 人人爱操| 婷婷导航| 婷色五月天| 美女国产一区二区久久| 一级做a爰片性色毛片久久| 草B在线| 国产精品久久久999| 亚洲天堂色图| 精品网站99999| 久久这里是精品| 超碰久超碰久| 岛国大片在线观看网站入口| 欧美黄色手机在线观看| 激情小说图片亚洲首页| 国产中出内射一区二区| 亚洲最新Av| 91色狼| 中文字幕在线免费观看 | 亚洲熟妇一,二,三期| 欧美少妇高潮久久91| 日韩内射视频| 欧美精品在线观看| 97视频网站在线观看| 天天干天天做| 超碰久久性爱| 91久久午夜无码鲁丝片久久人妻| 久久久性爱视频| 欧美色997| 91精品国产综合久久久蜜臀| 精品无码一区二区| 欧美综合网1| 另类视频在线| 亚洲精品黄码久久久久| 亚洲日韩精品一区二区| 色在线视频导航| 天天看夜夜看日日干| 91综合网| 黄色大片免费在线| www网站黄| 婷婷中文网| 综合色色网| h在线看免费版在线看| 人妻激情偷乱视频一区二区三区 | 中美日韩毛片| 2023天天操夜夜操| 精品性爱一二三区| 日日夜夜狠狠| 78m成人视线| 国产97在线播放| 精品人妻av区天天看片| 熟女激情综合网| 2019久久久久久久久福利| 手机在线人成免费视频| 免费人人搞97| 欧美性五月| 欧美亚洲系列| 国产亚洲精品一区二区三区| 99久久99九九99九九九| 国产成人AV麻豆| 少好三P| 日日骚AV| 日本亚洲熟女视频| 欧美999999| 欧美在线大香999| 欧美第一页| 欧美另类综合久久| 麻豆福利视频导航| 欧美日本成人一区二区| 激情综合二| 91麻豆天美国产欧美| 蜜臀99999| 美女黄站| 国产成人在线观看综合| 天天看特黄的免费网站| 天天综合网~91| 欧美日韩激情无码专区| 91大神电影天堂| 婷婷人妻激情| 伊人久久大香大香线蕉中文| 91天天c| 曰韩中文人妻视频| 欧美躁死她一区二区| 东京热精品97综合网| 浪人综合网| 激情久久久| 国产视频大全| 日韩国产欧美伦理在线| 佐山爱中文字幕| 91亚洲人| 丁香六月婷婷久久综合| www国产精品| 99久久久无码国产精品性男| 91欧美另类| 国产美女口爆吞精视频| 欧美|91色综合| 亚洲色图欧美色18直播在线| 日韩av不卡在线观看| 丝袜av一区二区三区| 久久六六| 久草新免费| 一级片视频啪啪| 久久伊人在线五区| 92一区二区| 亚洲 日本 一 二 三| 精品9999| 天天日天天舔| 2017天天插| 91蜜桃婷婷狠狠久久综合9色| 风骚少妇视频中文字幕| 芊芊操逼视频无码| 九九九九一级| 日韩欧美国产高清视频| 超碰社区97| 日本一本道A级黄色毛片试看60分钟| 天堂伊人久久| 国产原创剧情在线丝袜 | 91精品人妻一区二区三区蜜桃| 日韩黄色成人性爱| 精品无av| 久久天天摸| 亚欧无码线免费观看视频| 欧美97日韩| 91色香| 艳美熟妇先锋一二三区| 欧美午夜视频免费观看| 青青青草伊人精品| 久久99国产综合精品女同| 91久久久亚洲| 欧美男人亚洲天堂| 99操视频| 肉动漫无遮挡h在线观看| 97超碰69| 操逼片国产| 久久久性少妇| 欧美日不卡| 无码一区免费在线不卡| 婷婷激情五月综合| 亚洲精品一二三四区| 免费视频在线一区二区不卡| 精品十八在线观看| wwe 天天干.com| 国产女人操逼视频| 国产女人视频三四五区| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 亚洲精品国产AV天美传媒| 中文字幕高清精品一区| 欧美成97爱| 欧美内射少妇| 欧美精品自慰系列寂寞少妇 | 亚洲最大的黄色电影网站。| 色久桃花影院在线观看| 日韩精品一区二区人人人| 蜜臀AV一区二区三区激情综合| 三级AV入口| 亚洲高潮影院| 日本精品免费一区二区三区四区| a在线观看| 乱伦熟妇一区二区| 台湾佬大香蕉| 人人九九精| 国产高清不卡视频| 黄色污污污污污污网站| 亚洲一卡2卡3卡4卡乱码网站| 国产传媒一区二区三区| 亚洲资源吧| 久久99精品九九久久久婷婷| 一级性爱视频免费观看 | 黄片aaaaa一区| 大香蕉狠狠爱| 天天干夜夜肏| 91色综合激情| 97视频网站在线观看| aaaa少妇高潮大片| 性色av蜜臀av色欲aV| 啊啊嗯嗯好爽| 久久伊人东京热| 成熟熟女国产精品一区二区| 丝袜喷水在线| 开心五月婷婷| 99视频内射三四| 国产aⅴ无码片毛片一级网站| 中文字幕后石码三区四区| 性感美女啊啊啊在线| 福利一级版子| 九草在线大香蕉| 超碰天天久久79| 久久这里都是精品| 久久久久久久一级黄色打同平台| 婷婷丁香六月天| 久9视频| 人看人人摸人人操| 国产99久久99热这里只有精品15| 岛国黄色短视频| 亚洲?V无码专区在线电影| 91精品人| 日本潮催一卡操| 日韩激情电影中文字幕| 国产一区二区在线播放量| 超碰95| 1769成人国产精品视频| 亚洲色狠| 内射小黄片| 久久久久久亚洲Av无码| A 在线网址| 天天综合网日韩7799| 2017人人操,人人摸| 欧美,日韩综合久久| 郑州宾馆老熟女露脸啪啪| 九九精品99| 国产女人与拘做受视频免费| 国产综合网站在线播放 | 亚洲夜夜欢无码一区二区| 草莓精品视频| 五月天婷婷激情| 天堂av2019| 嗯……啊…嗯嗯…啊…好舒服| 精品久久久久9999| 99热大香蕉伊在线| 国产精品久久泡妞网站| 在线视频免费观看午夜| 乱欲一区二区| 久热99| 69人妻人人揉人人躁人人精品| 亚洲男人的天堂V| 蜜臀99999| 欧美精品,四区。五区| 亚洲日精品| 日本精品中文字幕视频| 美女一区二区国产精品| 99激情| 欧美曰韩国产精品| 老熟女综合网 | 蜜臀久久久国产| 欧美激情一| 黑人娇小av在线播放| 欧美精品23| 日韩人妻一区二区精品| 欧美性后入| 欧美人妻一区二区| 内射老妇BBWX0C0CK| 午夜120视频在线观看| 婷婷中文字幕| 久草草一二三四区久久| 在线综合网| 天天干夜夜一操| 国内精品不卡无毒99999| 欧洲亚洲综合| 久久亚州精品成人Av无| 丁香婷婷色五月| 国产人妻一区二区三区欧美毛片| 天天综合中文字幕 91| 伊人久久在线视频观看| 99热免费| 激情欧美97| 91成人在线免费视频| 欧美永久激情一区二区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 日韩情色AV| 成人国产二区三区在线,男女精品。| 午夜乱轮操逼视频免费看| 亚洲精品视频二区| 亚洲清纯综合| 久久精品国产72国产精品福利| 色999偷自拍拍| 精…码一二三区| www久| 九九人妻| A 天堂在线观看视频| 国产欧美日韩臀| 丝袜美腿av女优在线| 激情看片网站| 欧美综合自拍亚洲综合图| 日韩乱伦AⅤ| 精品久久久久黄少妇| 色欧美综合| 日本色色网| 国产乱码久久久| 日韩美女操b| 好舒服视频| 97国产精品| 成人情色一区二区| 好爽视频在线观看视频| 激情综合五月| 男女国产精品| 麻豆天美国美国产| 91日韩| 天美国产三级传媒| 乱性AV| 超碰97资源大奶| 在线综合网| 中日无幕一二三四区| 欧美天天射| 啊啊啊好湿久久| 中国农村熟妇毛片视频| 性色av一区二区| 中文字幕亚洲热播人妻| 中文字幕精品亚洲熟女| 精品人妻美妇91job| 日本不卡中文| 天天摸天天插天天日| 色图综合网| 大香蕉在线免| 竹菊影视国产一区二区| 人人操人人肉久久精品| 夜夜狼人妻| 日韩色欲久久一二三四区| 久久久国产精品亚洲精品| 亚洲精品啪视频| 97资源站国产精品| 久久综合18p| 夜夜天天噜狠狠爱2021| 美女t无毒不卡不卡| 男人天堂.AB| 2017人人操,人人摸| 九99久久| 在线人妻熟女一区二区三区四区五区| 日日摸夜夜夜夜爽| 久久一区二区蜜桃| 亚洲天天影视综合网| 免费久久精品麻豆一区二区av| 十八禁黄色| 日韩人妻网站| 色99在线| 嗯啊抽插大香蕉网页| 欧美草草高清日韩视频| 国产亚卅97| 久操不卡视频| 国产日韩欧美中文在线播放| 台湾佬大香蕉| 久久久久久久久久久久欧美日| 欧美国产日韩清纯唯美| 人人操人人摸人人看人人干| 欧美97在线欧| 久久精品日韩专区免费观看| 性色高清在线| 亚洲nv男人的天堂网| 人妻少妇被猛烈进入中| 亚洲人天堂| 不卡六六在线91| 久久天天躁日日躁狠狠躁| 大香蕉人妻| 精品偷拍13p欧美dodk视频| 91精品少妇搡搡搡| 国产一级操B视频| 欧综合网| 国产精品97超碰| 情色五月天久久久| 97色冈| 亚洲精品精品一区二区| 久久草草亚洲蜜桃臀| 在线天堂资源亚洲| 日韩欧美麻豆 | 久久久久99精品成人片蜜臀| 国产一区二区精品在线视频| 少妇三P| 日日干日日操五月天伦理视频| 精品久久99| 国产又操| 五月丁香大香蕉| 国产精品成人蜜臀AV在线| 国产精品永久免费10000| 亚洲天堂男人| 国产精品九九九| 精品人妻一区二区三区在线视频不卡| 天美麻豆一区二区三区| 久久久精品,3| 蜜臀Av一区二区三区| 久热99999| 日本黄页视频在线观看| 夜夜免费视频| 中文熟女五十乱码在线| 少妇丝袜在线观看AV| 久久大精品乱码视频人妻熟女| 绯色AV粉色AV蜜臀AV| 宅男午夜在线视频| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 日本裸体久久色噜噜| 亚洲情色五月天 | 久久精品72| 久草毛片电影怡| AV在线资源| 久偷拍| 少妇三P| 精品96久久| 91精品国久久久久久无码| 国产乱人妻精品入口| 高潮嗯啊性感美女久久久| 青青草日本中文字幕 | 看日韩操逼| 婷婷91| 91久青| 操一区| 亚洲色棕合| 97超碰欧美精品| 亚洲无码视频免费在线观看网址!| 国产精品直播在线观看直播| 人人操人人插人www| 中文字幕性感少妇av| 婷色五月天| 欧美一级欧美三级在线观看| 中文字幕一区二区三四五区日日骚| 激情文学小说一区二区 | 一本久道在线综合视频| 粉嫩绯色AV一区二区在线| 色色亚洲| 亚洲天堂人人妻| 东京男人天堂| 国产美女销魂在线观看不卡| 18禁超污无遮挡无码免费网| 天天综合在线4| 91欧美性| 亚洲成a人v欧美综合天堂下载| 国产成人 综合亚洲 天堂| 青青操轻轻| 中文字幕加勒比海高清无码免费视频| 青青草中日韩在线| 国产无码久久高清| 高清无码国产亚洲| 9 7超碰在线免费观看| 97色欧洲| 岛国大片国产| 日韩三四五区| 安微少妇操BBB| 综合影院永久入口国产| 99精品在线| 久久久久元码视频| 天天上日日上日韩精品| 久久久97| 天天情欲宗合网| 久久av无码| 东京热男人的天堂网| 人妻激情在线视频| 最新av中文字幕高清| 大香交伊人网| 成人情色综合网| 成人一级性爱| 亚洲不卡av在线| 超碰色老头| 国产激情在线观看| 骚女高跟AV在线| 人人人摸人人| 夜夜爽妓女| 99热在线播放| 五月婷婷丁香六月| 国产精品另类一区大香蕉| 欧美成人AⅤ大片在线观看| 九九九综合精品| 久久高潮妇女视频| www.狠狠| 本道综合精品| 狠狠狠狠狠干| 老熟女综合网 | 高潮9999外国| 狠狠爱综合| 色香网| 亚洲蜜桃V妇女| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 91成人在线免费视频| 色综合加勒比四四季| 好爽视频在线观看视频| 91国产精品在线看| 人妻少妇精品视频一区二区三区| 天天插天天操| 变态综合色| 资源在线观一 二| 99精品九九九九九九| 偷拍伦理视频| 我要去看2个日本美女.com曹逼 | 翔田千里A片一区二区| 淫淫总合网| 99久久精品国产系列| 久久人妻四季| 免费a级毛片av无码久久精品中文字幕| 欧美久久毛片基地| 日本无码1| 欧美亚洲高清晰| 99久久婷婷| 97操| 欧美大香蕉97| 亚洲啪啪视频一区二区| 国模久久在线| 亚洲精品色| 女性喷水高潮在线观看| 97一区二压| 国产一区二区视频在线播放| 国产精品剧情| 人人澡综合涩| 静品嫩模一区二区| 91精品老女人| 天天影视射综合网| 大香蕉五月天婷婷| 一区AV| 啊啊啊久久久视频| 亚州国产精品乱| 久久透逼视频| 中文字幕福利视频一区二区三区在线观看| 中文高清一区二区的| 日本一区二区三区午夜观看| 怡红院亚洲怡春院av| 在线观看AV不卡| 金莲网址| 最新亚洲黄色免费电影| 骚逼自拍99| 在现视频女上位好爽| 久久久久九九九| 久久久新亚洲AV| 伊人96在线| 欧美色图亚州激情| 日韩成人网址| 亚州免费啪啪视频| 2019天天干| 国产亚热在线久久| 你草精品在线视频| 激情久久日韩精品中文字幕麻豆| 激情小说五月天| 久热在线精品免费观看| 久久久青青草| 极品色电影院| 亚洲不卡不卡中文字幕不卡 | 2024黄色视频| 日本黄色裸日本黄色裸体| 九久9精品| 思思热国产在线视频| 少妇精品久久| 啊啊啊男女| 中文字幕综合人妻| 欧美性天天影视| 十八禁视频网站| 岛国激情视频软件| 黄片www视频免费| 日韩无码人妻中字久久三区四区| 97精品久久久久中文字幕| 熟妇最新先锋一二三区| 婷婷五月天色色| 五月天玖玖资源站| 久操网视频| 国产精品无码成人精品| 1区2区3区视频| 后入国产| 亚洲色交| 97天天| AV色女综合| 97射欧美| 色香网| 国产精品色约约| 老熟女中文字幕高清| 中文字幕久久精视频久久大全| 国产精品九9| 国内精品999| 国产精品天美传媒| 少妇高潮99p| 国产一区二区三区中文字幕| 操久久久久久| 男人的天堂网免费| 丝袜AV一二三区| 欧美精品人妻视频| 欧美亚男人的天堂| 少妇69中文| 97免费视频网| 日韩资源网| 91AV天美在线视频| 欧美日日人人天天| 人人操人人操人妻人| 一二三区精品视频| 成人怡红院| 一区二区娱乐网站| 激情九月婷婷| 亚洲色图91欧美日韩| 校园春色之综合网| 青青草吊丝| 亚洲精品蜜桃久久久久久久| 岛国网址国产| 久久久精品91八戒| 岛国在线免费视频| 岛国视频一二三区| 国产成人精品日本视频| 国产99 中文字幕日韩小视频| 亚洲人妻AV| 天天看少妇| 人妻人人澡人人爽人人| 日日干夜夜骑| 天天综合色图| 中文字幕日韩精品久久| 日韩午夜精品一区二区三区电影| 99久久九九| 欧美草草高清日韩视频| 78操B| 国产免费一区在线观看| 超碰91在线| 性感女人网页在线观看视频| 超碰97人妻自拍| 久久色精品视频在线| 欧美日韩中文字幕不卡| 蜜臀一区二区三区在线| 久久中文字幕一区不卡| 人、人、摸,人、人、草| 亚洲成人av色网| 亚洲中文电影| 91n处女在线观看| a片久久久久久久久久久久 | 日本人人操人人操| 日韩三级在线观看网站| 亚洲第一黄色av网站 | 欧美高清16| se吧提供国产乱老熟视频胖女人| 操婷婷逼| 亚洲综合影片| 97伊人| 亚洲免费成人在线高清无码视频| 婷色五月| 欧美超碰人妻97| 大香蕉一级黄色片久久| 5278欧美一区二区三区| 色第一页| 欧美日韩传媒| 深夜激情无码| 91爰爱欧美| 女色综合| 久久久久9999| 91高潮喷水美女| 波多野结衣AV无码一区| 91蜜桃婷婷狠狠久久综合9色| 超碰98综合网| 乱伦一二三区| 九九九九88| 91n欧美| 成人在线视频网| 天天摸天天舔天天操| 综合伊人激情| 97精品国产97久久久久久免费| 骚日日av| 最新国产精品久久精品| 日日干夜夜骑| 日韩 欧美 视频 在线 一区| 青青操在线亚洲视频观看欧美在线| 日夜精品| 综合熟女| 欧美偷拍| 久久精彩免费视频| 97超级久久| 久热大香蕉| 欧美日韩制服| 激情综合久久| 色图四区| 亚洲精品丝袜-不卡成人免费……| 亚洲乱熟女一区二区| 免费av大片| 色偷偷综合91久久噜噜| 亚洲蜜桃V妇女| 骚妻少妇精品性色无码四色A V| 中日韩欧美精品无码AⅤ一区二区| 国产精品久久久久久久久久久久久久久久| 一级人妻性爱视频| 美欧老女人97| 欧美黄色大片在线观看| 人人搡人人肉久久精品| 激情网色| 亚洲少妇免费视频\| 最新国产亚洲精品精品国产亚洲综合 | 欧洲精品一级二级精品综合视频综合 | 99热亚洲天堂| 色在线视频导航| 亚殴在线| 精品高清av中文字幕| 一区二区三区蜜桃成人撸久久东京热| a亚洲欧美色欲| 欧美久久婷婷| 8050午夜少妇无码| 97碰碰色| 99热精品青草在线| 强奸国产精品视频| 久久久熟女一区| 五月天婷婷小说| 亚洲中文字幕在现观看| 啊啊啊啊二区好大| 人、人、摸,人、人、草| 97久操| 在线天堂999| xxx0国产在线播放| 1024精品在线| 97硬碰| 欧美国产伊人久久久久| 東南亚性呦成人伦理资源在线视频| 67914亚洲精品| 人人色97| 天堂8在线新版官网| 亚洲蜜臀精品视频久久| 久久久网站| V A在线| 在线情色电影 91大 | 人妻少妇被猛烈进入中| 久久久精品,3| 97色诱| 中文字幕一区日韩精| 欧美亚洲中文| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 一级乱伦网站| 精人妻无码一区二区三区伊人直播 | 射丝袜高跟鞋99| 欧美少妇性爱网站| 男人天堂新| 最新av在线| 亚洲中文字幕97久久精品少妇| 国产中文字幕在线点播| 精品免费囯产一区二区三区 | 亚洲色 国产 欧美 日韩| 91亚洲情色| 夜夜青青无码影院| 夜夜操91744565| 十八禁啪啦拍视频无遮挡| 人人模人人看| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国内毛片四区| 91少妇香蕉久久精品| 国产天天骚| 99综合网| 国产懂色精品国产av| 少妇厨房愉情理伦片bd在线观看| 亚洲日精品| 亚洲丝袜99| 欧美暴力猛交| 久久久久国产亚洲一区欧美色图日韩| 日韩精品中文字幕二区| 狠狠亚洲| 91free福利| 岛国免费黄色网址| 91久久青青草原精品| 91综合中文字幕| 精品久久久亚洲AV成人网站| 日韩一级性爱无码| 999久久久九九九九| 欧洲亚洲综合| 国产精品密臀网在线观看| 啊啊啊com| 欧洲色| 久久精品国产96精品亚洲拳交| heyZO天然素人无码AⅤ专区| 搡老女人911熟妇老熟女| 天天射日日干| 亚洲男人天堂2017| 中国91AV| 少妇精品| 91精品国产91熟女| 日韩精品99久久久久久中文字幕| 天天干天天日天天射黄色大片| 婷婷五月天色色| 日本在线播放不卡一区| 亚洲蜜乳av| 强奸乱伦亚洲第一页| 亚洲啪AⅤ永久无码| 欧美v亚洲v综合v国产v妖精| 亚洲欧美天堂| 无码欧美有限公司| 成·人免费午夜在线观看| 久久中文字幕在线观看| 91欧美情色| 97超碰超| 欧美91精品国产自产| 尤物av网站免费在线播放| 又粗又长又大国产不卡| 天天看天天日| 国产丝袜美女在线一区| 国产多人在线观看视频| 噜噜噜在线视频| 精品中文字幕一区二区l - 百度| 最新啪啪视频| 午夜一区| 精品久久久av| 亚洲精品国产av天美传媒| 噜噜噜亚洲精品| 久9爱精品| 亚洲国产精品成人久久蜜臀| 超碰97人妻免费在线| 精品无码不卡视频| 久久香蕉国产线看观看猫咪av| 大香蕉人妻| 91 丝袜在线| 欧美裸体美女日麻屄| 欧美中文字幕精品人妻| 欧美A片中文字幕| 在线中文字幕极品av| 久久女婷| 白丝jkav| 久久精品国产97欧美精品亚洲 | 中文字幕天堂在线| 97人妻免费中文字幕| 乱老女人一区二区视频| 91在线美女| 91女优在线观看 | 久久久工口| 青青伊人加勒比海| 东京热毛片177b2viP| 日韩欧美午夜一区二区| 青娱乐日韩无码| 亚洲熟女综合| 色原狠狠天天天| 91一区二区三区蜜桃| 国产超碰人人爽人人做| 日韩精品三区四区| 欧美综合狠| 久久精品中文字幕无码l| 色啪网| 五月天久久婷婷亚洲| 亚欧美无遮挡| 日韩簧片免费看| 人妻久久久| 亚洲熟女乱色一区二区三区久久久| 99国产精品视频尤物| 无码外流操逼视频| 无码伊人久久大杳蕉中文无码| 亚洲最大黄网| 99色热| 久综合国内精品自在自线| 97人人射| 射丝袜大香蕉| 欧美成人性爱视频在线播放| 天美麻花大全视频| 久久99精品国产| 国产在线播放成人免费| 午夜男人一级A片7777| 歐美性天天| 久久亚洲AV无码白度| 国产精品一区二区黄片| 欧美曰韩国产精品| 欧美色亚洲| 婷婷五月天成人| 色哟哟av| 91爆操视频| 伊人991| 高清国产无码av| 精品妇女一区二区三区| 欧美自拍网| 丰满人妻av一区二区三区| 97er欧美性| 欧美性爱18观看| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 久久97资源 网| 曰韩人妻中文字幕在线| 黄色AV影视| 久久久久久久| 色情成人五月天| 五月天精品| 国产成人在线观看综合| 粉嫩久久久极品| 欧美另类综合久久| 色阁阁AV综合网| 国语精品内射在线观看| 色激情综合网站| 日本三级久| 韩国三级色呦呦| 麻豆亚洲Av成人无码一区精品| 四虎免费在线观看| 欧美制服网站美腿丝袜| 国产一区在线播放| 欧美AB在线观看| а√天堂资源官网在线资源| 狠肏骚人妻| 日小BB小视频| 精品中文日韩字幕视频| AA特级绝黄| 久久r精品| 国产精品电影| 欧美色图20p| 麻豆区99999| av无线看| 俺也射| av中文在线| 日韩欧美加勒比| 欧美 日韩 国产传媒| 95自拍视频在线观看| 亚州欧美综合| www.狠狠操| 三男一女不戴套的A片| 91丝袜激情在线| 精品毛片久久久精品毛片| 日本三级精品| 欧美中文字幕男人天堂久久精品| 色视频蜜乳| 欧美在线中M| wwwss在线观看| 性色AV蜜色av色欲av| 亚洲精品一区二区免费在线观看| 免费综合亚洲中文| 超碰91在线| 久久九精品| www.狠狠操| 伊人黄色片| 九九九成人| 97超碰天天| 理论久久婷婷网 8| 另类视频在线| 欧美Ⅴ性爱| 亭亭在线资源| 青草视频在线看看看看看看看看看| 人人操人人色网| 日本中文字幕一区| 色色色网站| 91香蕉视频在线观看免费| 久久久久久免费电影| 欧美久久草熟女| 无码WWW免费视频网站| 久久超碰com| 老司机久久| 91 亚洲 欧洲| 免费伦费视频在线观看| 99在线精品视频| 久久熟女久| 九九九网页| 天天干天天操天天干天天操| 国产一级内射高清视频| 日本国产二线女色| 九九九久千久久激情蜜桃在线看 | 九九九久久久久| 日日日日日| 日韩A优精品在线观看| 免费一二区| 青青草原av| 九九九热精品| 操操操操操操| 人妻啊啊人妻啊啊| 日韩欧美国产高清视频| 国产成人精品必看| 91亚州| 欧亚 另类 久| 98福利在线视频| 麻豆性爱视频在线播放| 亚洲午夜免费狠狠干| 最新日韩黄片| 久久五月天婷婷丁香中文字幕| 中文字幕永久在线| A级国产欧美激情在线| 天天干夜夜操一区二区| av亚洲天堂资源网站| 红杏大香蕉| 日韩性爱播放| 精品人妻av在线播放| 免费精品国偷自产在线在线 | jizzjizz欧美| 久久精品久久久久久久久| 久久久四区| 97伦综合| 欧美综合狠| 午夜精品久久999热蜜桃介男人用| 亚洲天堂自拍| 麻豆黄四叶草网站| 精品人妻一区二区三区-国产| 久久思思热| 超碰狠狠操| 亚洲综合在线视频| 色婷久久| 99热66| 六月丁香五月婷婷| 色婷婷99| 亚洲男人bt天堂| 日本超碰在线国产一区| 综合五月天| 亚洲,欧美,春色,另类| 少妇一线天久久久久久| 美女刺激久久国产欧美| 亚洲男人天堂Av| 97香焦色区| 中文字幕在在线观看网站| 亚洲AO在线| 丁香婷婷激情五月天无毒不卡| 欧美精品偷拍| 曰本91情色| 破处bbq| 亚洲午夜精品久久久中文影院| 男女啊啊啊啊啊| 久久免费少妇| 日B操| 操逼无码一区|