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

ARTICLE DETAIL

資訊詳情

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

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

CAN通信代碼升級實戰(zhàn):從能收發(fā)到可靠收發(fā)的嵌入式設(shè)計 搞嵌入式或者汽車電子的朋友對CAN總線應(yīng)該都不陌生。車載網(wǎng)絡(luò)里到處是CAN發(fā)動機、車身控制器、電池管理、儀表全靠一根差分對在傳數(shù)據(jù)。去年我在某個項目上寫了一套CAN通信代碼當(dāng)時主要是驗證功能跑得倒也正常但一放到真實工程里就暴露出不少問題配置寫死在代碼里、接收靠輪詢、多幀數(shù)據(jù)來不及處理會丟、出錯之后不會恢復(fù)傳輸中斷只能重啟。這次出的升級版把這些問題逐個收拾掉了順手把結(jié)構(gòu)重構(gòu)成能直接拿到其他項目復(fù)用的模塊。這篇文章主要講清楚升級版是怎么設(shè)計的、每個模塊為什么這么寫、移植時又踩了哪些坑適合正在寫或者準備用CAN通信代碼的嵌入式工程師尤其是想從“能收發(fā)”往“可靠收發(fā)”走一步的朋友。1. 升級版究竟升級了什么先給初版“算算賬”1.1 初版代碼的幾個經(jīng)典痛點先說初版代碼。當(dāng)時驗證功能思路很簡單初始化一個CAN控制器配置好波特率然后在主循環(huán)里輪詢接收標志位有幀就進中斷或者標志判斷里讀出來打印到串口。代碼幾十行就能跑通在桌面上用兩個開發(fā)板對測效果挺理想。可事情一旦換到真實項目里問題就全冒出來了。第一個痛點是配置硬編碼。波特率、濾波ID、工作模式全都寫在初始化函數(shù)里換一個MCU型號整個文件就得重寫甚至同一個芯片換了一個應(yīng)用場景也要重新翻代碼改參數(shù)。這個問題的根源不是配置項本身多而是配置和驅(qū)動邏輯攪在一起一改配置就容易把驅(qū)動邏輯改壞。第二個痛點是純輪詢收發(fā)。主循環(huán)在等著一幀數(shù)據(jù)的時候如果總線上一段時間沒有報文整個CPU全被空轉(zhuǎn)占掉中斷里有數(shù)據(jù)要處理的時候主循環(huán)又在忙其他的兩邊一撞就丟幀。說白了就是沒有緩沖機制數(shù)據(jù)來一條收一條收不過來就放棄。第三個痛點是錯誤處理約等于零。初版代碼只在出錯時點亮一顆LED具體是什么錯誤、需不需要恢復(fù)、恢復(fù)之后怎么重新參與通信完全沒有設(shè)計。CAN總線上任何一個節(jié)點出錯進入bus-off狀態(tài)如果不處理整個節(jié)點就永遠脫離網(wǎng)絡(luò)了這在整車上是很嚴重的問題。1.2 升級版定下的四個目標升級版動手之前我給自己定了四個目標后面所有代碼都是圍繞這四個目標展開的。一是可配置。所有的波特率、過濾器、工作模式、中斷優(yōu)先級全部通過配置文件注入驅(qū)動代碼里不允許出現(xiàn)魔法數(shù)字。這樣換個場景只需要改配置頭文件驅(qū)動層一行不用動。二是可移植。把代碼分成兩層跟具體芯片寄存器相關(guān)的HAL層和通用邏輯的協(xié)議/驅(qū)動層。換芯片只改HAL層上層邏輯原封不動搬走。這一步看似費工但_project多了以后回報很高。三是可靠。錯誤計數(shù)器要能讀出來狀態(tài)遷移要有清晰邏輯bus-off要能自動恢復(fù)收發(fā)要有緩沖區(qū)不能讓“來不及處理”成為丟幀的借口。四是可擴展。數(shù)據(jù)結(jié)構(gòu)里預(yù)留好擴展幀、遠程幀、CAN FD幀的位置后續(xù)如果需要診斷協(xié)議或升級到CAN FD不用把整個模塊重寫。這四條定下來整個代碼的骨架就比較清楚了。下面直接說架構(gòu)和實現(xiàn)。2. 代碼怎么分層才經(jīng)得起折騰一個清晰的框架比什么都重要2.1 從“裸機直寫”到“分層模塊”的思路初版代碼最大的問題就是“一把梭”。所有邏輯都堆在一個文件里寄存器操作、協(xié)議解析、應(yīng)用處理全部混在一起看著代碼不多維護起來很痛苦。升級版第一件事就是把職責(zé)拆開。我采用的是四層結(jié)構(gòu)應(yīng)用層只需要調(diào)用發(fā)送接口、注冊接收回調(diào)完全不關(guān)心CAN控制器寄存器長什么樣。協(xié)議/驅(qū)動層負責(zé)幀封裝、解析、校驗、過濾規(guī)則匹配這里不出現(xiàn)具體寄存器操作。HAL層封裝所有跟芯片相關(guān)的寄存器讀寫、中斷入口、時鐘配置這一層換平臺時才動。配置層一份配置文件定義波特率、過濾器、通道數(shù)量和回調(diào)函數(shù)。打個比方這就像快遞鏈條。HAL層是各家物流網(wǎng)點負責(zé)把包裹搬上車協(xié)議層是運輸路線和分揀規(guī)則應(yīng)用層是收件人只關(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ū)里取幀應(yīng)用層在回調(diào)里拿最終結(jié)果。這樣每一層都能單獨測試也方便將來換成RTOS環(huán)境。2.2 核心數(shù)據(jù)結(jié)構(gòu)是怎么設(shè)計的升級版里最重要的一個結(jié)構(gòu)體是報文消息所有上層收發(fā)都靠它傳遞數(shù)據(jù)。我把它設(shè)計成這樣typedef struct { uint32_t id; /* 標準幀11bit擴展幀29bit */ uint8_t data[64]; /* 經(jīng)典CAN最多8字節(jié)CAN FD最多64字節(jié) */ uint8_t dlc; /* 當(dāng)前幀實際數(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列表因為當(dāng)前市面上的CAN控制器幾乎都支持“掩碼模式”內(nèi)核里是一套位比較邏輯比逐個ID匹配省資源而且能通過一個配置覆蓋一段地址范圍的幀。比如要接收ID 0x100到0x10F的所有幀列表模式要寫16條掩碼模式一條就夠ID設(shè)為0x100掩碼設(shè)為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ù)傳入外設(shè)時鐘、目標波特率和采樣點百分比自動算出預(yù)分頻和段長度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控制器畫的示意具體芯片可能不同但“預(yù)分頻、時間段1、時間段2”三段式的思路是通用的。拿到實際數(shù)據(jù)手冊后把位域的位置對應(yīng)改一下就能用。說一個經(jīng)驗target sys_clk / baud能整除的情況最理想如果除不盡別硬湊。有一條CAN規(guī)則是位時間TQ總數(shù)差值不能太大8到25這個范圍是我在實際選型時常用的安全區(qū)間。波特率偏差大于1.5%左右就很難在一個長報文上保證同步了所以優(yōu)先選能整除的預(yù)分頻值。采樣點這個值也值得認真選。我在一個項目里剛開始用50%的采樣點點對點通信沒問題可一旦總線掛了十幾個節(jié)點、線纜長度超過3米錯誤幀明顯變多。改成80%之后問題消失。原因就是采樣點太靠中間干擾疊加后很容易在采樣時刻讀到錯誤電平。建議不要低于70%。3.2 初始化流程的順序不能亂初始化代碼很多人隨手寫先配置GPIO再開啟時鐘或者先配CAN控制器再配過濾器。實際上順序錯了大概率跑不通。我整理了一個穩(wěn)定的初始化順序?qū)懗珊瘮?shù)后就不用再動開啟CAN外設(shè)時鐘、GPIO時鐘配置CAN_TX、CAN_RX引腳為復(fù)用功能先退出初始化模式再進設(shè)置模式按控制器狀態(tài)機要求操作把波特率寄存器值寫入位時序寄存器設(shè)置工作模式正常/回環(huán)/靜默配置過濾器組和掩碼清空中斷標志使能收發(fā)中斷請求進入正常模式確認模式切換成功。這里第3步和第8步是最容易漏的。很多控制器有“初始化模式”和“正常模式”之間的切換過程模式切換不是瞬間完成要讀模式狀態(tài)寄存器確認如果直接寫一個“請求正常模式”的位然后立刻開中斷中斷往往沒真正觸發(fā)。初始化失敗的情況真要遇到我建議把模式狀態(tài)寄存器、時鐘狀態(tài)寄存器、錯誤寄存器全部打出來先確認控制器是不是真的進了想要的狀態(tài)。別急著改GPIO配置因為大部分“一上電不能通信”的問題根本不是引腳配錯而是模式?jīng)]切過去。3.3 報文發(fā)送阻塞、超時與發(fā)送完成標志發(fā)送函數(shù)的設(shè)計核心是“不能因為發(fā)送失敗把主循環(huán)堵死”。我種做法是發(fā)送函數(shù)只負責(zé)“把幀寫入發(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ā)送的動作可能失敗。等發(fā)送完成中斷拉低tx_busy才能準確知道這幀已經(jīng)送出去了。發(fā)送失敗時控制器會置一個錯誤標志此時及時清標志并返回應(yīng)用層才能決定是否重發(fā)。阻塞等待的10ms是拍腦袋定的嗎不是。500kbps下最長的經(jīng)典CAN報文擴展幀8字節(jié)數(shù)據(jù)總長約145ns到160ns換算下來1ms能傳幾千幀發(fā)送一幀從請求到送出的時間在微秒到幾百微秒量級。10ms的超時足夠?qū)捜萦帜懿m住“控制器已經(jīng)異?!边@種嚴重情況。如果你的波特率特別低比如125kbps單幀時間會更長超時值要相應(yīng)放大。3.4 中斷接收、過濾器與回調(diào)處理接收這半邊是升級版的重頭戲。我的做法是CAN接收中斷里用最快的速度把郵箱里的幀搬進環(huán)形緩沖區(qū)清標志位然后把“有數(shù)據(jù)”這件事用一個全局標志暴露給主循環(huán)主循環(huán)或應(yīng)用層再從緩沖區(qū)里取幀處理。中斷服務(wù)函數(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”到底是“必須檢查”還是“忽略”不同芯片定義不一樣有的甚至反過來。我看到很多初學(xué)者在這里栽過配置完過濾器之后一條幀都收不到或者什么幀都能收到。所以我的建議是先回環(huán)模式跑一遍確認過濾邏輯跟預(yù)期一致再接真實總線。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); } }應(yīng)用層收數(shù)據(jù)的回調(diào)我故意做得很薄回調(diào)里只允許做兩件事拷貝消息、置一個“應(yīng)用層待處理”的信號量或標志。絕對不要在回調(diào)里做協(xié)議解析、打印或者Flash寫入。原因很簡單回調(diào)如果執(zhí)行時間過長接收緩沖區(qū)很快就滿了新幀只能被丟棄。真實項目中我有一次把一條UDS響應(yīng)解析放在接收回調(diào)里結(jié)果刷寫速率一下子掉了30%去掉之后立刻恢復(fù)。3.5 錯誤狀態(tài)遷移與自動恢復(fù)錯誤處理是升級版里最值錢的部分。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ā)也不應(yīng)答真實項目里最容易出現(xiàn)的是連上總線后誰都不說話查了半天發(fā)現(xiàn)某個節(jié)點的錯誤計數(shù)已經(jīng)超過256處于bus-off狀態(tài)。這種情況下的恢復(fù)策略是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)恢復(fù)重新參與通信 */ 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ù)不同控制器有不同策略。有些硬件會自動重發(fā)等待有些需要軟件把控制器復(fù)位重來一遍。我的建議是能軟件恢復(fù)就不要硬件斷電。在整車環(huán)境里一個節(jié)點反復(fù)重啟會拖累整個網(wǎng)絡(luò)的穩(wěn)定性而且重啟過程中如果總線上正好在跑多幀傳輸也容易干擾其他節(jié)點。錯誤中斷里除了讀計數(shù)還要記一條日志。哪怕是往一個全局數(shù)組里塞一個錯誤碼也比“亮個燈然后什么都不知道”強。我調(diào)試時最常用的做法是把錯誤碼和時間戳打印出來看是發(fā)送錯誤、接收錯誤還是應(yīng)答錯誤——總線負載高時這三種錯誤的處理思路完全不一樣。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)其它任務(wù)全卡住。問題根源不是緩沖區(qū)太小而是“所有幀都接收”這個配置讓中斷頻率變得極高CPU大部分時間花在搬數(shù)據(jù)上。反過來把掩碼配成“全部必須精確匹配”之后一條幀都收不到。排查時看了半天最后發(fā)現(xiàn)是掩碼寄存器里面位定義里1表示忽略而不是必須匹配我之前理解反了。所以這個坑的教訓(xùn)是寫過濾寄存器前先把數(shù)據(jù)手冊里“mask”位的含義抄到代碼注釋里避免下次再踩。過濾器還有一個容易出錯的地方是擴展幀和標準幀的ID存放位置不一樣。29位擴展ID在寄存器里被拆成兩段低16位和高13位你如果按標準幀的11位格式往寄存器里塞擴展幀永遠收不到。4.3 字節(jié)序、位序、DLC的坑CAN協(xié)議本身并沒有規(guī)定數(shù)據(jù)場的字節(jié)序用大端還是小端完全看應(yīng)用層怎么定義。做整車診斷的時候經(jīng)常遇到兩種格式混用有的信號按Motorola格式高字節(jié)在前有的按Intel格式低字節(jié)在前。初版代碼里我直接拿memcpy復(fù)制數(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以上按離散值對應(yīng)到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)里在處理其它任務(wù)處理時間超過了相鄰兩幀的間隔緩沖區(qū)的讀取速度跟不上寫入速度。最終方案不是無限加大緩沖區(qū)而是做了三件事把CAN接收中斷的優(yōu)先級提到最高一級確保中斷響應(yīng)不會被別的任務(wù)阻塞中斷里只拷貝不做處理主循環(huán)里的耗時操作全部改到空閑時間片執(zhí)行。這樣改動之后即使緩沖區(qū)只有16幀也很穩(wěn)。這里想強調(diào)一點緩沖區(qū)空間是預(yù)算不是容量。如果設(shè)計時讓緩沖區(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ā)都正常”另一臺設(shè)備當(dāng)然什么都收不到。第二檢查接收中斷是否使能這個看似簡單但很多芯片的中斷使能位是多級開關(guān)有一級漏配就全斷。第三檢查過濾器。第四確認總線PHY芯片的STB、RS引腳電平有一款常見的收發(fā)器芯片引腳不接電阻默認進入靜默模式只收不發(fā)。這類問題最容易蒙住人因為“能收到”說明總線物理層沒斷但“不能發(fā)”又指向驅(qū)動層實際上硬件配置就有問題。排查順序最好整理成一張自檢清單我在代碼里都加了相應(yīng)的調(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)用慢速外設(shè)這個比例能飆到50%以上。做實時系統(tǒng)時這個數(shù)字必須心中有數(shù)。5.2 重傳策略別做成“重傳風(fēng)暴”發(fā)送失敗后要不要重傳我的結(jié)論是只重傳重要的、應(yīng)用層需要保證送達的幀而且重傳要有退避機制。初版代碼里我做過一個錯誤的示范發(fā)送失敗后無限重傳總線負載一高幾個節(jié)點都在瘋狂重發(fā)錯誤幀越來越多形成惡性循環(huán)。升級版的策略是發(fā)送失敗時先進入一個“退避狀態(tài)”間隔指數(shù)增長重試最多重試3次同時把失敗次數(shù)上報到應(yīng)用層由應(yīng)用層決定是降級處理還是放棄。對于周期性報文簡單跳過一幀往往比重傳更合理因為下一幀很快就來了對于偶發(fā)性事件幀才需要可靠性保證。5.3 回環(huán)模式讓調(diào)試效率翻倍升級版的配置里保留了三種模式正常、回環(huán)、靜默?;丨h(huán)模式不經(jīng)過總線在內(nèi)部把發(fā)送數(shù)據(jù)直接送回接收路徑最適合單板自測。寫新代碼或者改過濾器配置之后先切到回環(huán)模式驗證一遍驅(qū)動邏輯再把模式改成正常接總線能省掉大量雙板聯(lián)調(diào)的痛苦?;丨h(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ù)段用更高的速率傳輸。升級版在設(shè)計時已經(jīng)把消息結(jié)構(gòu)的data[64]和flags的FD位預(yù)留好底層HAL層只需要增加一組寄存器操作驅(qū)動層的幀封裝邏輯要改動的地方不多。但有一點要特別提醒CAN FD不是所有控制器都支持換硬件之前要先確認。而且CAN FD的DLC編碼規(guī)則和位時序跟前文介紹的不一樣數(shù)據(jù)段的采樣點也要重新算。如果你現(xiàn)在用的還是經(jīng)典CAN控制器數(shù)據(jù)結(jié)構(gòu)先按上面的方式預(yù)留將來遷移時會輕松很多。最后再分享一點個人體會。CAN通信代碼真正做到“可靠”不是把寄存器的每一個位配對就行而是在“配置、緩沖、異常處理、分層結(jié)構(gòu)”這些看不見的地方下功夫。我先做回環(huán)自測再用GPIO把中斷的CPU占用量出來最后才敢上真實總線。這套代碼現(xiàn)在被我抽成固定模板換平臺只需要改HAL層和配置頭文件。如果讀者你現(xiàn)在正從零寫一套CAN驅(qū)動我建議不要只盯著“能收到數(shù)據(jù)”這個目標多花一點時間想想“收到之后怎么辦、出錯之后怎么辦”這個投入絕對值得。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99re6国产精品99re在线| 亚洲天堂第一页| 亚洲综合20p| 天天α片| 91日韩在线| 免费看A片毛毛片在线播| 日韩在线人妻网站| 日本午夜久久电影| 亚洲乱码精品一区二区| AV天黑人| 麻豆区久久久久亚| 少妇三P| 免费看一级a性色生活片久久无| 伊人网高清| 欧美在线啊啊啊| 日韩紧密久久| 欧美制服网站美腿丝袜| 久草大| 亚洲精品一区二区精品| 日韩成人精品| 亚乱色| 你懂的在线观看区国产| 97视频在线看| 老司机午夜精品视频| 久久综合久色欧美综合狠狠| 国产农村妇女精品1区二区| 操狠狠| 91色色色| 婷婷六月天| 2018色综合天天操| 色五月激情网| 婷婷五月天综合网| 色婷婷电影| 国产丝袜视频| 国产精品交换一区二区| 青青草伊人久久| 99r九九| 中文字幕av久久爽Av| 69AV女优男人的天堂| 猛交交| 婷婷尹人大香蕉免费| 色色色色网站| 亚洲天堂区| 可以免费观看的av| 久久久久免费少妇| 欧美美女在线高潮999| 99国产精品免费| 婷婷另类小说| 黄色一区三区| 超碰美国| 精品国产91av一区二区三区| 日本在线视频导航| 91xingse| 久久99精品国产| 青青草狠狠撸| 蜜臀99久久国产| 97天天日| 91精品女厕偷拍视频| 日韩丝袜二区| 亚洲无套久久嗯嗯| 激情婷婷丁香网| 91人妻在线视频| 欧美成熟性爱精品| 日本国产欧美高清在线| 嗯嗯啊在线视频| 九一屌逼| 天天综合网网欲色| 日韩人妻中文视频| 啊啊啊啊视频免费| 4tube欧美女厕所| 欧美激情专区| 黑人无码一区二区| 插入综合网| 国产又大又粗又长视频在线| 欧美se综合| 精品国产Av无码久久久亚洲| 久久久精品成人国产| 九九无码久久精品视频| 97欧美色综合| 国模无码人体一区二区三| 美女写真| 伊人久久大香蕉线AV五月天| 国产精品内射婷婷一级二| 国产精品探花在线| 97在线观| 国产精品视频麻豆入口| 人人天天欧洲| 超碰97人人乐| 亚洲图片婷婷五月天| 亚洲综合九九| 经典丝袜一区| 激情黄色片在线观看| 操人无码| 亚洲风情在线观看| 性色av婷婷久久一区二区点复制| 欧美黄色图片| 青青草中文字幕| 欧美一级国产一级| 97干色天堂| 大香蕉日韩欧美| 啪一啪免费视频| 欧美激情欧美精品| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚欧无码在线| 青青伊人久久| 国产成人无码a| 国精品一区二区三| 免费中文在线| 97操在线| 偷拍三区| 久久精品免费| 青青在线视频日韩欧美| 天综合网| av黄图片在线观看| 91在线限制级| 呦呦一区| 国桃视频产巨乳精品一区二区在线| 插入逼91| 在线观看视频91| 男女性无套 免费九一| www.色五月| 国产后入清纯| 96久久精品一二三区色欲| 一区二区三区无卡视频在线观看| 天堂v无码免费视频| 欧美专区在线| 亚洲欧美国产va在线播放频| 日韩一999精品| 国产精品人人爽人人做可爱福利| 免费人人搞97| 欧美一级特黄淫片在线观看| 免费97视频| 日韩欧美aⅴ综合网站发布| 女人妻一区| 91丝袜在线观看| 91在线页| 伊人五月天婷婷| 天天综合香 ld视频| 亚欧高清| 日韩国产九九精品一区二区三区毛片 | 家庭乱伦麻豆| a人欧美综合天堂麻豆| 91精品女厕偷拍视频| 91久久国外网| 日本在线不卡123| 亚洲高清视频在线免费观看| 欧美情色男人的天堂| 久久91精品国产9丨久久分亭| 亚欧中文字幕在线视频| 色婷婷激一区二区三区 | 一区二区三区美女超清| 日韩资源网| 精品一区二区成人动漫| 国产黄色影片在线观看| 天天干天天操天天干天天操| 蜜桃午夜视频一区二区| 日韩av色图综合| 神马久久久久久伦理片| 欧美三四五区| 伊人色综合超碰| 不卡啪啪视频| 国产亚洲精品一区二区三区| 天天在线91| 啊…啊…操我用力操我| 成人 日本A片无码8888| 蜜臀久久久99久久久久| 亚洲色悠悠久久88| 激情文学网伊人| AV麻豆免费一区| 九九九九九九九| 丁香五月婷婷基地| 中文字幕交换人妻| 大学生美女口爆| 久久精品高清无码一区| 日韩99神马视频片| 粉嫩国产精品久久久| 婷婷激情四射| 国产粉嫩出水在线播放| 国产亚洲精品农村妇女| 99老司机精品视频在线观看| 天天躁日日躁狠狠躁| 熟女露脸激情自拍视频| 欧美中字二区| 日韩无码嘿咻黑热久| 大香蕉久| 国产精品一区av在线| 91天美| 国产丁香精品露脸视频| 啊啊啊啊啊好舒服视频| 久久夜精品一区二区三区| 人妻天天夜夜爽一区二区| 日韩精品一区二区日韩| 国产乱伦亚洲| 懂色中文一区二区三区| 日韩三级在线观看网站| 日B操| 亚洲乱色熟女一区| 国产成人午夜视频网址| 精品久久久久久AV无码| 亚洲一区二区在线观看91| 91蜜臀人妻中文字幕在线| 精品一国2| 青青草大香蕉在线视频| 国产乱弄免费在线视频。| 国产精品一二三免费网站| 免费看久久久性性| 综合自拍| 99ri精品| 九九久久精品| 国产九九久久久精品| 色墦五月丁香| 久久综合日韩亚洲欧美| 按摩中文字幕| 性色av一区二区| 亚洲日产专区婷婷| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 操逼视频免费日韩无码| 国产福利精品最新在线| 婷婷亚洲综合| 久久久久久久九九九九九九| 欧美一区二区成人一卡| 97视频新免费| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 天天92av| 欧美福利视频啊啊啊啊| 岛国视频免费在线观看| 99热99在线| 色丁香五月婷婷| 国产按摩一区二区三区| 久久中出在线| 上床啊啊啊| 欧美亚洲天堂| 97人妻免费中文字幕| 欧美性爱中文字幕无线码| 久久美女国产| 九色97| 中文字幕在线观看网页| 国产不卡的视频| 又黄又硬又粗又长国产视频| 亚洲精品少妇| 熟女精品va中文字幕| 日本 欧美 国产一区| 亚洲精品视频在线| 素人无码中文字幕| 9精品久久久久| 97在线精品观看视频| 日韩美女操b| 国产成年女人免费视频播放a| 91熟女视频| www.av在线视频| 天美传媒一二三区永久网站| 白 大 人妻 区 在线| 97精品免费| 亚欧无码在线| 久久久网一区| A级毛片在线看免费| 色九九九综合| 99精品在线播放| 亚洲第91页| 91av一区二区在线观看| 成人在线永久| 无码区蜜乳| 久操在97| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 91操熟女视频| 国产一区二区三区导航| 激情综合av| 亚洲导航深夜福利| 精品人妻一区二区免费蜜桃视频| 大JI巴好深好爽又大又粗视频| 亚洲中文字幕妇伦久久| 日韩精品 欧美激情| 久操B网| 免费啪啪av| 国外91| 韩日精品四区| 国产第12页| 九九超碰综合网| 97二区四区| 亚洲系列第一页| 中文字幕在在线观看网站| 人妻一二三区| 黄站在线免费观看| 欧美日韩青操| 99re9在线| 一区二区三区四区免费视频| 国产高清自拍| 亚洲网污污污污| 色av中文字| 亚洲国产欧美一区二区潘金莲| 熟女露脸激情自拍视频| 伊人久久大香蕉线AV五月天| 精品精品精品| 十八禁视频网站| 欧美亚洲自拍另类人妻| 风间由美日韩欧美久久| 人妻啊啊人妻啊| 欧美天天影院| 大香网伊人久久综合网eew| 日韩人妻中文视频| 欧美淫穴| 欧洲乱码视频| 亚洲色堂免费视频| 欧美极品女人的天堂| 人人操人人操人人操人人操人人操人人人11.CM | AV老汉| 九九色图| 日韩无码专区| 国产精品亚洲免费| 国产树林里野战在线看| 亚洲成人在线乱码色午夜| 欧美aa一级片| 亲子敌伦对白在线播放| 蜜臀一二三区| 欧美伦乱爱| 精品精品精品| 欧美国产精品久久九九| 久久熟女久| 日本曲间由美性生活片| 亚洲黄色影视| 5278欧美一区二区三区| 天天综合网日韩7799| 亚洲日韩精品久久久久一区壹牛| 精品国产乱码久久久久久蜜臀| 好一吊区二区| 91在线国产后入风骚翘臀美女素人| 亚洲精品天天影视综合网| 99热99色| 狠狠综合网| 一区三区啪啪| 女人被添高潮免费视频| 日韩二三区| 国产久久一区二区三区野外在线| 亚洲偷91色| 国产成人主播| 午夜小电影在线插入淫高潮 | 加勒比大香蕉视频在线| 最近的最新的中文字幕视频| 亚洲91在线播放影院| 最新无码国产| 欧美色网| 亚洲第一免费视频| 校园春色亚洲| 无码外流操逼视频| 人人 操人人 操人人| 超碰国产精品无码| 淫妻综合网| 色噜噜综合在线| 色穴精品| 九九九九88| 岛国小电影| 亚洲综合激情五月久久| 青青草国产亚洲精品久久| 亚洲成人精品在线一区| 99精品在线播放| 日本免费不卡二区| 91精品国产乱码| 狠狠做深爱婷婷久久二区| 超碰97伊人| 99婷婷一区二区| 美女诱惑爱爱| 久婷婷一区| 国产精品在线免费| 美女天天干| julia高潮后不停追击中出| 九九九精品美女| 丁香五月天婷婷姐| 人人摸.人人色| 后入 亚洲 美女 射| 亚拍在线| 色色毛片| 欧美亚洲小说| 超碰成人最新最好看| 伊人久久在线视频观看| 日韩欧美大片免费高清啪啪| 国产精品婬乱一级毛片彝族| 97操97色| 中国AAAAAA黄色片| 日日干夜夜操视频h| 午夜视频久久久久一区| 欧美 日韩 国产传媒| 久久婷婷色| 色综合色综合网| 奸色色 男人天堂 天天射| 国内精品不卡无毒99999| 欧美一级A一级a爱片久久| 三级精品三级在线观看| 91看黄片| 久久久久久久国产a∨| 丝袜制服字幕在线| 久久婷婷在线观看视频| 亚州一区二区| 黄色污污污污污污网站| 日韩性爱1级片视频| 99久久久无码| 国产婷婷综合在线观看| 人妻碰碰碰碰碰碰| 九九在线视频| 中文字幕乱偷人妻久久艾草网| 欧美不卡二区| 国产第12页| 国产亚热在线久久| 8050午夜少妇无码| 久久岛国| a人欧美综合天堂麻豆| 翔田千里AⅤHD无码| 精品人妻一区二区乱码一区二区| 亚洲欧综合另类无码一区| 亚洲国产亚洲天堂| 人妻少妇久久久| 欲色综合| 99操视频| 插穴性爱视频在线观看| 玖玖久久久| 久久97资源 网| 人人妻人人狠人人| 久久久久久网址| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| a天堂视频| 亚洲色宗合| 一区二区播放| 五月婷婷综合网| 国产av波波国产精品| 亚洲第一视频 欧美风情 日韩| 日本少妇va7777| 玖玖婷婷五月天| 国产精品极品美女视频| 国产福利一区二| 欧美日韩人妻精品系列一区二区三区| 加勒比人妻综合| 性色高清在线| 中文字幕乱码人妻一区二区三区,99精品| 在线观看成人性爱免费小视频| 日本欧美不卡| 91老熟女91老女人| 欧美性爱精品一区二区| 亚州男人的天堂| 久久人妻一区二区三区高清| 午夜操一视频一区| 欧美激情久久久久| 精品美女少妇一区二区三区| 天美国产三级传媒| 久久久久9久久久久| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 偷拍片久久| 秋霞一区二区三区四区五区六区七区| 嗯嗯啊啊视频一区二区三区| 久久日韩肥臀| 丝袜美腿av女优在线| 国产成人欧美一区二区三区的国产| www熟女乱伦com| 午夜国产成人精品视频| 天堂а√在线最新版在线| 家庭乱伦国产| 丁香五月色情| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 色情五月婷婷| 熟妇最新先锋一二三区| 蜜臀亚洲综合一二三四区| 狠狠做深爱婷婷久久二区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产乱码精品久久久久久| 东北女人操比视频| 自拍六区| caoni国产亚洲av| 久久黄黄| 久久噜噜噜精品国产亚洲综合| 97超碰欧美手机| 日本免费中文字幕在线| 五月天激情网站| 试看福利| 黄色视频60分钟| 五月天婷婷色| 抽插亚洲无码| 深夜激情无码| 五月丁香在线| nuu12国产麻豆精品| 91精品国产高清久久久久久,亚洲成人 | 日韩伦理视频| 色牛aV| 高清不卡一二三区视频......| 好属操| 久草综合京东| 成年人网站在线免费观看| 嗯阿好爽好紧| 欧美人人操人人插| 日韩精品9999| 午夜无码精品免费看性色| 久久精9| 91艹B视频| 肉嘟嘟www视频在线观看高清| 日韩精品9区| 人妻少妇av在线观看| 秋霞免费AV| 国产Av超碰| 91丝袜美腿片| 99热色精品| 国产精品高潮久久久无码| 欧美最婬乱婬爆婬性视频| 日本黄色精品专区网站| 日韩精品国模| 2011国产精品| 天天弄天天操| 男人天堂新在线| 色综合潮| 熟女乱伦二区| 国产欧美日本亚洲精品| 天天躁夜夜躁狠狠躁AV| 夜夜嗨AV一区天天| 亚洲导航深夜福利| 78超碰| 久9久精品视频| 可以免费观看的AV| 午夜福利免费福利视频| 啊啊啊好多水| 玖玖综合视频| 成人A片男人的天堂| 麻豆这里只有精品| 天天躁日日躁成人字幕aⅴ| 九九九九九九视频| 美女人妻色网站| 日操粉逼逼| 成人一二| 精品九区| 精品无码一区二区三区| 国产亚洲色婷婷99精品91| 深爱激情五月天| 懂色av色欲av蜜臀av| 色九久| 九九九九免费视频| 欧洲乱码视频| 色妹子A V| 欧美做爰无码A片视频| 亚欧免费| 啪啪性爱免费视频| 97色在线视频| 天天影视综合色| 激情婷婷丁香| 欧美日韩青操| 操亚州| 神马久久久久久久久久| 又大又黄国产| 97超碰色五月| 91爱做| 偷拍视频青青草在线视频| 草草草视频在线免费看| 传媒在线观看一区二区三区| 五月激情视频| 久热久一区二区三区| 国产女同视频在线播放| 天天看天天日| 一级二级在线观看| 亚洲加勒比久久日本道| 97超碰人妻| 欧美日韩资源| 夜夜嗨视频| 99av| 97精品视频| 91亚洲电影| 狠日操| a人片中文字幕一区二区| 亚州操操穴网| 性色avv| 日韩美女久久一区二区三区| 久操99| 亚洲男人天堂网久久| 91国产丝袜足交精品视频| 亚洲色堂免费视频| 欧美在线啊啊啊| 级品肉射| 亚洲骚男同com| 91天天综合在线观看| 97伦综合| 日韩欧美日韩| 国产一级137片内射麻豆| 久久久久久久国产视频| 中文自拍欧美影视| 狠狠干综合| 欧亚洲精品有视频| 欧亚日韩三区| 欧美日韩亚洲少妇寂寞影院正在播放 | 老熟女区| 国产人妻精品一区二区三区秋霞 | 国产吹潮女在线观看| 大白逼三四级| 亚洲成人贴图| 懂色中文一区二区三区| 人人操人人搞人人草| 在线国产一区二区av| 97色在线| 亚洲色资源| yazhououmeizongya| 99re免费| 国产精品免费美女视频| 欧美色三级片91| 天天天天天超碰| 亚洲丝袜二区在线| 乱伦一二三区| 99热91| 精品视频97| 婷婷性网| jk白丝没脱就开始啪啪| 97超碰国产精品| 新视频sss国产| 超碰美国| 极品尤物在线观看| 免费网站观看www在线观| 欧美综合网站999| 影音先锋少妇| 性欧美另类高清| 玖日综合网| 伊人五月天婷婷| 亚洲精品国产无码高清| 超碰三级秋霞| 97这里有精品| 日韩国产十八禁| 免费观看欧美日韩操逼视频| 人妻精品一区二区全免费| 自拍六区| 久草免费在线视频| 亚洲精品 欧美97色色| 视频一区二区三区精品| 久草视频分类在线| 久久精品中文字幕女同| 中文字幕高清精品一区| 免费看毛片操穴| 天天操熟妇| av在线观看不卡网站| 殴美牲| 超碰在线在公开超碰在线在公开| 亚洲不卡三级手机播放| 日韩精品一二三四| 9精品久久久久| 欧美极度丰满熟妇hd| 老司机午夜福利视频一区二区| a片在线播放| 亚洲 欧美 91| 9 1果冻精品视频| 黄色av片三级三级三级免费看| 超碰激情808| 伊人嫩草| 欧美影院一区二区三区| 亚洲交换| 欧美日韩亚洲少妇寂寞影院正在播放 | 日韩欧美蜜桃精品久久中文字幕久久 | 大香蕉色十月| 伦理第一页| 国产av尤物| 97精品免费视频网站| 色色色综合网| 亚洲少妇在线观看| 手机不卡视频不卡在线一二三区| 九九九热| 熟女网站最新| 麻豆天美一区二区| 人妻熟女午夜精品在线| 亚洲97超碰| 97亚洲综合电影| 国产强奸乱伦无码视频| 欧美在线色图| 黄色在线网站| 国产精品毛片| 五月天社区| 精品无码久久久久久久杏吧| 啊嗯好大视频在线观看| 成人免费看吃奶视频网站| 麻豆精品三区视频| 亚洲精品久久久久久久蜜桃臀| 99热这里都是精品| 91扒丝袜综合在线| 国产精品成人福利在线| 久久久天堂| 91在线美女| 女人 A一级| 加勒比aⅴ| 日韩内射视频| 亚洲人妻中文高清| 久久久无码视频| 韩国三级三级BD在线| 午夜寂寞欧美| 九九碰九九爱97超| 加勒比海成人视频网| 精品成人av一区二区三区在线| 啊啊啊啊啊啊在线| 国产五码丝袜屁眼| 91站街按摩店老熟女熟女| 日韩电影在线观看网址| 精品人妻一二三四区视频| 91丨九色丨东北熟女| 亚洲色图尤物视频| 熟女熟妇一区二区三四区| 黑丝少妇麻豆| 久久久国产三级黄色片| 国产多人在线观看视频| 这里只有精品97| 试看福利| 91女神在线视频| www.超碰在线| 欧美综合色站| 张柏芝国产一区在线观看| 成人福利视频网| 欧美日韩在线视频网站| 婷婷五月天成人网| 大香蕉2017| 伦在线97| 亚洲男人天堂2012| 亚洲色五月| 亚洲黄色a级片| 国产二区三区免费视频| 九七超碰人人乐| 天天摸天天舔天天操| 91人人看| 婷婷五月天在线观看| 伊人五月天激情| 91AV入口| 大象AV在线| 91美| 国产2.3.4区| 老熟女中文字幕高清| 99啪啪视频| 黄页18禁| 97久久精品亚洲| 免费黄色视频网址| 欧美v亚洲v日韩v最新在线二区| 伊人网青青| 啪啪视频免费在线观看| 日逼97| 99少妇| 漂亮人妻被强中文字幕hd| 蜜臀久久精品久久久久视频| 人妻熟女一区二区三区在线| 色好看av| 台湾肥佬网一区二区三区| 色性荡荡荡荡视频| ′ !γ}丶。。久久精品欧美一区二区三区 | 影音先锋少妇| 免费观看的av| 欧美劲爆视频一区二区| 天堂国产AV| 五月天春色激情网| 你操综合| 久久综合久久综合人久久夜精品| 久久精品人体AV| 丰满人妻一区二区三区免费,| 99久热| 婷婷五月天影院| 91欧美高清| 四虎永久在线精品免费网址 | 成人资源中文字幕在线观看| 九九久精品| 日韩综合第八区国产精品| 久久精品无码熟妇一区二区三区视频导航 | 麻豆人妻少妇在线免费观看| 手机不卡视频不卡在线一二三区| 毛片视频白嫩| 97资源免费视频| 噜噜噜亚洲精品| 精品制服美女中文一区二区三区| 午夜福利 成人 91| 综合色好色| 亚洲国产成人7777| 国产Aα| 91色色色| julia在线观看久久| 欧美国产成人在线| 18精品一二区| 欧美不卡五十路| 欧亚成人| 黄色AV影视| 色大香蕉97N| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 亚洲天堂,男人| av操操不卡| 97超碰超碰| 中文字幕制服欧美久久一区| 久久99999| 精品国产乱码久久久久久免费| 久9无限国产| 另类TS人妖一区二区三区| 国产高清MV操逼视频| 欧美精品系列| 日韩黄色成人性爱| 色噜噜人妻丝袜a∨先锋影 | 精品中文字幕一区二区l - 百度| 强奸乱伦动态污图免费 | 日韩精品人妻系列无码天堂| AV99热18这里只有精品| 久热伊人| 视频黄色国产一级| 天天操夜夜操| 97操在线| 国产成人在线观看网址| 网页导航五月天免费一二三区| 95人妻爽爽人人做人人澡| 国产美女口爆吞精| 搡老女人老91妇女老熟女| 韩国黄片aaaa| 男人的天堂2018.| 色偷偷2020免费视频播放| 国产精品久久天天干| 激情综合五月| 亚洲国产亚洲天堂| 91一区二区三区蜜桃| 激情五月天色色网| 色拍偷亚洲| 乱伦熟女专区| 色性欧美| 日韩精品 欧美激情| 自拍偷拍 高清无码| 天天香香欲综合| 啊啊啊爽爽| 久久久久婷婷| 亚洲第一男人天堂| 狼狼色丁香久久婷婷综合五月| 一区二区三区 丝袜 高跟 美腿| 啊啊啊轻点在线观看| 特级特黄一级毛片免费| 香一区二区三区| 国产精品欧美在线观看| 国产吞精a级片激情电影| 综合一区中亚洲国产成人综合精品 | 内射小黄片| 色69大色97香蕉| 欧美一二三区四五区| 午夜欧美女人操逼| 91视频综合在线| 天堂性色| 人人考人人摸人人干| 免费成人在线熟妇网| 欧洲一级性爱视频在线观看| 无码久| 久久久久久69国产一区二区| 九九热免费在线国产视频伊人五月| 欧美不在线| 欧美色图天堂在线| 外站AV在线| 69精品少妇一区二区三区蜜桃| 欧美亚洲首页| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚洲最大黄网| yaouchengrenav| 亚洲欧美性生活| 一二三四视频中文字幕在线看| 久草婷婷| 无码WWW免费视频网站| 色网1| 性爱乱伦一区| 亚洲激情久久久伊人综合| 在线不卡视频| 大色综合| 日本久久99| 蜜臀中文无码午夜| 在线天堂资源亚洲| 97欧美精品| 色婷婷激一区二区三区| 超碰在线99| 97视频免费在线观看| 亚洲无码com| 91熟女网| 无套内射性感少妇视频| 久神马| 一区二区三区视频国产免费| 天天操天天看| 五月婷婷性爱| 欧美色网| 亚洲日韩XXX| 婷婷五月影院| 无码人妻精品一区二区三区99不卡 | 欧美三级免费伊人| 国产精品久久久久久无码红治院| 欧美黑人日韩少妇色情| 操狠狠| 热99这里有精品综合久久 | 人人澡综合涩| 精品国产久久乱码| 人人操人人大香蕉| 久久黄人人爽视频| 久久久工口| 免费伦费视频在线观看| 99热这里都是精品| 久久久久七视频| 亚洲最大无码中文字幕网站| 日本精品999| 夜夜青青无码影院| 嗯嗯啊操我| 99精品视频在线观看免费| 精品少妇高潮久久| 九X超碰| 第一高清av中文字幕| 欧美岛国精品在线观看| 97草草| 操香逼| 婷婷在线视频| 操高情无码| 一二三区操逼国产91| 91劲爆| 九九英色视频| 色婷婷五月天| 韩国午夜理伦三级好看| 久久久96| 国产91 丝袜在线播放| 亚洲欧洲色情高清| 大香蕉在线视频15| 成人午夜无码视频| 欧美操逼熟女| 免费看黄片现成| 亚洲乱妇p22| 91天天美女| 极品综合| 日韩操逼性鲍| 夜夜国产一区| 五月丁香社区婷婷日韩欧美精品影院 | 色9999日韩国产| 久久骚| 91色拍| 青青草在线视频美女| 欧美激情一区二区| 无码99| 久久婷婷五月天| 亚洲精品精品一区二区| 亚洲国产尤物yw在线观看| 久久婷婷综合国际产色怕| 欧美亚洲国产91在线| 亚洲综合另类| 精品国产乱码久久久久久网站入口| 欧美色道啊| 长久操视频| 色呦色呦色精品| 青木玲在线不卡| 婷婷15月天青娱乐| 综合视频91| 国产成人天堂| 91嫩草在线| 亚州高清av| 中文字幕人乱码中文字的预防方法 | 欧美成人A√在线一区二区| 极品白嫩美少妇在地板上位骑射淫水泛滥| 免费男人的天堂| 久久99久久99精品天美传媒棢·纸:. | 亚洲91网站| 欧洲小说色图视频另类| 婷婷五月天无码| 香蕉免费一区二区三区不读| 激情五月天校园春色网| 91劲爆| 午夜啊啊| 亚洲毛片基地专区| 看全色黄大色大片免费视频| 欧美一级在线观看成人| 高清无码久操视频| 人人操人人插人人摸人人干| 乱论91| 日本岛国黄色网址| 亚洲色图超碰在线| 欧美中文字幕一区| 曰韩香蕉97| 清纯唯美综合| 色色毛片| 黄骗免费| 婷婷大香蕉| 久久超碰、| 智利AV在线网| 97伊人网| 在线综合 亚洲 欧美中文字幕| 日韩人妻中文视频| 五月激情天| 99在线观看无大码| 干b网| 日韩欧美性爱电影在线观看| 91人妻精华帖| 97啪啪| 97大色网| 性高潮久久久久久久久久久| 十八禁啪啪视频| 18禁的网站在线| 口爆综合网| 日韩图区| 国产精品操| 熟女精品va中文字幕| 无码9区| 亚洲性少妇| 国产剧情在线| 人人插人人摸人人| 亚洲美乱| 欧美日韩国产人人| 亚洲欧美首页| 国产女人91精品嗷嗷嗷嗷| 91青视频| 亚洲se电影| 一级性爱视频免费观看| 国产精品亚洲免费| 在线97在线| 色香欲综合| 亚洲人妻中文高清| 国产性刺激| 东京热熟女亚洲视频网站| 美女熟妇色| 国产呦精品系列在线观看| 亚洲AV噜噜狠狠网址蜜桃动漫| 啪啪综合网| 99re在线观看| 99re9| 人人透人人操| 98精品国产乱码久久久久久| 久久久久久久久久9| 粉嫩绯色AV一区二区在线| 97国产亚洲中文在线| 日日骚中文字幕| 午夜国产成人福利视频| 丁香五月天久久精品视频一区二区三区| 麻豆一区二区AV天美| 色噜噜精品一区二区三| 欧美精品丝袜久久久中文字幕| 亚洲黄色电影| 亚洲aV性爱| 天天超级碰碰碰| 国产亚洲欧美每日在线| 久无码| 老鸭窝黄色视频网站| 中文?日韩?免费?精品| 色丁香五月婷婷| 精品无人区麻豆乱码1区2区图片| 久久九九视频九九视频| 91中文精品日韩欧美在线| 国产 日韩 欧美一区| 久久麻豆一区二区| 一卡二卡三卡| 大香蕉黄色一区| 亚州国产成人精品女人久久| 熟妇的味道HD中文字幕| 欧美高清性猛交| 日韩国产精品人妻无码久久久| 天天干一干| 久9九综合在线| 婷婷五月天av| 四虎影视精品| 国内91熟女人妻丝袜天天精品视频在线 | 色婷婷一区二区三区久久午夜成人不| 91精品亚洲内射孕妇| 久久久久78| 亚洲色欲天天天堂色欲网女| 加勒比综合九九99视频在线播放| 亚洲 小说 欧美 激情 另类| 国产日韩精品一区二区三区| 99久久亚洲精品无码毛片潘甜甜| 亚洲熟女国产综合另类| 日本成人免费一区二区三区| 一区二区三区日韩欧美| 国产精品久久久久久久久久梁医生| 艾草av| 免费精品人妻一区二区三| 色香伊人| 丁香九月激情啪| 亚洲中文字幕熟女少妇一区二区| 激情丁香五月| 国产资源中文字幕在线| 爱爱动态试试看6 0秒| 久久青青草原免费视频| 亚洲。天堂。日本在线观看| 中文字幕jul-617人妻熟女| 友优传媒精品在线一区二区| 天天欧美色| 吖在线不卡一区二区国产剧情 | 秋霞一级A片黄色视频| 伊人热综合| 欧美 亚洲| 亚洲色图欧美激情| 在线播放免费av福利片| 一区二区不卡视| 九热中文字幕| 人人爽夜夜玩视频| 亚洲日产专区婷婷| 精品久久久久瑟瑟| 天美一区在线| 天天干夜夜操一区二区| 人妻久久| 国产午夜福利电影免费在线观看| 欧美综合娱乐久久| 久久久婷| 婷婷香网站| 熟女探花啪啪| 久湿久久| 丝袜美腿操av| 国产精品美女久久久久久网站| 黄色成人网久久久久久| 日韩成人精品视频自拍| 巨乳特殊服务按摩| 60秒试看最爽10分钟网站| 亚洲美女自拍偷拍视频| 亚洲天天操| 免费97视频| 欧美人妻二区三区| 91精品无码人妻系列| 老熟女91| 亚洲久草AV色图| 精爱久久| 99热成人| 午夜无码精品免费看性色| 青青在线视频日韩欧美| 激情婷婷丁香| 久久av网| Julia在线播放亚洲久久| 亚洲天堂人妻熟妇视频| 国产老女人久久毛| 蜜桃臀AV在线| 日本精品免费一区二区三区四区| 丁香六月婷婷久久综合| 久久久久久日韩| a级免费在线观看| 国产精品另类| 劲爆欧美人妖三区91| 少妇与黑人高潮在线| 五月丁香成人网| 欧美激情中文字幕另类小说| 久久黄片国产一区二区| 蜜臀久久99精品久久久久久婷婷 | 在线小说视频一区| 鸥美精品一区二区久久婷婷| 猛交交| 97最新在线播放视频| 顶级丝袜熟女一区二区三区| 日本黄大片在线观看视频| 亚洲欧美另类图片| 91蜜臀人妻中文字幕在线| 国产1727欧美| 日韩欧美资源| 天天看片麻豆| 嗯嗯嗯啊啊啊操的我好爽| 亚洲有码 视频一区| 久久riav中文精品| 国产成人主播| 久操视频在线观看| 青青草视频久久久久| 亚洲一欧洲中文字幕在线| 四虎影视国产精品| 久操99| 99久久精品国产高潮| 五月丁香综合网| 人人妻人人色| 亚洲情色五月天 | 久久香蕉国产传媒一区剧情天美| 午夜男人一级A片7777| 丁香六月东京热| 日韩人成网站在线播放| 黄页网站免费高清在线观看| 美女尤物人人操| 欧美人妻精品一区二区| 国产91精品福利在线| 中国女人内射6XXXXX| 免费A V在线播放| 亚洲精品人妻吞精av| 色综合色欲色综合色综合色综合| 国模精品娜娜一二三区| 国产无套粉嫩白浆在| 五月丁香激情综合网| 天天操夜夜操| 亚洲男人天堂网久久| 亚爽爽爽爽爽爽爽爽| 久久精品国产久精国产|