国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

數據分包設計的考慮

Q4MP_gh_c472c21 ? 來源:最后一個bug ? 作者:最后一個bug ? 2022-05-12 14:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是bug菌~前些天跟大家解釋了如下代碼:

		

offset=len/64+!!(len%64);

并且跟大家詳細聊了一下其中的!!操作,然而這段代碼的主要功能還是為了進行分包處理,既然是分包自然而然就會想到一種常用的分包處理方法,這也是本文的重點。

數據分包在嵌入式軟件開發中算是一種非常常見的處理,其主要原因還是硬件上的各種限制,不得已而為之,特別是在通信協議的定制過程中尤為常見。

1

傳輸限制

玩過各種通信協議的朋友都知道,像非常多的通信方式都是以數據幀的形式來進行傳遞,不同的通信方式因各方面的因素又存在一個最大傳輸字節數的限制,考慮到穩定性、容錯性等等對單次發送的數據長度進行限制,又或者所接收的設備其內存資源有限,不足以接收、處理過長的數據包。

zigbee這樣的物理層每幀最大只能傳輸127個字節,通過每層不斷的封包到應用層后每包才100個字節。當上層用戶協議的數據包過大,無法一次性傳輸,就只能分包或者分組下發,最終接收方組包后解析提取數據。

2

分包設計的考慮

有些朋友該說了,我就不喜歡搞大包發送,使用短包,然后通過不同的標識進行不同數據位的定義,簡單很多。

當然長包與短包并沒有本質上的區別,其目的都是傳輸數據,但在實踐的過程中還是會遇到居多處理上的區別:

數據的同步性方面:

比如當通信的設備轉速超了,同時報了一個故障碼,如果采用短包上傳,很可能故障碼和轉速位于不同的數據包中,當數據包丟包或許是亂序,就會導致當接收到故障碼的時候,此時超標的轉速值已經丟失或者延時等,有概率不能準確獲得故障時的超標轉速。

而使用長包,只需要發送方能夠保證打包的時候同步,那么接收方就可以同步獲得相應的數據。

通信協議設計自由度方面:

在設計協議的時候,長包會更加的自由,大多數情況都不需要考慮大數據傳輸的占位問題,甚至在編碼上直接copy結構體發送也是相當方便的。

3

計算包數問題

既然長包的設計相對比較方便。那分包處理是少不了的?

分包還不簡單?

要發100個字節的數據,每次只能發15個,那發送7包就可以了,直接編碼,代碼如下:

SendPack=SendNum/PackNum;
if(SendPack%PackNum)SendPack++;

這算是常規操作,如果覺得有點難度,還要多敲敲代碼。

一般用C語言比較久的朋友都想去簡化這種操作,畢竟實現一個簡單的功能需要兩行代碼,強迫癥,忍不了~

就有了本文開頭的!!處理方式,或者如下處理也是一樣的:


		

#include #definePackNum(total,single)(total/single+((total%single)?1:0)) intmain(void) { printf("packNum:%d ",PackNum(100,15)); printf("packNum:%d ",PackNum(150,15)); printf("packNum:%d ",PackNum(200,15)); printf("packNum:%d ",PackNum(5,15)); printf("hellobug~ "); return0; }

僅僅只是秀了一下C語言的幾個小技巧罷了,并沒有實質性的改善。

很明顯,本文的重點并不是介紹如上兩種辦法,而是如下更加高效的代碼:


		

PackNum=(total+(singleNum-1))/singleNum;

對于一些以往沒有使用的朋友或許有點懵,那bug菌這是嘮叨幾句:

該表達式主要是利用了取整的特性來達到+1的目的。

直接除單包個數,不能整除的情況,結果都會少1,比如10/6,應該是2包,而由于最終除法結果只能是1。

所以通過補償(singleNum - 1)后,結果就分兩種情況:

1、原本能夠整除的數,補償后無法整除,結果與之前一致;

2、原本不能夠整除的數,其余數必然在【1~(singleNum- 1)】之間,所以補償以后,其余數范圍在【singleNum~(singleNum+ singleNum- 2),則其結果為整除部分+1。

與我們分包個數是一致的,相當巧妙。

4

擴展

這種方法不僅僅只是用于通信的分組中,把思維進一步泛化。

只要是類似分組的處理都可以使用該算法

比如內存的分區,flash的設計上都是一個扇區一個扇區的分布。

現在想分配整數個扇形區域用于存儲某些數據,每一個扇區512個字節,存儲2000個字節的數據,該分配幾個扇區?

我相信你已經有答案了~

審核編輯 :李倩

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

    關注

    8

    文章

    7335

    瀏覽量

    94801
  • 數據包
    +關注

    關注

    0

    文章

    270

    瀏覽量

    25605
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    74004

