99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

CAN通信代碼升級實戰(zhàn):從能收發(fā)到可靠收發(fā)的嵌入式設計

CAN通信代碼升級實戰(zhàn):從能收發(fā)到可靠收發(fā)的嵌入式設計 搞嵌入式或者汽車電子的朋友對CAN總線應該都不陌生。車載網(wǎng)絡里到處是CAN發(fā)動機、車身控制器、電池管理、儀表全靠一根差分對在傳數(shù)據(jù)。去年我在某個項目上寫了一套CAN通信代碼當時主要是驗證功能跑得倒也正常但一放到真實工程里就暴露出不少問題配置寫死在代碼里、接收靠輪詢、多幀數(shù)據(jù)來不及處理會丟、出錯之后不會恢復傳輸中斷只能重啟。這次出的升級版把這些問題逐個收拾掉了順手把結(jié)構(gòu)重構(gòu)成能直接拿到其他項目復用的模塊。這篇文章主要講清楚升級版是怎么設計的、每個模塊為什么這么寫、移植時又踩了哪些坑適合正在寫或者準備用CAN通信代碼的嵌入式工程師尤其是想從“能收發(fā)”往“可靠收發(fā)”走一步的朋友。1. 升級版究竟升級了什么先給初版“算算賬”1.1 初版代碼的幾個經(jīng)典痛點先說初版代碼。當時驗證功能思路很簡單初始化一個CAN控制器配置好波特率然后在主循環(huán)里輪詢接收標志位有幀就進中斷或者標志判斷里讀出來打印到串口。代碼幾十行就能跑通在桌面上用兩個開發(fā)板對測效果挺理想??墒虑橐坏Q到真實項目里問題就全冒出來了。第一個痛點是配置硬編碼。波特率、濾波ID、工作模式全都寫在初始化函數(shù)里換一個MCU型號整個文件就得重寫甚至同一個芯片換了一個應用場景也要重新翻代碼改參數(shù)。這個問題的根源不是配置項本身多而是配置和驅(qū)動邏輯攪在一起一改配置就容易把驅(qū)動邏輯改壞。第二個痛點是純輪詢收發(fā)。主循環(huán)在等著一幀數(shù)據(jù)的時候如果總線上一段時間沒有報文整個CPU全被空轉(zhuǎn)占掉中斷里有數(shù)據(jù)要處理的時候主循環(huán)又在忙其他的兩邊一撞就丟幀。說白了就是沒有緩沖機制數(shù)據(jù)來一條收一條收不過來就放棄。第三個痛點是錯誤處理約等于零。初版代碼只在出錯時點亮一顆LED具體是什么錯誤、需不需要恢復、恢復之后怎么重新參與通信完全沒有設計。CAN總線上任何一個節(jié)點出錯進入bus-off狀態(tài)如果不處理整個節(jié)點就永遠脫離網(wǎng)絡了這在整車上是很嚴重的問題。1.2 升級版定下的四個目標升級版動手之前我給自己定了四個目標后面所有代碼都是圍繞這四個目標展開的。一是可配置。所有的波特率、過濾器、工作模式、中斷優(yōu)先級全部通過配置文件注入驅(qū)動代碼里不允許出現(xiàn)魔法數(shù)字。這樣換個場景只需要改配置頭文件驅(qū)動層一行不用動。二是可移植。把代碼分成兩層跟具體芯片寄存器相關(guān)的HAL層和通用邏輯的協(xié)議/驅(qū)動層。換芯片只改HAL層上層邏輯原封不動搬走。這一步看似費工但_project多了以后回報很高。三是可靠。錯誤計數(shù)器要能讀出來狀態(tài)遷移要有清晰邏輯bus-off要能自動恢復收發(fā)要有緩沖區(qū)不能讓“來不及處理”成為丟幀的借口。四是可擴展。數(shù)據(jù)結(jié)構(gòu)里預留好擴展幀、遠程幀、CAN FD幀的位置后續(xù)如果需要診斷協(xié)議或升級到CAN FD不用把整個模塊重寫。這四條定下來整個代碼的骨架就比較清楚了。下面直接說架構(gòu)和實現(xiàn)。2. 代碼怎么分層才經(jīng)得起折騰一個清晰的框架比什么都重要2.1 從“裸機直寫”到“分層模塊”的思路初版代碼最大的問題就是“一把梭”。所有邏輯都堆在一個文件里寄存器操作、協(xié)議解析、應用處理全部混在一起看著代碼不多維護起來很痛苦。升級版第一件事就是把職責拆開。我采用的是四層結(jié)構(gòu)應用層只需要調(diào)用發(fā)送接口、注冊接收回調(diào)完全不關(guān)心CAN控制器寄存器長什么樣。協(xié)議/驅(qū)動層負責幀封裝、解析、校驗、過濾規(guī)則匹配這里不出現(xiàn)具體寄存器操作。HAL層封裝所有跟芯片相關(guān)的寄存器讀寫、中斷入口、時鐘配置這一層換平臺時才動。配置層一份配置文件定義波特率、過濾器、通道數(shù)量和回調(diào)函數(shù)。打個比方這就像快遞鏈條。HAL層是各家物流網(wǎng)點負責把包裹搬上車協(xié)議層是運輸路線和分揀規(guī)則應用層是收件人只關(guān)心包裹到?jīng)]到、內(nèi)容對不對。各干各的哪一環(huán)壞了只修那一環(huán)不用把整條鏈拆了。層與層之間的接口要定義干凈。我用一個can_send(ch, msg)和一個接收回調(diào)can_on_rx(ch, msg)作為上下層之間的唯一通道。HAL層收到中斷把數(shù)據(jù)搬進緩沖區(qū)驅(qū)動層在緩沖區(qū)里取幀應用層在回調(diào)里拿最終結(jié)果。這樣每一層都能單獨測試也方便將來換成RTOS環(huán)境。2.2 核心數(shù)據(jù)結(jié)構(gòu)是怎么設計的升級版里最重要的一個結(jié)構(gòu)體是報文消息所有上層收發(fā)都靠它傳遞數(shù)據(jù)。我把它設計成這樣typedef struct { uint32_t id; /* 標準幀11bit擴展幀29bit */ uint8_t data[64]; /* 經(jīng)典CAN最多8字節(jié)CAN FD最多64字節(jié) */ uint8_t dlc; /* 當前幀實際數(shù)據(jù)長度 */ uint8_t ch; /* 通道號多路CAN時用 */ uint8_t flags; /* bit0: 擴展幀; bit1: 遠程幀; bit2: FD幀 */ uint32_t ts_ms; /* 接收時間戳單位毫秒 */ } can_msg_t;這里每個字段都有講究。id用uint32_t是為了同時容納標準幀和擴展幀避免為ID類型單獨開兩個結(jié)構(gòu)體。data[64]看著有點浪費但我特意留到64字節(jié)因為后續(xù)如果做CAN FD升級數(shù)據(jù)結(jié)構(gòu)這塊就不用再動了。flags比單純一個bool好用它把所有“幀類型”信息合成一個字節(jié)將來加新類型也容易。ts_ms是最容易被忽略的字段但調(diào)試的時候特別有用——能知道某條報文距離上一條過去了多久定位周期超時問題靠它。配置文件里的過濾器和運行參數(shù)也用結(jié)構(gòu)體統(tǒng)一管理typedef struct { uint32_t id; /* 參考ID */ uint32_t mask; /* 掩碼0表示不關(guān)心1表示必須匹配 */ uint8_t extended; /* 1-擴展幀0-標準幀 */ } can_filter_t; typedef struct { uint32_t baudrate; /* 期望波特率如500000 */ uint8_t sample_pos; /* 采樣點百分制建議75~85 */ uint8_t mode; /* 0-正常1-回環(huán)2-靜默 */ can_filter_t filters[8]; uint8_t filter_num; uint8_t fd_enable; /* 是否啟用CAN FD */ } can_config_t;為什么過濾規(guī)則要用“ID 掩碼”而不是給一串ID列表因為當前市面上的CAN控制器幾乎都支持“掩碼模式”內(nèi)核里是一套位比較邏輯比逐個ID匹配省資源而且能通過一個配置覆蓋一段地址范圍的幀。比如要接收ID 0x100到0x10F的所有幀列表模式要寫16條掩碼模式一條就夠ID設為0x100掩碼設為0x1F0低4位不關(guān)心。2.3 環(huán)形緩沖區(qū)中斷和主循環(huán)之間的“快遞中轉(zhuǎn)站”這個問題在初版代碼里完全沒處理升級版必須補上。真實總線上數(shù)據(jù)不會等你主循環(huán)可能在刷寫Flash或者在處理優(yōu)先級更高的事中斷里讀出來的幀不可能一直保存在寄存器里必須搬到內(nèi)存緩沖區(qū)。收發(fā)兩端速度不匹配就用一個隊列來“削峰填谷”。我用的是一塊環(huán)形緩沖區(qū)變量就兩個head寫指針和tail讀指針。#define RX_FIFO_SIZE 32 typedef struct { can_msg_t buf[RX_FIFO_SIZE]; volatile uint16_t head; volatile uint16_t tail; uint32_t overruns; } can_rx_fifo_t; static void fifo_push(can_rx_fifo_t *f, const can_msg_t *m) { uint16_t next (uint16_t)((f-head 1) % RX_FIFO_SIZE); if (next ! f-tail) { f-buf[f-head] *m; f-head next; } else { f-overruns; } } static int fifo_pop(can_rx_fifo_t *f, can_msg_t *m) { if (f-head f-tail) { return 0; } *m f-buf[f-tail]; f-tail (uint16_t)((f-tail 1) % RX_FIFO_SIZE); return 1; }這套代碼看著簡單有幾個關(guān)鍵點必須注意。head和tail加了volatile因為它們在中斷和主循環(huán)兩側(cè)被訪問。單生產(chǎn)者單消費者模式下中斷只寫head主循環(huán)只寫tail不需要加鎖但如果你用了我上面這種“先取next再判斷滿”的寫法要確認編譯器的內(nèi)存序處理。更穩(wěn)妥的做法是在fifo_push前后關(guān)閉CAN接收中斷但那樣會增加中斷關(guān)閉時間我在實測中采用“只用兩個變量順序?qū)憽钡姆桨概芰艘荒甓鄾]出問題。如果你的平臺有DMA或者雙核共享內(nèi)存這里需要重新評估。緩沖區(qū)大小RX_FIFO_SIZE選32幀。經(jīng)典CAN一條報文最多8字節(jié)32幀也就256字節(jié)對RAM壓力幾乎為零。但如果你跑的是那種一包接一包的刷寫場景建議評估峰值幀率算出一個保守值再往上加。我后面的調(diào)試經(jīng)歷里就因為這個吃了虧。3. 核心代碼實現(xiàn)全過程該抄作業(yè)的環(huán)節(jié)都在這了3.1 配置項與波特率計算用公式替代魔法數(shù)字配置文件的引入讓“換個波特率就要翻代碼”這件事徹底成為過去。但配置只是第一步波特率怎么計算成寄存器值里面的坑不少。CAN的位時間由四段組成同步段、傳播段、相位緩沖段1、相位緩沖段2。波特率公式是can_bus_clk / (presc * (1 seg1 seg2))其中同步段固定在1個TQseg1是傳播段加相位緩沖段1seg2是相位緩沖段2。采樣點就是(1 seg1) / (1 seg1 seg2)一般建議75%到85%之間放在比較靠后的位置是因為總線存在信號傳播延遲和節(jié)點時鐘偏差采樣點太靠前容易誤判顯性位的邊沿。我寫了一個工具函數(shù)傳入外設時鐘、目標波特率和采樣點百分比自動算出預分頻和段長度static int can_brr_calc(uint32_t sys_clk, uint32_t baud, uint8_t sample_point, uint32_t *brr_reg) { uint32_t target sys_clk / baud; for (uint32_t ps 1; ps 64; ps) { if (target % ps ! 0) { continue; } uint32_t tq target / ps; if (tq 8 || tq 25) { continue; } uint8_t seg1 (uint8_t)((tq * sample_point / 100) - 1); uint8_t seg2 (uint8_t)(tq - seg1 - 2); if (seg1 1 seg2 1 seg2 8) { *brr_reg (ps - 1) | ((seg1 - 1) 8) | ((seg2 - 1) 12); return 0; } } return -1; }這里brr_reg的位域定義是我按通用CAN控制器畫的示意具體芯片可能不同但“預分頻、時間段1、時間段2”三段式的思路是通用的。拿到實際數(shù)據(jù)手冊后把位域的位置對應改一下就能用。說一個經(jīng)驗target sys_clk / baud能整除的情況最理想如果除不盡別硬湊。有一條CAN規(guī)則是位時間TQ總數(shù)差值不能太大8到25這個范圍是我在實際選型時常用的安全區(qū)間。波特率偏差大于1.5%左右就很難在一個長報文上保證同步了所以優(yōu)先選能整除的預分頻值。采樣點這個值也值得認真選。我在一個項目里剛開始用50%的采樣點點對點通信沒問題可一旦總線掛了十幾個節(jié)點、線纜長度超過3米錯誤幀明顯變多。改成80%之后問題消失。原因就是采樣點太靠中間干擾疊加后很容易在采樣時刻讀到錯誤電平。建議不要低于70%。3.2 初始化流程的順序不能亂初始化代碼很多人隨手寫先配置GPIO再開啟時鐘或者先配CAN控制器再配過濾器。實際上順序錯了大概率跑不通。我整理了一個穩(wěn)定的初始化順序?qū)懗珊瘮?shù)后就不用再動開啟CAN外設時鐘、GPIO時鐘配置CAN_TX、CAN_RX引腳為復用功能先退出初始化模式再進設置模式按控制器狀態(tài)機要求操作把波特率寄存器值寫入位時序寄存器設置工作模式正常/回環(huán)/靜默配置過濾器組和掩碼清空中斷標志使能收發(fā)中斷請求進入正常模式確認模式切換成功。這里第3步和第8步是最容易漏的。很多控制器有“初始化模式”和“正常模式”之間的切換過程模式切換不是瞬間完成要讀模式狀態(tài)寄存器確認如果直接寫一個“請求正常模式”的位然后立刻開中斷中斷往往沒真正觸發(fā)。初始化失敗的情況真要遇到我建議把模式狀態(tài)寄存器、時鐘狀態(tài)寄存器、錯誤寄存器全部打出來先確認控制器是不是真的進了想要的狀態(tài)。別急著改GPIO配置因為大部分“一上電不能通信”的問題根本不是引腳配錯而是模式?jīng)]切過去。3.3 報文發(fā)送阻塞、超時與發(fā)送完成標志發(fā)送函數(shù)的設計核心是“不能因為發(fā)送失敗把主循環(huán)堵死”。我種做法是發(fā)送函數(shù)只負責“把幀寫入發(fā)送郵箱并請求發(fā)送”發(fā)送完成與否交給發(fā)送完成中斷來置標志。主循環(huán)調(diào)用發(fā)送函數(shù)時等待一個超時時間超時就返回錯誤。int can_send(uint8_t ch, can_msg_t *msg) { can_dev_t *dev g_can[ch]; uint32_t tickout get_ticks() 10; while (dev-tx_busy) { if (tick_before(get_ticks(), tickout)) { return CAN_ERR_TIMEOUT; } } if (dev-mode CAN_MODE_LOOPBACK) { /* 回環(huán)模式直接進接收路徑不走總線 */ } fill_tx_mailbox(dev, msg); dev-tx_busy 1; return CAN_OK; }這個實現(xiàn)看著簡單背后的思路是“忙標志”管理。tx_busy在發(fā)送完成中斷里被清零void CAN_TX_ISR(can_dev_t *dev) { if (tx_ok_flag(dev)) { dev-tx_busy 0; clear_tx_ok_flag(dev); } }為什么要用發(fā)送完成中斷而不是發(fā)送請求后直接說完成因為硬件寫進郵箱只是“排隊成功”真正把報文發(fā)送到總線上還需要時間如果郵箱忙或總線正處于錯誤恢復階段請求發(fā)送的動作可能失敗。等發(fā)送完成中斷拉低tx_busy才能準確知道這幀已經(jīng)送出去了。發(fā)送失敗時控制器會置一個錯誤標志此時及時清標志并返回應用層才能決定是否重發(fā)。阻塞等待的10ms是拍腦袋定的嗎不是。500kbps下最長的經(jīng)典CAN報文擴展幀8字節(jié)數(shù)據(jù)總長約145ns到160ns換算下來1ms能傳幾千幀發(fā)送一幀從請求到送出的時間在微秒到幾百微秒量級。10ms的超時足夠?qū)捜萦帜懿m住“控制器已經(jīng)異?!边@種嚴重情況。如果你的波特率特別低比如125kbps單幀時間會更長超時值要相應放大。3.4 中斷接收、過濾器與回調(diào)處理接收這半邊是升級版的重頭戲。我的做法是CAN接收中斷里用最快的速度把郵箱里的幀搬進環(huán)形緩沖區(qū)清標志位然后把“有數(shù)據(jù)”這件事用一個全局標志暴露給主循環(huán)主循環(huán)或應用層再從緩沖區(qū)里取幀處理。中斷服務函數(shù)里只有三個動作任何多余判斷都往外拿void CAN_RX_ISR(can_dev_t *dev) { while (rx_mailbox_pending(dev)) { can_msg_t m; read_rx_mailbox(dev, m); fifo_push(dev-rx_fifo, m); } clear_rx_flag(dev); }這里用while循環(huán)把郵箱里所有待讀幀一次搬完清一次標志就行。如果你在中斷里只讀一幀就退出而硬件FIFO里還有好幾幀下次中斷什么時候來就不確定了——有的控制器會立刻重新觸發(fā)有的不會表現(xiàn)就是“丟幀其實是沒讀干凈”。這是我踩過的一個坑。過濾器這塊單獨說一下。掩碼模式下的“1”到底是“必須檢查”還是“忽略”不同芯片定義不一樣有的甚至反過來。我看到很多初學者在這里栽過配置完過濾器之后一條幀都收不到或者什么幀都能收到。所以我的建議是先回環(huán)模式跑一遍確認過濾邏輯跟預期一致再接真實總線。void CAN_FILTER_CFG(can_dev_t *dev, can_filter_t *f, int num) { /* 對每個f按芯片寄存器要求寫入ID和掩碼 */ for (int i 0; i num; i) { set_filter_id(dev, i, f[i].id); set_filter_mask(dev, i, f[i].mask); set_filter_ext(dev, i, f[i].extended); } }應用層收數(shù)據(jù)的回調(diào)我故意做得很薄回調(diào)里只允許做兩件事拷貝消息、置一個“應用層待處理”的信號量或標志。絕對不要在回調(diào)里做協(xié)議解析、打印或者Flash寫入。原因很簡單回調(diào)如果執(zhí)行時間過長接收緩沖區(qū)很快就滿了新幀只能被丟棄。真實項目中我有一次把一條UDS響應解析放在接收回調(diào)里結(jié)果刷寫速率一下子掉了30%去掉之后立刻恢復。3.5 錯誤狀態(tài)遷移與自動恢復錯誤處理是升級版里最值錢的部分。CAN控制器內(nèi)部有發(fā)送錯誤計數(shù)和接收錯誤計數(shù)兩個寄存器根據(jù)計數(shù)大小節(jié)點會處于三種狀態(tài)狀態(tài)錯誤計數(shù)范圍行為表現(xiàn)錯誤主動0 ~ 127正常參與通信出錯時可以主動發(fā)送錯誤幀錯誤被動128 ~ 255只監(jiān)聽總線不能主動發(fā)錯誤幀重傳前需要等待6個隱藏位總線關(guān)閉256以上完全脫離總線既不收發(fā)也不應答真實項目里最容易出現(xiàn)的是連上總線后誰都不說話查了半天發(fā)現(xiàn)某個節(jié)點的錯誤計數(shù)已經(jīng)超過256處于bus-off狀態(tài)。這種情況下的恢復策略是void can_err_state_update(can_dev_t *dev) { uint8_t tec get_tec(dev); uint8_t rec get_rec(dev); if (dev-err_state ERR_BUSOFF) { if (tec 0) { /* 控制器內(nèi)部已經(jīng)恢復重新參與通信 */ dev-err_state ERR_ACTIVE; request_normal_mode(dev); } return; } if (tec 128 || rec 128) { dev-err_state ERR_PASSIVE; } else { dev-err_state ERR_ACTIVE; } }總線關(guān)閉的恢復不同控制器有不同策略。有些硬件會自動重發(fā)等待有些需要軟件把控制器復位重來一遍。我的建議是能軟件恢復就不要硬件斷電。在整車環(huán)境里一個節(jié)點反復重啟會拖累整個網(wǎng)絡的穩(wěn)定性而且重啟過程中如果總線上正好在跑多幀傳輸也容易干擾其他節(jié)點。錯誤中斷里除了讀計數(shù)還要記一條日志。哪怕是往一個全局數(shù)組里塞一個錯誤碼也比“亮個燈然后什么都不知道”強。我調(diào)試時最常用的做法是把錯誤碼和時間戳打印出來看是發(fā)送錯誤、接收錯誤還是應答錯誤——總線負載高時這三種錯誤的處理思路完全不一樣。4. 移植和調(diào)試中遇到的典型問題這些問題基本人人都遇到過4.1 波特率差一點點總線就靜默我遇到過一個很典型的問題兩個板子都配置成500kbps軟件里波特率寄存器看起來也對但連上總線就是通信失敗用示波器看波形卻看不出問題。后來用CAN協(xié)議分析儀去讀實際波特率發(fā)現(xiàn)一個節(jié)點實際是497kbps另一個是503kbps差了1.2%。單幀短的時候沒事一碰上連續(xù)多幀傳輸偶爾就撞出錯誤幀表現(xiàn)成“時好時壞”。原因是兩個節(jié)點用了不同的時鐘源一個外接20MHz晶振精度高另一個用的是MCU內(nèi)部RC振蕩器標稱20MHz實際偏差在±1%以上。這種問題在實驗室用開發(fā)板測試時不容易出現(xiàn)因為開發(fā)板上都有晶振一放到量產(chǎn)的控制器上就暴露了。排查思路是先用工具函數(shù)把波特率誤差算出來再確認兩個節(jié)點的時鐘源精度如果對精度沒把握優(yōu)先選低波特率比如把500k降到250k容忍度會高很多。4.2 過濾器把該收的幀全擋了過濾器的問題是“配了等于沒配”和“不配就收垃圾”兩個方向都存在。有過一次經(jīng)歷我把過濾器配置成“全部通過”結(jié)果總線上所有節(jié)點的報文都進了緩沖區(qū)主循環(huán)被塞到死循環(huán)其它任務全卡住。問題根源不是緩沖區(qū)太小而是“所有幀都接收”這個配置讓中斷頻率變得極高CPU大部分時間花在搬數(shù)據(jù)上。反過來把掩碼配成“全部必須精確匹配”之后一條幀都收不到。排查時看了半天最后發(fā)現(xiàn)是掩碼寄存器里面位定義里1表示忽略而不是必須匹配我之前理解反了。所以這個坑的教訓是寫過濾寄存器前先把數(shù)據(jù)手冊里“mask”位的含義抄到代碼注釋里避免下次再踩。過濾器還有一個容易出錯的地方是擴展幀和標準幀的ID存放位置不一樣。29位擴展ID在寄存器里被拆成兩段低16位和高13位你如果按標準幀的11位格式往寄存器里塞擴展幀永遠收不到。4.3 字節(jié)序、位序、DLC的坑CAN協(xié)議本身并沒有規(guī)定數(shù)據(jù)場的字節(jié)序用大端還是小端完全看應用層怎么定義。做整車診斷的時候經(jīng)常遇到兩種格式混用有的信號按Motorola格式高字節(jié)在前有的按Intel格式低字節(jié)在前。初版代碼里我直接拿memcpy復制數(shù)據(jù)結(jié)果解析出來的值完全不對。正確的做法是寫專門的打包/解包函數(shù)所有跨字節(jié)的信號都明確指定字節(jié)序和位序不要依賴編譯器對齊和平臺端序。要警惕DLC。DLC是數(shù)據(jù)長度代碼在某些變種協(xié)議里它代表的是“數(shù)據(jù)長度相對8的倍數(shù)”而不是真正的字節(jié)數(shù)。CAN FD出現(xiàn)后DLC編碼方式變了8字節(jié)以下表示通常長度8以上按離散值對應到12、16、20、24等。所以我在數(shù)據(jù)結(jié)構(gòu)里專門存真實的dlc收發(fā)轉(zhuǎn)換時在驅(qū)動層做一次編碼映射上層永遠只跟“真實字節(jié)數(shù)”打交道。4.4 高負載下丟幀與接收溢出在某個刷寫場景里上位機以接近零間隔的方式發(fā)UDS寫入請求一包接一包不停地發(fā)升級版代碼出現(xiàn)了偶發(fā)丟幀。排查時先看接收緩沖區(qū)overruns計數(shù)器發(fā)現(xiàn)確實有溢出于是把RX_FIFO_SIZE從16改成32情況好了很多但壓力再大時還是偶發(fā)。進一步的定位是主循環(huán)里在處理其它任務處理時間超過了相鄰兩幀的間隔緩沖區(qū)的讀取速度跟不上寫入速度。最終方案不是無限加大緩沖區(qū)而是做了三件事把CAN接收中斷的優(yōu)先級提到最高一級確保中斷響應不會被別的任務阻塞中斷里只拷貝不做處理主循環(huán)里的耗時操作全部改到空閑時間片執(zhí)行。這樣改動之后即使緩沖區(qū)只有16幀也很穩(wěn)。這里想強調(diào)一點緩沖區(qū)空間是預算不是容量。如果設計時讓緩沖區(qū)經(jīng)常處于接近滿的狀態(tài)說明系統(tǒng)整體處理能力不足該優(yōu)化的是處理路徑而不是緩沖區(qū)。4.5 “能發(fā)不能收”的排查流程“能發(fā)不能收”是我收到問得最多的問題。這類問題的排查有一個固定套路按順序走一遍大部分都能快速定位。第一先確認是不是回環(huán)模式?jīng)]關(guān)。如果控制器的回環(huán)模式開啟發(fā)出的幀不會出現(xiàn)在總線上自己又能收到從本機看“收發(fā)都正?!绷硪慌_設備當然什么都收不到。第二檢查接收中斷是否使能這個看似簡單但很多芯片的中斷使能位是多級開關(guān)有一級漏配就全斷。第三檢查過濾器。第四確認總線PHY芯片的STB、RS引腳電平有一款常見的收發(fā)器芯片引腳不接電阻默認進入靜默模式只收不發(fā)。這類問題最容易蒙住人因為“能收到”說明總線物理層沒斷但“不能發(fā)”又指向驅(qū)動層實際上硬件配置就有問題。排查順序最好整理成一張自檢清單我在代碼里都加了相應的調(diào)試宏每步都往串口打一個狀態(tài)標記把定位時間從幾小時壓縮到幾分鐘。5. 性能、可靠性與后續(xù)擴展跑通只是第一步5.1 CPU占用率怎么量化別拍腦袋很多人說“我的CAN代碼占CPU很少”實際上是憑感覺。量化方法很簡單在接收中斷入口拉高一個GPIO出口拉低用示波器看這個GPIO的占空比就是接收中斷消耗的時間比例。同理發(fā)送完成中斷、錯誤中斷都可以各分配一個GPIO來測。我實測過一組數(shù)據(jù)500kbps總線下幀間隔大約幾十微秒一幀接收中斷從進入ISR到退出大概是2微秒到4微秒取決于讀取郵箱和拷貝次數(shù)占空比通常不到10%。但如果中斷里做了協(xié)議解析或者調(diào)用慢速外設這個比例能飆到50%以上。做實時系統(tǒng)時這個數(shù)字必須心中有數(shù)。5.2 重傳策略別做成“重傳風暴”發(fā)送失敗后要不要重傳我的結(jié)論是只重傳重要的、應用層需要保證送達的幀而且重傳要有退避機制。初版代碼里我做過一個錯誤的示范發(fā)送失敗后無限重傳總線負載一高幾個節(jié)點都在瘋狂重發(fā)錯誤幀越來越多形成惡性循環(huán)。升級版的策略是發(fā)送失敗時先進入一個“退避狀態(tài)”間隔指數(shù)增長重試最多重試3次同時把失敗次數(shù)上報到應用層由應用層決定是降級處理還是放棄。對于周期性報文簡單跳過一幀往往比重傳更合理因為下一幀很快就來了對于偶發(fā)性事件幀才需要可靠性保證。5.3 回環(huán)模式讓調(diào)試效率翻倍升級版的配置里保留了三種模式正常、回環(huán)、靜默。回環(huán)模式不經(jīng)過總線在內(nèi)部把發(fā)送數(shù)據(jù)直接送回接收路徑最適合單板自測。寫新代碼或者改過濾器配置之后先切到回環(huán)模式驗證一遍驅(qū)動邏輯再把模式改成正常接總線能省掉大量雙板聯(lián)調(diào)的痛苦。回環(huán)模式還有一個好處可以提前驗證中斷優(yōu)先級和緩沖區(qū)是否夠用。因為回環(huán)模式下收發(fā)頻率完全由你自己控制可以壓極限速率把緩沖區(qū)溢出問題在接真實總線之前暴露出來。5.4 給CAN FD留好接口經(jīng)典CAN在8字節(jié)數(shù)據(jù)場和1Mbps速率之下已經(jīng)越來越緊張CAN FD把數(shù)據(jù)場擴到最多64字節(jié)還能在數(shù)據(jù)段用更高的速率傳輸。升級版在設計時已經(jīng)把消息結(jié)構(gòu)的data[64]和flags的FD位預留好底層HAL層只需要增加一組寄存器操作驅(qū)動層的幀封裝邏輯要改動的地方不多。但有一點要特別提醒CAN FD不是所有控制器都支持換硬件之前要先確認。而且CAN FD的DLC編碼規(guī)則和位時序跟前文介紹的不一樣數(shù)據(jù)段的采樣點也要重新算。如果你現(xiàn)在用的還是經(jīng)典CAN控制器數(shù)據(jù)結(jié)構(gòu)先按上面的方式預留將來遷移時會輕松很多。最后再分享一點個人體會。CAN通信代碼真正做到“可靠”不是把寄存器的每一個位配對就行而是在“配置、緩沖、異常處理、分層結(jié)構(gòu)”這些看不見的地方下功夫。我先做回環(huán)自測再用GPIO把中斷的CPU占用量出來最后才敢上真實總線。這套代碼現(xiàn)在被我抽成固定模板換平臺只需要改HAL層和配置頭文件。如果讀者你現(xiàn)在正從零寫一套CAN驅(qū)動我建議不要只盯著“能收到數(shù)據(jù)”這個目標多花一點時間想想“收到之后怎么辦、出錯之后怎么辦”這個投入絕對值得。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情五月亚洲| 综合久| 天堂中文国产| 九九热这里只有精品9| 99激情视频| www.日本久久videos| 欧美色片中文字幕久久久久| 婷婷五月婷婷| 亚洲国产成人在线| 婷婷色五月婷| 丁香五月天色婷婷| 欧美爆乳一区二区三区| 婷婷综合网在线| 婷婷丁香先锋资源网站| 91九色PORNY肉丝在线| 超碰在线观看9| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 开心久久xxx色| 日韩天堂久久| 97热超碰| 大香久久综合网| 91久久久久久久| 99色视频在线| 亚洲成人黄色网| 99精品热视频只有精品10| 偷拍99在线视频观看| 婷婷深爱五月天| 久久99网| 99热日韩| 五月天亚洲最大成人| 色色色婷婷五月| 日日操无码| 五月综合视频| 亚洲人妻av伦理| 婷婷五月情| 天天爱天天吃狠天天透| 婷婷丁香五月天激情| 国产在线另类五月婷婷| 丁香五月婷在线观看| 五月婷婷 欧美| 大香蕉五月婷婷| 色99www.| 91疯狂操操操操| 伊人喵咪a V| 国外亚洲成AV人片在线观看| 午夜不卡久久精品无码免费| 欧洲MV日韩MV国产| 最新国产AV| 狠狠精品干练久久久无码中文字幕 | 爆乳熟妇一区二区三区爆乳| 最新久久网址| 人妻狠狠操| 亚洲成人网在线观看| 欧美精品A片一区在线观看| 五月丁小婷婷激情四射| 操b视频在线观看一区二区| 午夜精品久久久久久久爽| 九九香蕉网| 97色婷婷成人综合在线观看| 啪啪啪大香蕉| 丁香六月婷婷操逼网| 99精品热| 操逼五月婷婷| 亚洲精品中文字幕成人片| 偷偷操九九| 九九热内射| 专区无日本视频高清8| 六月丁丁香| 色丁香五月婷婷| 色婷婷www| 色吧五月婷婷| 99ER热精品视频| 国产亚洲精品久久久久久久久动漫| 性一交一乱一交A片久| www.久久久久| 婷婷丁香大香蕉| 操草草草| 999婷婷综合| 色婷婷99| 天天操屄网| 五月激情婷婷丁香天堂| 九九黄色网| 五月天婷婷无码| 日韩无码专区| 人人爽欧美婷婷久久久五月丁香| 538午夜激情| VA国产在线综合网站| 婷婷五月激情丁香激情| 亚洲va在线∨a天堂va欧美va| 色婷婷五月天在线观看| 激情婷婷六月天| 色色婷| 国产古装妇女野外A片| 国产av天天插天天操天天爽| 五月丁香av中文| eeuss人妻| 天天日夜夜草进麻麻的子宫| 日本在线va| 午夜婷婷| 曰日爽日日操| 久久少妇视频| 99只有精品| 日本操B视频在线观看| 色色色色色日韩午夜激情| 色五月激情综合| 99热只有精品在线播放| 热久精品| 无码激情AAAAA片-区区| 97影院一级片| 米奇影视五月天| 天天插天天干| 日本三级99人妇网站| 亚洲色婷婷久久99精品91| 伊人久久婷婷| 亚洲精品色| 婷婷五月天av| 9有码中文| 久久久久综合激动五月天| 99热这里只有精品最新地址获取| 伊人久久艹| 伊人九九九久| 久热最新视频 | 99热这里只有99| 丁香社区婷婷五月| 天天爽天天爽| 婷婷亚洲色| 五月天色婷婷成人| 色噜噜狠狠色综无码久久合欧美| 99热婷婷| 99精品久久久| 99热在线看片| 99热在线只有精品| 久草婷婷网| 国产精品视频免费看| 婷婷五日b| 少妇搡BBBB搡BBB搡毛茸茸 | 日韩AV免费| 99精品视频免费在线播放| 久久99性爱| 色屌丝中文字幕| 五月婷婷久久久久| 色五月婷婷小说亚洲中文字幕组| 超碰99热精品在线| 婷婷久久六月天| 欧美婷婷丁香五月社区| 亚洲成人网站在线| 天天日天天色| 在线91日韩| 热99re| 亚洲色网址| 一区=区操屄高清大全av| WWW、日本色丁香co m| 丁香五月激情婷婷| 99久热视频在线| 秋霞午夜理论| 精品无码久久久久久久久| 色色激情网| 六月丁香五月天| 精品一二三区久久AAA片| 成人视频一区| 强伦轩人妻一区二区电影| 日本色色影院| 国产婷婷综合| 色婷婷亚洲| 中文av网站| 草榴视频黄色网| 五月深爱婷婷| 五月天婷婷色播综合在线| WWW,色五月| 天天透天天爱| 日本久久精品18| 婷婷亚洲五月| 99在线精品视频| 婷五月天| 99热精品观看| 九热视频| www.狠狠| 婷婷五月综合激情小说| 99热这里只有精品8| 欧美日韩一a.无| 色婷婷亚洲| 久久婷婷色色| 色婷婷综合视频| 超碰免费在线| 四季8848精品成人免费网站| 色色色色av色色色色| 国产特黄色精品一区二区三区精品无广告 | 丁香五月六月激情久久| 日韩大片艹艹| 五月色色色| 日韩成人无码人妻| 激情久久五月网| 国外亚洲成AV人片在线观看| 日日日日操| 久久婷婷网址| 97色久| 1024手机在线观看看片_日韩精品| 五月天丁香成人| 亚洲成人av在线| 婷婷色婷婷| 日本综合久| 婷婷五月天激情四射| 日本va网站| 啪啪日热| AAA久久久| 99开心五月五月丁香激情| 中文字幕在线免费观看视频| 五月丁香六月情亚洲| 欧美性生交XXXXX无码小说| 丁香六月婷月91婷月| 人妻av在线| 五月色婷婷AV| 婷婷五月大香蕉| 五月婷婷久久综合| 五月色俺婷婷| 九九碰九九爱97超碰| 中文字幕日产A片在线看| 金桔一区二区ab地址| 天天干,夜夜爽| 深爱激情久久| 91色逼| 午夜美女人啪最红院| 青草青草视频2免费观看| 色天天综合| 久久99精品日本| 在线综合网| 99久久成人| 成人网站高清无码| 少妇被躁爽到高潮无码文| 俺去啦综合网| 99热99在线| 9热成人在线视频| 亚洲va综合va国产va中文| 在线播放中文字幕| 色综合久久8| 五月婷婷婷| 99热这里只有免费| 色六月天天激情综合网| AV在线大香蕉| www91久久| 亚洲五月婷婷| 超碰人人艹| 天天日夜夜爽。| 久久作爱| 五月丁香成年黄色| 老司机视频lsj爱就色| 大香蕉人妻| 久久机热这里只有精品| 激情五月天开心网丁香无码| 久久久性爱视频| 亚洲 在线 另类| 综合另类视频| 色五月丁香婷婷在线观看| 另类五月婷婷| 欧美色色色色色色色| 狠狠穞A片一區二區三區| 99精品亚洲| 日本本土色网第一区| 色综合女人99| 99五月香婷婷丁香在线视频| 国产肥白大熟妇BBBB视频| 99久在线精品99re5热视频| 97在线观看| 婷婷色在线视频| 婷婷五月天成人影片| 婷婷五月av| 丁香五月天社区婷婷| 亚洲爆乳无码精品AAA片蜜桃| 亚洲激情综合| 婷婷六月激情| 激情五月婷婷六月丁香| 五月激情网站| 色99欧洲色19| 99热日韩| 色五XX| 五月天开心婷婷久久| 婷婷激情啪啪| 久久无意婷婷| 五月婷婷精品视频| 久热99| site:jszngf.com| 九九 激情 网| 色综合中文色综合网| 色操综合| 色噜噜狠狠狠狠色综合久欧美| 久久草大香蕉| 亚洲亚洲人成综合网络| 亚洲妇女熟BBW| 99热这里只有精品9| 婷婷五月天亚洲| 久热这里只有精品66| 可以免费观看的av网址| 五月六月丁香婷婷在线观看| 日本在线视频手机播放五月婷| 97色色色色| 婷婷久久久久| 色婷婷电影网| 五月丁香综合啪啪啪啪啪| 色涩影院六月丁香| 色色色区| 97久久超碰| 欧美日韩123| 大香蕉中文| 九九热精品99| 亚洲九九夜夜| 6月丁香婷婷激情| 欧洲日韩一区二区三区| www.韩日视频| 91精品视频男人的天堂| 六月丁香色色色| 99在线热视频| 如何安全看伊人婷婷| 色婷婷黄色网络| 丁香五月花婷婷开心| 五月天激情久久| 久久婷婷影院| 天天操天天操综合| 国产精品香蕉| 婷婷午夜激情| 白人荫道BBWBBB大荫道| 亚洲欧美成人在线观看| 狠狠爱婷婷丁香| 色综合久久88色综合天天99| 久久在线视频只有这里有精品| 第二色AⅤ| 丁香花五月天| 免费观看的av| www.久久| 久热天堂| 日本色频| 人人视频色| 九九热这里| 91热99| 99热这里只有精品在线观看| 亚洲黄色网址| 五月天婷婷爱| 五月丁香六月婷婷综合免| 综合五月天婷婷色| 五月婷婷啪啪| 天天干,天天日| 日韩AV无码影片| 99国产欧美视频| 99人碰碰碰| 色五月激情五月丁香五月婷婷啪啪综合| 五月天停停成人网| 久热这里只有精品6| 91久久网站| 99色干| 26UUU精品一区二区Com| 影音先锋一区| 伊人热在线大香蕉| 噜噜干日本| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 亚洲另类av| 6月丁香婷婷| 色五月婷婷开心| 五月天激情国产综合婷婷| 婷婷五月激情小说| 精品夜夜澡人妻无码AV| 欧美激情综合色综合啪啪五月| 第二色AⅤ| 丁香六月在线| 激情五月激情综合网| 免费无码毛片一区二区A片| 97人人操人人插| 色吧五月婷婷| 婷婷五月激情五月激情| 九九这里只有精品| 亚洲婷婷91丁香| 激情五月婷婷中文字幕| 久久人人妻| 激情久久婷婷| 欧美综合激情五月天| 噜噜五月天综合| 丁香六月婷婷社区| 日本激情综合| 丁香婷婷成年| 五月婷婷影视| 五月天啪啪| 亚洲旡码| 婷婷操超碰| 日本丰满久久| 思思精品热在线| 俺去也五月| 丁香九月激情| 久热伊人| 久久精品婷婷| 殴美日比视频| 久久多色| 婷婷天堂综合| 九九热自拍| 丁香五月综合AV在线| 91av传媒高清在线视频网| 亚洲中文字幕网| 开心激情站| 久久五月婷综合网| 99精品亚洲| 国产精品成人网址| 女力报到正好爱上你| 精品国产一区二区三区四区阿崩| 综合激情五月丁香9999久久精| 五月丁香狠狠爱| 精品牛仔裤超碰| 婷婷五月天综合网| 色欲影香| 丁香五月婷婷超碰在线| 亚洲激情av| 97碰啪啪| 狠狠艹狠狠艹| 美国少妇性做爰| 五月色欧洲| 无码免费人妻A片AAA毛片西瓜 | 色私五月婷婷| 大香蕉五月天婷婷| 天天色粽合合合合合合合| 九九热a| 五月花免费视频| 亚洲另类婷婷五月丁香在线播放| 精品国产AV色一区二区深夜久久| 狠狠色五月| 五月婷婷亚洲天堂97色婷婷| 亚洲99热| 久热黄色| 五月婷婷色色| 五月色婷婷激情| 九月性爱网| 色99在线视频| 亚洲九区| 色婷婷成人做爰A片免费看网站| 热99精品视频观看| 中文字幕人妻一区二区| 久久综合五月天| 99在线免费视频| 人妻无码精品一区| 久久久99精品| 日韩日比视频| 高清无码网址| 天天爽日日爽夜夜爽| 人人操91色| 超碰97干| 深爱五月天 开心网| 人妻在线观看视频| 99免费热视频在线| 色欲五月天| 色婷婷AV在线观看| 99热老网站| 婷婷97狠狠干| 99re在线免费视频| 可以看的AV| 婷婷六月激情丁香| 97色97干| 男女啪啪做爰高潮无遮挡| 99热12| 婷婷五月丁香欧洲| 欧美大肥婆大肥BBBBB| 激情婷婷网| 另类精品视频在线观看| 密着浓厚中出乚交尾GvG935| 超碰人人操| 蜜桃婷婷五月| 97超碰欧美中文字幕| 丁香五月在线观看| 性爱视频99| 激情五月天久久丁香| 日韩久久成人| 日韩欧美颜射| 日本五月天一页| 中文字幕在线播放视频| 偷拍99在线视频观看| 丁香花色色网| 丁香五月婷久久| 思恩热国产视频右线观看| 九色综合网| 婷婷综合色图| 天天操电影院色狼性av| 色色色精品无码区| 91狠狠色色丁香婷婷综合久久| 97色色网| 丁香五月欧美激情| 色色色色av色色色色| 激情网站五月| 激情啪啪五月| 激情五月天情色| 亚洲欧洲另类| 激情五月婷婷综合| 五月综合在线| 久久成人人妻| 成人AV在线网站| 九九精品自拍| 射久久丁香五月| 五月天婷婷综合色| 可以免费观看的AV| 激情综合色| 91婷婷五月天嫩女| 99热99这里有免费的精品| 新97人人上人人| 国产黄色av| 99久久户外勾搭| 五月婷激情| 九九这里只有精品| 99色免费观看全部| 99色爱| 亚洲婷婷开心五月| 色之综合网| 久久激情五月天| 91xxxx九色| 五月丁香色停停啪啪啪| 国产成人一区二区三区在线观看| 99这里只有精品|v| 久久亚洲婷婷| 亚洲综合网 665566| 国产精品VA在线| 五月婷婷婷自由综合| 免費亭亭成人| 欧美婷婷五月无砖| 热久久思思热思思| 欧美成性色| 日韩成人综合网| 久碰婷婷视频| 91干在线| 激情久久久久| 五月天大香蕉| 成久综合视频| 亚洲天堂AV免费片| 色月视频| 久久婷婷婷婷伊人| 五月天婷婷五月| 色小说五月婷婷| 色婷婷六月精品| 狠狠肏综合网| 色五月成人在线| 五月丁香婷婷激情| 国产在线另类五月婷婷| 这里只有精品网| 婷婷综合精品视频97| 99re这里只有精品视频了| 五月丁香基地| 岛国av网站| 天天干,夜夜爽| 无码色| 国产免费一区二区三州老师F1F1| 久久性爱视频| 99热免费| 艹B高清无码| 日本色99网站| www.无码com| 国产av基地| 东京热免费视频| 人人干人人干骚美女| 包操45分钟网站| 婷婷操逼网| 丁香五月六月激情| 色五月婷婷小说亚洲中文字幕组| 91色涩| 热99在线| 久久色六月| 色99超碰| 国产免费AV网站| aaaaaa片| 人人爱人人添| 99日韩| 天天干天天干天天| 丁香五月婷婷国产在线| 狠狠第四色| 婷婷,五月天,丁香,第一| 五月人妻婷婷| 天天精品视频免费观看| 婷婷六月激情| 人操综合| 国产成人AV在线| 玖玖99福利| 美英法精品无码免费视频| 少妇综合网| 91婷婷| 久久久宗合视频88| 91要啪| 亚洲在线激情婷婷五月| 欧美成人性爱网| 97人人草| 婷婷五月娱乐在线| ww亚洲ww在线观看| 五月天最新网| 99婷婷| 色婷婷成人久久| 色五月综合网| 婷婷五月美女直播| 人人播| 免費观看aV在线网址| 玖玖在线| 伊人狠狠干| 91seav| 欧美成人在线观看| 亚洲99综合| 狠狠狠狠狠草| 久久a热| 久久99免费视屏| 人人草成人视频| 涩婷婷五月天| 精品亚洲国产成人A片在线鸭王| 97干在线看| 激情婷婷亚洲五月| 97操操操| 毛v一区二区视频| 成人欧美一区二区三区在线观看| 99精品久久久久| 丁香五月天操B| 五月婷婷久久久| 尔尔AV一区| 欧洲MV日韩MV国产| 丁香五月天在线观看视频| www.henhengan| 99色在线| 欧美日韩999| 婷婷丁香五月激情| 一级AV片| 色五月婷婷、老熟女| 亚洲区视频| CAOBIBI| 久久99久久99精品免观看软件| 玖玖综合色| 操逼综合网| 天天干天天 亚洲| 婷婷五月激情丁香| 日韩狠狠色| 狠狠草狠狠草| 久久婷婷五月综合网| 99成人精品六| 色五月婷婷基地| 日本色99| 久久久久网站| 日本99视频精品免费播放| 激情综合亚洲色婷婷五月| 激情网五月天| 伍月婷丁香婷| 天天日夜夜爽| 97色在线| 久久综合五月| 天天色播| 26UUU欧美| 99热主页日本| 久久九区| 色婷婷综合视频| 五月伊人网| 另类精品视频在线观看| 丁香伊人网| 五月婷婷丁香六月| 99热99极品观看| 婷婷丁香社区| av在线免费网站| 极品另类| 超碰免费人妻| 日韩黄黄| 五月天成人综合| 高清无码.com| 国产免费一区二区在线A片视频| 久久久精品视频79| 九九综合| 丁香六月色情| 色五月色综合| 欧美国产一区二区三区| 九草性爱| 色婷婷五月在线| 996热re视频精品视频| av在线免费播放| 色播婷婷大香蕉| 久久视频这里有精品99| 五月天六月天| 日B日潘金莲BB| 婷婷五月色综合| 久久蜜臀婷婷| 婷婷的色色五月天| 99色综合| 老师的粉嫩小又紧水又多A片视频| 五月丁香av在线| 色www99| 色婷婷五月天激情在线观看| 超碰二区| 99热超碰| 大地资源色婷婷视频在线| 九月性爱网| 色五月婷婷影院| 天天狠狠婷婷在线| 91性交在线播放| 亚洲va欧洲va国产va不卡| 国产免费av在线| 五月丁香| 欧美天天干天天草| 激情中文在线| 九九性视频| 激情久久综合网| 国产超碰人人| 丁香婷婷色五月| 婷婷色爱| 色婷婷婷婷| 午夜天堂一区人妻| 另类综合色| 六月丁香激情综合网| 中文字幕 中文字幕明步| 看久久性爱99视频| 99色激| 婷婷天堂伊人| 久久色婷婷| 九九热99精品| 五月天操逼网| 激情内射人妻1区2区3区| 婷婷五月天综合在线| 他改变了拜占庭| 五月婷婷先锋| 天天日综合| 亚洲第一精品成人999久久精品| 9久久久久久久久久久| 国产欧美熟妇另类久久久 | 丁香五月天天| 98色丁香五月婷婷综合网| 国产毛片精品一区二区色欲黄A片| 五月婷色啪| 99自拍网| 99在线免费视频播放| 五月婷婷在线免费观看| 一级操逼内射在线视频| 99在线观看视频免费| 96精品国产综合久久久久久| 亚洲成人综合在线| 亚洲色频| www.五月激情红色| 怡红院 久久| 99热99思午夜精品| 另类少妇人与禽zOZZ0性伦| 婷婷五月天av| 99热这里只有的精品视| 五月花综合网| 成人五月天丁香婷| 亚洲最大视频网站| 香蕉久久国产AV一区二区| 991精品在线视频| 激情五月亚洲| 亚洲五月六丁香激情| 久久久性爱视频| 婷婷五月天成人视频| 五月丁香六月婷| 男人天堂99| 久久人妻久久| 日日夜夜噜噜爽爽| 亚洲欧洲色色| 狠狠搞五月天| 9操在线| 五月情涩综合婷婷| 久久婷婷艹| 538在线精品| 五月开心网| 九九亚洲综合| 婷婷五月天影院| 久久色五月天激情小说| 草婷婷在线| 综合激情五月综合激情五月激情1 天天爱天天做天天舔 | 亚洲婷婷激情综合激情999精品| 久久99成人性爱高清视频| 狠狠色丁婷婷日日,伊人激情综合网| 婷婷六月激情| 五月丁香黄色| 九九综合网色全集 | 色婷婷亚洲婷婷在线观看| 婷婷丁香五月综合激情小说| 天天日人人爽| 色欲香综合网| 丁香六月激情综合网| 天天日综合网射| ay2区| 综合亚洲六月婷婷在线| 色五月综合网| 久久婷婷五月综合97色一本| 我爱大香蕉| 色九月婷婷综合| 庭庭久久内射| 五月伊人网| 色色吧综合| VA色婷婷| 丁香蜜臀黄色婷婷五月天| 国产激情久久久| 婷婷精品| 欧美成人无码高清一区二区三区| 久婷婷五月激情| 激情啪啪五月天| 狠狠va| 天天摸夜夜爽天天做| 很操日本7| 亚洲色vA| 五月婷婷综合在线视频小说| 第四色五月天| 激情亚洲婷婷| 婷婷五月成人| 婷婷五月成人| 亚洲精品一二三| 久久婷婷五月综合色和| 狠狠综合色网| 色五月婷婷综合| 六月丁香激情综合网| www.夜夜操.con| 丁香五月久久综合| 超碰1999| 91九色国产在线| 亚洲日日日| 日本欧美成人片AAAA| 97久久婷婷色| 99啪视频在线观看| 黄色五月婷婷| 久久久er热| 五月情涩综合婷婷| 99在线精品视频| 婷婷伊人| 四川女人毛多水多A片| 热久91| 97视频.干com| 丁香婷婷免费| 丁香色五月天| 色噜噜婷婷| 中文字幕无码人妻少妇免费视频| 九九久99免费视频| 六月婷婷色色色| 欧洲色色| 超级碰碰一区| 乱码操操| 久噜久噜| 99热爱爱干干日| 日韩免费视频| 青996青| 思思99热在线| 色久天| 婷婷金品综合视频| 超碰免费人人肏| 九月丁香婷婷综合| 丁香五月丁香伊人| 性生活视频98791| 国产毛片欧美毛片久久久| 亚州色综合| 婷婷四月 成人 狠狠干| www.五月天激情| 激情综合网五月| 久热精品9999| 色八月婷婷| 玖玖热视频| 四色永久成人网站| 综合亚洲AV| 亚州欧美国产久精国产99综合视频| 五月播播| 无码99| 五月婷久久久| 精品少妇蜜臀91| 久久久中文| 99国产97在线,| 99国产er热视频| 青草五月天| 欧美内射AAAAAAXXXXX| 91凹凸在线| 五月婷久久在线| 五月天婷婷社区| 狠狠久久婷婷| 五月天激情日色在线| 色5月婷婷色| 热的国产,热的综合,热的有码| 99热.com| 中文字幕乱码亚洲精品一区| 久久激情五月婷婷| 婷婷五月花西瓜| 狠狠干五月天| 亚洲最大五月天成人网| 午夜九九九九九九九九九九九九九| 婷婷五月天色| 99热这里有精品2| 婷婷综合在线播放| 99久热| 十月丁香九月婷婷综合| 色五月91| 狠狠插.com| 婷婷五月激情的图片| 丁香五月AV在线| www.9色色色| 九色PORNY9l原创自拍| 亚州视频九九99| 婷婷六月综合基地| 久操热线| 色色色图| 热九九在线| 99久久五月婷婷| 中文av网| 色五月婷婷影院| 99热最新地址在线| Caoub青青超碰| 夜夜躁爽日日| 五月六月婷婷| 久久色五月天| 亚洲成人无码免费| 1024人妻| 九九在线视频| 激情综合网,婷婷五月天| 91丨九色丨43老版熟女| 九九视频精品在线免费| 色五婷婷| 激情98色婷婷五| 97色色婷婷| 五月丁香亚洲婷婷| 五月激情丁香久久综合网| 99小视频在线观看| 国产精品99久久久久久久女警| 99亚洲视频| 丁香5月啪啪| 大香蕉五月天| 成人网站高清无码| 免费无码毛片一区二区A片| 日本色99| 色综合天天天天做夜夜| 婷婷五月综合色中文字幕| 碰碰碰91| www,婷婷,com| 五月天伊人| 色日本综合| 丁香五月亚洲天堂| 五月婷婷丁香深深爱| 人人操人人干AV| 丁香五月综合网| 九九热AV| 亚洲无码另类| 伊人激情影院| 天天色综合网吨吧| 激情开心五月婷婷| 色五月丁香五月| 色综合色色色色| 婷婷五月天综合久久日| 成人无码精品1区2区3区免费看| 日本久热| 五月丁香久久| 毛片色五月| 青青草蜜臀| 99热情这里只有精品在线播放| 色色色在线观看| 婷婷五月欧美| 婷婷五月五月丁香| 精品一二三区久久AAA片| 亚洲第一第二网站| 色热久| 天天搞天天爽| www.色五月.com| 秋霞影音91人妻久久| 久久这里面只有精品视频| 综合大香蕉| 99啪啪网| 伊人色五月| 日本9区视频| 丁香99| 久9综合| 中文字幕一色哟哟哟哟| 欧美精品99久久久| 色色国产| 五月天婷婷丁香| 99精品热| 色9999日韩国产| 婷婷五月激情图片| 激情AV在线| 九九在线精点品| 婷婷五月激情五月激情| 精品五月天| 婷婷五月天在线观看第二页| 婷婷综合伊人丁香| 成人色色视频| 亚洲五月情| 激情网五月婷婷| 五月天影院| 常久最新免费的色吊丝| 伊人五月成人| www.国产色| 五月丁花六月丁香综合| 超碰高清在线| 婷婷五月天久久综合88| 成人免费视频一区| 男人天堂AV在线一区二区| 丁香五月很很肏| 墨西哥毛片内射精| 五月开心啪啪| 操碰久| 婷婷丁香五月天影院 | 综合色图区| 99re热视频这里只精品| 久热91| 99热免费| 国产暴力强伦轩1区二区小说| 超碰在线99| 国产精品成人AV在线观看春天| 天天射天天插天天干| 日本熟妇乱妇熟色A片蜜桃 | 欧美日韩999| 99精品偷自拍| 99热国产在线| 久在线综合69| 久九九热| 91丨九色丨白浆秘| 97久久久久| 麻豆科斗777| 天天爽综合| 操逼棍操逼| 96丁香六月婷婷蜜桃综合久久| 激情久久久久久| 99re思思热久久| 欧美激情五月天| 九九色婷| 色情五月| 色五月激情综合网| 婷婷久久午夜网| 五月丁香婷中文| 五月亭亭狠狠| 丁香蜜臀黄色婷婷五月天| 五月天狠狠| 无码少妇高潮喷水A片免费| 黄色录像网点| 国产综合81p| 亚洲色情久久| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 亚洲、欧美、国产另类笫二区| site:901-07.com| 26uuu激情五月天| 九九热视| www.久久| 色135综合网| 青青日韩| 狠狠色丁香五月婷巨| 手机AVAV天堂看网| 久久a热| 开心五月深爱五月| 免费在线观看AV网站| 五月天婷婷丁香花| 综合亚洲色色| 色人妻五月| 婷婷五月电影院| 欧美成人AAA片一区国产精品| 日韩AV在线电影| 99亚洲天堂| 激情色情五月天| 婷婷丁香九月| 天天色天天操天天射| 久久99大全| 伊人婷婷五月天| 丁香97综合| 99精品视频在线观看免费| 五月婷深深爱激情网| 在线中文亚洲| 欧美精品在线观看| 超级碰碰碰碰视频| 亚洲激情图文小说| 色吧五月婷婷| 狠狠干综合| 五月丁香趴趴| 五月婷婷激情四季| 天天色天天日| 精品一二三区久久AAA片| 丁香五月婷婷亚洲另类| 丁香六月色香蕉视频| 开心五月网| 97人人操人人干| 天天色2017| 秋霞免费三级片| 怡红院视频| 色情五月综合婷婷| 9 9 9色色| 色婷婷综合中心| 色欲影香| 99热国产在线| 激情婷婷五月亚洲| 六月婷婷开心| 国产偷人爽久久久久久老妇APP| 五月婷婷丁香大陆免费| 天天日,夜夜爽| 亚洲成人免费在线| 国产探花一片区| 丁香六月狠狠| 秋霞AV淫| 久草婷| 99在线爽| 亚洲视频五区| 丁香五月婷婷亚洲天堂| 日日干综合| 亚洲午夜视频| 亚洲综合碰| 99色丁香婷婷综合网| www.91.com黄| 激情婷婷五月综合| 九九一综合精品| 99在线热| 六月丁香开心婷婷欧美| 深爱激情网婷婷| 天天操比比| 五月间天堂综合| 日日爱699| 日韩AV无码影片| 激情五月,色五月| 黄色五月婷婷| 日韩av网站在线观看| 丁香五月激情图片| 久久99热这里只频精品6学生| 欧洲不卡视频| 天天插综合网| 999热这里只有美国精品| 精品视频99看在线视频| 99热这里是精品| 在线观看亚洲AV| 久久五月综合| 91人妻九色大屁股| 五月婷婷狠天天色综合| 丁香五月五月婷婷| 超碰女人天堂| 96精品久久久久久久久| www九月婷婷| 色欲AV导航| 开心色色五月天综合| 激情婷婷五六月天| 99只有精品| 五月婷婷在线丁香| 婷婷午夜精品久久久| 激情四射婷婷色色色| 欧美婷婷成人| 日韩久久欧亚| 婷婷五月天欧美图片在线播放电驴| 艳妇野外情欲放荡HD| 婷婷五月天日逼| 天天日天天色| 日日爱678| 婷婷五月六月丁香| 日韩色色色色色| 九月婷婷久久| 五月婷婷啪啪啪| 亚洲另类婷婷综合| 26.uuu丁香五月婷婷| 91久久电影| 综合色网站| 色丁香五月婷婷| 婷婷色操| 99九九热在线观看| 桃色五月天| site:hcxsz888.com| 色播五月网| 麻豆科斗777| 综合久久婷婷| 久久狠色噜噜狠狠狠狠97| 精品一二三区久久AAA片| 99热精品少| 五月丁香在线| 九九九成人在线视频| 九月丁香网婷婷| 色婷婷六月精品| 99视频这里有精品| 好激情在线综合网| 久久五月情| 五月天婷婷久久| 婷婷九九| 日韩人妻无码专区| 五月婷婷成人网首页| 麻豆WWWCOM内射软件| 天天天天天天天操| www九月婷婷| 996er热| 中美日韩成人在线| 99爱视频在线观看| 五月www| 婷婷五月天VI| 五月婷婷六月丁香综合| 五月天激情啪啪| 97超碰综合| 人人色人人摸人人看| 欧美精品中文字幕亚洲专区| 欧美va亚洲va在线播放| 亚洲天堂青草| www,超碰| 久久综合丁香五月| 久久久99精品免费观看| 狠狠色精品综合| 五月亭大香蕉| 亚洲99热| www.日韩艹| 91欧美日韩| 五月丁香婷婷色色色| 在线观看五月婷婷网| 色婷婷六月| 婷婷金品综合视频| 99热免费精品| h在线看免费版在线看| 天天综合.com| 色婷婷亚洲综合天堂| 97色色综合| 精品国产va久久久久| 日韩艹比| 九九热这里只有精品6| 国产亚洲99久久精品| 91操人人操| 四色五月婷婷| 婷婷久久综合久| 婷婷色影音天| 色女人久久| 久久国产性爱A V| 久久五月热| 99热老网站| 思思热在线视频99| 日韩肏屄网| 激情99| 狠狠干五月天| 美女五月天婷婷| www.com在线操视频免费观看| 久激情网| 久久机只有这里精品| 久99久99精品免| 成人av免费观看| 五月婷婷真爱激情网| 丁香色五月婷婷17C| 丁香亚洲色综合| 五月婷久久| 婷婷激情五月天在线| 激情四射五月天| 亚洲精品九九| 99色婷婷| 婷婷五月激情天| 婷婷久久五月| 色综合香蕉| 性av| 99九九玖玖| 色天天综合成人网| 久久激情视频| 婷久久综合| 亚洲色综合| 天天做天天爱天天高潮| 精品色色网| 色九九综合| 色婷婷aV四虎| 玖玖色综合| 色五月色图| 凹凸操Av| 97丁香花五月天激情小说| 日逼影音先锋AV男人资源站| 99小视频在线| 国产操逼视频网站| 精品一区二区三区四区五区六区| 美国十月色婷婷在线观看| 五月丁香直播| 九九99精品| 亚洲色图日韩网址| 亚洲深喉AV| 思思久久99| 五月天综合在线观看视频| 婷婷五月丁香婷婷| 五月丁香久人妻中文| 97se视频在线| 天天久综合网永久入口18| 婷婷天天色| 激情六月天婷婷| 色五月婷婷久久| 丁香五月婷婷丫| 亚洲成人在线播放| 婷婷五月丁香欧洲| 夜色爱爱亚洲| 久草热8精品视频在线观看| 色色色干| 在线观看婷婷5月| 激情婷婷色五月| 丁香婷婷六月激情综合| 九九成人精品免费视频| 九九99香蕉在线视频播放| 九九综合九色欧美狠狠| 国产成人精品一区二三区熟女在线 | 日本婷色| 国精产品一区二区三区|