女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

虹科分享|關于阻塞函數和非阻塞函數

虹科汽車電子 ? 2022-07-05 14:38 ? 次閱讀

關于阻塞函數和非阻塞函數

CAN和LIN相關的開發庫里,不可避免的會出現“收”和“發”的函數。如何快速有效的處理數據,是開發中重要的事項。但實際上單路CAN由于波特率的限制,數據量并不會很大:以常用的500k為例,如果按照總線負載率為30%左右,那么需要在1ms處理1~2次數據即可。相比之下常用的以太網一般都要在100M的速率以上了。


c9d32c48-f95b-11ec-a2f4-dac502259ad0.png

因為系統的底層,例如WINDOWS,在處理文件、串口等使用的是同樣的函數,所以CAN、LIN處理起來可以運用這些相關的經驗。回歸到正題,讀寫函數可以分為阻塞函數和非阻塞函數兩種,它們處理起來的方式是不一樣的。

阻塞函數(blocking):在執行時會阻塞當前線程,通常會有一個超時時間。

非阻塞函數(non-blocking):不會阻塞當前線程,直接返回結果,通常會有一個對應的緩存。

讓我們舉兩個例子說明:

在UDS的API中獲取ECU返回的數據采用阻塞函數。例如,我們在用27服務獲取seed,如果我們沒有成功獲取seed,那么接下來的步驟也無法進行下去。所以阻塞函數會迫使我們去等待結果;如果執行失敗,需要做錯誤處理,例如重新嘗試進行獲取。

如果阻塞函數的超時時間設置為0,就會和非阻塞函數類似(有些阻塞函數超時時間為0,可能意味著永遠也讀不到數據了,因為它們總是想要讀取來自“未來”的內容)。

在底層的basic API中,CAN的接收采用了非阻塞函數,設備將把讀到的數據放到緩存里,而函數將從緩存里讀取數據。如果緩存里沒有數據,函數會立刻返回無數據,而不會等待“不確定的”下一個數據。也就是說無論何種情況,函數都會立刻返回結果。

在我們處理CAN數據時,可以周期性(例如20ms)讀取數據,讀到無數據之后,做其它的事情,例如通過dbc獲取信號值并顯示。函數不會等待20ms直到新的CAN幀出現在總線上,也防止了丟幀的情況。因為普通的CAN通信,我們無法在程序層面判斷何時會接收到新的數據。

另外,有時我們也會想要保證數據是“新的”,而不是躺在緩存里不知道多久之前的內容,那么在讀取數據前先清空緩存會是一個不錯的選擇。

END

虹科車輛網絡

