91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

    文章

    7256

    瀏覽量

    91863
  • 數據包
    +關注

    關注

    0

    文章

    269

    瀏覽量

    24991
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70736

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    設計早期對EMC的考慮

    這些經驗法則。結果,70%~90%的新設計都沒有通過第一次 EMC 測試,從而使后期重設計成本很高,如果制造商延誤產品發貨日期,損失的銷售費用就更大。為了以低得多的成本確定并解決問題,設計師應該考慮
    發表于 03-04 14:21

    選擇數字孿生廠商要考慮哪四點

    在選擇數字孿生廠商時,企業需要考慮多方面因素以確保選擇到最適合自身需求的合作伙伴。以下是四個關鍵方面,企業在選擇數字孿生廠商時應著重考慮: 一、廠商的行業經驗與技術能力 行業經驗:廠商在相同或相鄰
    的頭像 發表于 12-18 11:39 ?262次閱讀

    選擇貼片電感型號時需要考慮什么參數?

    在選擇貼片電感型號時,需要綜合考慮多個參數以確保電感能夠滿足電路的需求并保證其可靠性。以下是一些關鍵參數及其考慮因素: 1. 電感值(Inductance, L) 定義:電感值是電感的標稱感值,反映
    的頭像 發表于 12-02 15:29 ?630次閱讀
    選擇貼片電感型號時需要<b class='flag-5'>考慮</b>什么參數?

    選擇數據采集器時需要考慮的因素

    在選擇數據采集器時,需要考慮以下關鍵因素,以確保所選設備能夠滿足特定應用需求并具有良好的性能和可靠性: 采集需求 : 數據類型和數量 :確定需要采集的數據類型(如溫度、濕度、壓力、位移
    的頭像 發表于 11-28 16:02 ?899次閱讀

    請問AIC3254能不能替代C5502+AIC32B?

    問題:我把AIC32B采集到的數據通過C5502進行分包處理,比如頻率倒序、數據加密,我有自己的算法,我想用AIC3254一顆芯片加MCU替代,不知道可行不可行啊?請專家給予回復啊!在線等待!
    發表于 11-07 07:04

    socket編程的安全性考慮

    在Socket編程中,安全性是一個至關重要的考慮因素。以下是一些關鍵的安全性考慮和措施: 1. 數據加密 使用TLS/SSL協議 :TLS/SSL(傳輸層安全性/安全套接層)是網絡安全中最常用的協議
    的頭像 發表于 11-01 16:46 ?745次閱讀

    BiCMOS ICs供電的考慮因素

    電子發燒友網站提供《BiCMOS ICs供電的考慮因素.pdf》資料免費下載
    發表于 10-23 09:34 ?0次下載
    BiCMOS ICs供電的<b class='flag-5'>考慮</b>因素

    字節跳動考慮在泰國新建數據中心

    據知情人士透露,字節跳動旗下的BytePlus正在積極考慮于明年在泰國設立一個全新的數據中心。這一舉措旨在進一步拓展公司在云計算和人工智能服務領域的全球布局。
    的頭像 發表于 10-22 17:05 ?664次閱讀

    高速ADC與FPGA的LVDS數據接口中避免時序誤差的設計考慮

    電子發燒友網站提供《高速ADC與FPGA的LVDS數據接口中避免時序誤差的設計考慮.pdf》資料免費下載
    發表于 10-15 09:50 ?6次下載
    高速ADC與FPGA的LVDS<b class='flag-5'>數據</b>接口中避免時序誤差的設計<b class='flag-5'>考慮</b>

    AM572x散熱考慮

    電子發燒友網站提供《AM572x散熱考慮.pdf》資料免費下載
    發表于 10-11 10:42 ?0次下載
    AM572x散熱<b class='flag-5'>考慮</b>

    高速電路PCB的EMC設計考慮

    電子發燒友網站提供《高速電路PCB的EMC設計考慮.pdf》資料免費下載
    發表于 09-21 11:50 ?5次下載

    使用壓敏電阻時要考慮電壓嗎?

    壓敏電阻具有非線性伏安特性,用于電路過電壓保護等。其電阻值隨電壓變化而變化,需考慮電路中電壓大小和波動對壓敏電阻性能的影響,避免頻繁動作和性能下降。
    的頭像 發表于 09-10 14:00 ?651次閱讀
    使用壓敏電阻時要<b class='flag-5'>考慮</b>電壓嗎?

    音頻產品Buck轉換器設計考慮

    電子發燒友網站提供《音頻產品Buck轉換器設計考慮.pdf》資料免費下載
    發表于 09-09 14:34 ?0次下載
    音頻產品Buck轉換器設計<b class='flag-5'>考慮</b>

    選擇數字隔離器的考慮因素

    電子發燒友網站提供《選擇數字隔離器的考慮因素.pdf》資料免費下載
    發表于 08-31 09:42 ?0次下載
    選擇數字隔離器的<b class='flag-5'>考慮</b>因素

    DLPC910的datasheet中未看到pindelay數據,DLPC910和DMD之間的LVDS總線是否要考慮pindelay的影響?

    如標題所述,DLPC910的datasheet中未看到pindelay數據,DLPC910和DMD之間的LVDS總線是否要考慮pindelay的影響
    發表于 08-16 06:18
    主站蜘蛛池模板: 亚洲成熟 | 日韩一级在线播放免费观看 | 夜夜澡人人爽人人喊_欧美 夜夜综合网 | 成年免费大片黄在线观看免费 | 日韩午夜精品 | 国产夜夜操| 中文字幕一区二区三区在线观看 | 美国人与性xxxxxxx | luxu259在线中文字幕 | 色老头久久网 | 亚洲专区一 | 一级一片免费视频播放 | 免费的黄色毛片 | 五月婷婷一区 | 日本不卡免费高清视频 | 色老头视频在线观看 | 国产精品久久久久久久久免费观看 | 国产无套粉嫩白浆 | 天堂网在线播放 | 天堂网中文在线 | 岛国片欧美一级毛片 | 欧美久久综合 | 欧美男人的天堂 | 欧美影院入口 | 在线观看中文字幕第一页 | 国产成人教育视频在线观看 | 日日做日日摸夜夜爽 | 美女扒开尿口给男人桶动态图 | 狠狠操狠狠摸 | 精品久久久久久中文字幕欧美 | 波多野结衣第一页 | 亚洲小便 | 国产高清小视频 | 国内色综合精品视频在线 | 精品欧美| 日本成人一级片 | 成年人黄色大片大全 | 久久综合九色综合98一99久久99久 | 中文天堂资源在线www | 亚洲狠狠综合久久 | 又粗又长又大又黄的日本视频 |