原文標題:談談數據分包及相關小技巧

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【案例5.1】存儲器選型的考慮要點

    【案例5.1】存儲器選型的考慮要點某設計,用戶接口數據傳輸速率為10Gbps,每8個字節的數據對應一次查表需求,數據表存儲在由DDR4SDRAM組成的存儲器中。工程師需綜合
    的頭像 發表于 03-04 17:20 ?222次閱讀
    【案例5.1】存儲器選型的<b class='flag-5'>考慮</b>要點

    BMS設計中如何選擇MOSFET——關鍵考慮因素與最佳實踐

    MOSFET時需要綜合考慮多個因素,以確保其滿足BMS的高效和穩定運行要求。本文將介紹在BMS設計過程中選擇MDD的MOSFET時需要重點關注的關鍵因素和最佳實踐。一、MO
    的頭像 發表于 12-15 10:24 ?433次閱讀
    BMS設計中如何選擇MOSFET——關鍵<b class='flag-5'>考慮</b>因素與最佳實踐

    企業實施BI的時機和選擇考慮

    ?在數聚股份看來,如果你的企業還只處在初創階段,但又需要為日后的BI數據化做準備時。出于成本考慮,你可以先用Excel梳理好業務核心數據,聚焦核心指標,接著發展用戶,積累業務數據。 ?
    的頭像 發表于 12-02 16:08 ?320次閱讀

    使用nrf54L15的NORDIC藍牙芯片,通過串口發送一幀數據包時,會出現分包發送分析

    使用nrf54L15的NORDIC藍牙芯片,通過串口發送一幀數據包時,會出現分包發送分析,是什么原因呢
    發表于 11-17 15:52

    選擇加密算法時需考慮哪些因素?

    芯源半導體安全芯片的硬件加密引擎支持多種國際通用加密算法,在實際為物聯網設備選擇加密算法時,需考慮哪些因素?
    發表于 11-17 07:43

    risc-v中浮點運算單元的使用及其設計考慮

    SUBTRACT)等。 在設計浮點運算單元時,通常需要考慮以下因素: 精度:可根據實際應用需求選擇單精度浮點或雙精度浮點,對于需要高精度計算的應用可以選擇更高位的浮點數位數。 性能:包括頻率和吞吐量等
    發表于 10-21 14:46

    加速度傳感器需要考慮的五大因素

    在嚴苛和復雜的環境中研究、開發和測試產品時,加速度傳感器能夠提供寶貴的數據。但在某些行業,采集數據(特別是高g值下的測量)可能比較困難。因為加速度傳感器的應用取決于其精確度,所以在決定采用何種加速度
    的頭像 發表于 10-20 14:14 ?477次閱讀
    加速度傳感器需要<b class='flag-5'>考慮</b>的五大因素

    使用fal api 來讀寫1024 字節數據,需要需要考慮被高優先級線程打斷嗎?

    使用fal api 來讀寫1024 字節數據,需要需要考慮被高優先級線程打斷嗎?
    發表于 10-10 07:16

    FlashDB 的TSDB不支持寫粒度為128,是出于什么考慮有這樣的限制?

    FlashDB 的TSDB不支持寫粒度為128,是出于什么考慮有這樣的限制? 如果我希望把這個數據庫移植到這樣的一個mcu上,我們應該怎么做,有些建議嗎。 感謝各位大佬指點。
    發表于 09-23 08:19

    電能質量監測裝置的傳感器選擇應考慮哪些因素?

    電能質量監測裝置的傳感器是數據采集的 “前端入口”,其性能直接決定監測數據的準確性、完整性與可靠性。針對新型電力系統(含高比例新能源、電力電子化設備)的復雜工況,傳感器選擇需綜合考慮以下核心因素
    的頭像 發表于 08-21 11:41 ?699次閱讀

    ADC和FPGA之間LVDS接口設計需要考慮的因素

    本文描述了ADC和FPGA之間LVDS接口設計需要考慮的因素,包括LVDS數據標準、LVDS接口數據時序違例解決方法以及硬件設計要點。
    的頭像 發表于 07-29 10:01 ?5418次閱讀
    ADC和FPGA之間LVDS接口設計需要<b class='flag-5'>考慮</b>的因素

    正確的光纖尾纖需要考慮哪些因素

    選擇正確的光纖尾纖取決于應用、距離和設備。以下是需要考慮的因素: 1. 選擇正確的光纖類型:單模還是多模 單模光纖尾纖(OS2)專為城域網、骨干鏈路或5G前傳等長距離傳輸而設計。它們具有低插入損耗
    的頭像 發表于 07-04 10:00 ?690次閱讀

    選擇光纖配線架需要考慮哪些因素

    選擇光纖配線架時,需綜合考慮技術參數、環境適配性、管理需求、成本與擴展性等多方面因素。以下是具體分析框架和關鍵考量點: 一、核心參數匹配 光纖芯數與端口密度 需求匹配:根據當前光纖芯數(如24芯
    的頭像 發表于 06-11 10:13 ?924次閱讀
    選擇光纖配線架需要<b class='flag-5'>考慮</b>哪些因素

    三相變壓器主要組成部分有哪些

    三相變壓器的主要組成部分包括以下幾個關鍵部分:
    的頭像 發表于 05-20 13:35 ?1431次閱讀
    三相變壓器主要組成部分有哪些

    選擇錫絲直徑的關鍵考慮因素

    錫絲的直徑對于激光錫焊效果的影響非常大,如何選擇合適的錫絲直徑就顯得非常重要。松盛光電來給大家介紹選擇錫絲直徑的關鍵考慮因素,來了解一下吧。
    的頭像 發表于 04-24 10:54 ?1026次閱讀