虹科車輛網絡事業部在汽車總線行業經驗超過10年,與世界知名的CAN、LIN總線供應商PEAK-System、Lipowsky、IHR等合作10年之久,提供領域內頂尖水平的CAN/LIN分析儀和測試方案,同時也提供汽車以太網,時間敏感網絡(TSN)的仿真測試工具和方案。虹科自主研發的EOL測試軟硬件系統已經在業內完成多次安裝和測試,事業部所有成員都受過國內外專業培訓,并獲得專業資格認證工程師平均5年+技術經驗和水平,一致贏得客戶極好口碑。虹科車輛網絡事業部致力于為您提供最專業的服務。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4368

    瀏覽量

    64180
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    在testbench中如何使用阻塞賦值和阻塞賦值

    本文詳細闡述了在一個testbench中,應該如何使用阻塞賦值與阻塞賦值。首先說結論,建議在testbench中,對時鐘信號(包括分頻時鐘)使用阻塞賦值,對其他同步信號使用
    的頭像 發表于 04-15 09:34 ?536次閱讀
    在testbench中如何使用<b class='flag-5'>阻塞</b>賦值和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>賦值

    “串口阻塞”你真的會用嗎?

    很久才會發出來,一下子出來很多數據”。經過幫客戶檢查應用程序源碼,發現應用程序在串口阻塞方面沒有做正確的處理,修改后解決。阻塞打開串口open("/dev/tty
    的頭像 發表于 02-13 11:42 ?642次閱讀
    “串口<b class='flag-5'>阻塞</b>”你真的會用嗎?

    TPA3004功放,開機保護,聲音阻塞,為什么?

    TPA3004功放,開機保護,聲音阻塞。過一段時間,芯片發熱后正常。詢求問題解決方法
    發表于 11-08 08:30

    socket編程中的阻塞阻塞

    在網絡編程中, socket 是一個非常重要的概念,它提供了一個抽象層,使得開發者可以不必關心底層的網絡通信細節。 socket 編程中的阻塞阻塞模式是兩種不同的操作方式,它們對程序的響應性
    的頭像 發表于 11-01 16:13 ?633次閱讀

    SUMIF函數與SUMIFS函數的區別

    SUMIF函數和SUMIFS函數都是Excel中用于條件求和的函數,它們可以幫助用戶根據特定的條件對數據進行求和。盡管它們的基本功能相似,但在使用場景和功能上存在一些差異。以下是對這兩個函數
    的頭像 發表于 10-30 09:51 ?7010次閱讀

    Verilog HDL的基礎知識

    本文繼續介紹Verilog HDL基礎知識,重點介紹賦值語句、阻塞阻塞、循環語句、同步與異步、函數與任務語法知識。
    的頭像 發表于 10-24 15:00 ?1041次閱讀
    Verilog HDL的基礎知識

    socket阻塞阻塞的區別是什么

    在計算機編程中,socket 是一種通信端點,用于在網絡中進行數據傳輸。Socket 可以是阻塞的或阻塞的,這兩種模式在處理數據傳輸時有不同的行為。 阻塞模式(Blocking Mo
    的頭像 發表于 08-16 11:13 ?1124次閱讀

    求助,關于CyU3PUsbHostEpWaitForCompletion函數中的阻塞問題求解

    主線程)調用該函數時,CyU3PUsbHostEpWaitForCompletion 函數經常阻塞,雖然指定了超時值,但從未返回。 我想應該在主程序線程中調用該
    發表于 07-23 07:57

    如何在espconn_gethostbyname上創建阻塞線程?

    在 espconn_gethostbyname 上創建阻塞線程
    發表于 07-10 07:45

    是否可以使用Aurix中的CCU6模塊,以阻塞方式在檢測到GPIO下降沿時觸發中斷?

    我想知道,是否可以使用 Aurix 中的 CCU6 模塊,以阻塞方式在檢測到 GPIO 下降沿時觸發中斷? TC397 的示例代碼僅將其用于 PWM 生成和時鐘定時,但我很好奇如何將其用于 GPIO 邊沿檢測。
    發表于 07-04 07:00

    請問IDF里TCP的recv()函數阻塞時會不會釋放CPU引起任務切換?

    如果不會,那我在recv()阻塞時想讓其他任務也可以執行是不是只能把有recv的這個任務優先級調低?
    發表于 06-25 08:24

    請問怎們設置socket套接字的rec函數阻塞時間?

    請問怎們設置socket套接字的rec函數阻塞時間?
    發表于 06-24 06:14

    請問使用lwip創建socket,該如何做到阻塞的接收發送數據?

    請問使用lwip創建socket,該如何做到阻塞的接收發送數據?
    發表于 06-19 06:02

    如何讓write行為具有阻塞特性?

    spp_vfs_write 與 PC 端 socket 溝通:esp32 write, PC read.若 PC 端不執行 read 行為,esp32 持續 spp_vfs_write ,數據會發送到 PC 端嗎?還是在 esp32 設備端 ?謝謝。另如何讓 write 行為具有阻塞特性?謝謝。
    發表于 06-11 07:23

    測試ESP-IDF ESP32C6,創建線程調用recvform接收數據發現一直被阻塞,如何解決?

    沒問題的,但是創建線程調用recvform接收數據發現一直被阻塞,現在懷疑是wifi event的回調函數占用了CPU導致接收線程被阻塞了。請問有什么比較好的解決方法嗎?
    發表于 06-05 08:22