日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)分包設(shè)計(jì)的考慮

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

掃碼添加小助手

加入工程師交流群

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

		

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

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

數(shù)據(jù)分包在嵌入式軟件開(kāi)發(fā)中算是一種非常常見(jiàn)的處理,其主要原因還是硬件上的各種限制,不得已而為之,特別是在通信協(xié)議的定制過(guò)程中尤為常見(jiàn)。

1

傳輸限制

玩過(guò)各種通信協(xié)議的朋友都知道,像非常多的通信方式都是以數(shù)據(jù)幀的形式來(lái)進(jìn)行傳遞,不同的通信方式因各方面的因素又存在一個(gè)最大傳輸字節(jié)數(shù)的限制,考慮到穩(wěn)定性、容錯(cuò)性等等對(duì)單次發(fā)送的數(shù)據(jù)長(zhǎng)度進(jìn)行限制,又或者所接收的設(shè)備其內(nèi)存資源有限,不足以接收、處理過(guò)長(zhǎng)的數(shù)據(jù)包。

zigbee這樣的物理層每幀最大只能傳輸127個(gè)字節(jié),通過(guò)每層不斷的封包到應(yīng)用層后每包才100個(gè)字節(jié)。當(dāng)上層用戶協(xié)議的數(shù)據(jù)包過(guò)大,無(wú)法一次性傳輸,就只能分包或者分組下發(fā),最終接收方組包后解析提取數(shù)據(jù)。

2

分包設(shè)計(jì)的考慮

有些朋友該說(shuō)了,我就不喜歡搞大包發(fā)送,使用短包,然后通過(guò)不同的標(biāo)識(shí)進(jìn)行不同數(shù)據(jù)位的定義,簡(jiǎn)單很多。

當(dāng)然長(zhǎng)包與短包并沒(méi)有本質(zhì)上的區(qū)別,其目的都是傳輸數(shù)據(jù),但在實(shí)踐的過(guò)程中還是會(huì)遇到居多處理上的區(qū)別:

數(shù)據(jù)的同步性方面:

比如當(dāng)通信的設(shè)備轉(zhuǎn)速超了,同時(shí)報(bào)了一個(gè)故障碼,如果采用短包上傳,很可能故障碼和轉(zhuǎn)速位于不同的數(shù)據(jù)包中,當(dāng)數(shù)據(jù)包丟包或許是亂序,就會(huì)導(dǎo)致當(dāng)接收到故障碼的時(shí)候,此時(shí)超標(biāo)的轉(zhuǎn)速值已經(jīng)丟失或者延時(shí)等,有概率不能準(zhǔn)確獲得故障時(shí)的超標(biāo)轉(zhuǎn)速。

而使用長(zhǎng)包,只需要發(fā)送方能夠保證打包的時(shí)候同步,那么接收方就可以同步獲得相應(yīng)的數(shù)據(jù)。

通信協(xié)議設(shè)計(jì)自由度方面:

在設(shè)計(jì)協(xié)議的時(shí)候,長(zhǎng)包會(huì)更加的自由,大多數(shù)情況都不需要考慮大數(shù)據(jù)傳輸?shù)?/span>占位問(wèn)題,甚至在編碼上直接copy結(jié)構(gòu)體發(fā)送也是相當(dāng)方便的。

3

計(jì)算包數(shù)問(wèn)題

既然長(zhǎng)包的設(shè)計(jì)相對(duì)比較方便。那分包處理是少不了的?

分包還不簡(jiǎn)單?

要發(fā)100個(gè)字節(jié)的數(shù)據(jù),每次只能發(fā)15個(gè),那發(fā)送7包就可以了,直接編碼,代碼如下:

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

這算是常規(guī)操作,如果覺(jué)得有點(diǎn)難度,還要多敲敲代碼。

一般用C語(yǔ)言比較久的朋友都想去簡(jiǎn)化這種操作,畢竟實(shí)現(xiàn)一個(gè)簡(jiǎn)單的功能需要兩行代碼,強(qiáng)迫癥,忍不了~

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


		

#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語(yǔ)言的幾個(gè)小技巧罷了,并沒(méi)有實(shí)質(zhì)性的改善。

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


		

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

對(duì)于一些以往沒(méi)有使用的朋友或許有點(diǎn)懵,那bug菌這是嘮叨幾句:

該表達(dá)式主要是利用了取整的特性來(lái)達(dá)到+1的目的。

直接除單包個(gè)數(shù),不能整除的情況,結(jié)果都會(huì)少1,比如10/6,應(yīng)該是2包,而由于最終除法結(jié)果只能是1。

所以通過(guò)補(bǔ)償(singleNum - 1)后,結(jié)果就分兩種情況:

1、原本能夠整除的數(shù),補(bǔ)償后無(wú)法整除,結(jié)果與之前一致;

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

與我們分包個(gè)數(shù)是一致的,相當(dāng)巧妙。

4

擴(kuò)展

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

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

比如內(nèi)存的分區(qū),flash的設(shè)計(jì)上都是一個(gè)扇區(qū)一個(gè)扇區(qū)的分布。

現(xiàn)在想分配整數(shù)個(gè)扇形區(qū)域用于存儲(chǔ)某些數(shù)據(jù),每一個(gè)扇區(qū)512個(gè)字節(jié),存儲(chǔ)2000個(gè)字節(jié)的數(shù)據(jù),該分配幾個(gè)扇區(qū)?

我相信你已經(jīng)有答案了~

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7350

    瀏覽量

    95067
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    270

    瀏覽量

    25670
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4978

    瀏覽量

    74440

原文標(biāo)題:談?wù)剶?shù)據(jù)分包及相關(guān)小技巧

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【案例5.1】存儲(chǔ)器選型的考慮要點(diǎn)

    【案例5.1】存儲(chǔ)器選型的考慮要點(diǎn)某設(shè)計(jì),用戶接口數(shù)據(jù)傳輸速率為10Gbps,每8個(gè)字節(jié)的數(shù)據(jù)對(duì)應(yīng)一次查表需求,數(shù)據(jù)表存儲(chǔ)在由DDR4SDRAM組成的存儲(chǔ)器中。工程師需綜合
    的頭像 發(fā)表于 03-04 17:20 ?488次閱讀
    【案例5.1】存儲(chǔ)器選型的<b class='flag-5'>考慮</b>要點(diǎn)

    BMS設(shè)計(jì)中如何選擇MOSFET——關(guān)鍵考慮因素與最佳實(shí)踐

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

    企業(yè)實(shí)施BI的時(shí)機(jī)和選擇考慮

    ?在數(shù)聚股份看來(lái),如果你的企業(yè)還只處在初創(chuàng)階段,但又需要為日后的BI數(shù)據(jù)化做準(zhǔn)備時(shí)。出于成本考慮,你可以先用Excel梳理好業(yè)務(wù)核心數(shù)據(jù),聚焦核心指標(biāo),接著發(fā)展用戶,積累業(yè)務(wù)數(shù)據(jù)。 ?
    的頭像 發(fā)表于 12-02 16:08 ?404次閱讀

    使用nrf54L15的NORDIC藍(lán)牙芯片,通過(guò)串口發(fā)送一幀數(shù)據(jù)包時(shí),會(huì)出現(xiàn)分包發(fā)送分析

    使用nrf54L15的NORDIC藍(lán)牙芯片,通過(guò)串口發(fā)送一幀數(shù)據(jù)包時(shí),會(huì)出現(xiàn)分包發(fā)送分析,是什么原因呢
    發(fā)表于 11-17 15:52

    選擇加密算法時(shí)需考慮哪些因素?

    芯源半導(dǎo)體安全芯片的硬件加密引擎支持多種國(guó)際通用加密算法,在實(shí)際為物聯(lián)網(wǎng)設(shè)備選擇加密算法時(shí),需考慮哪些因素?
    發(fā)表于 11-17 07:43

    risc-v中浮點(diǎn)運(yùn)算單元的使用及其設(shè)計(jì)考慮

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

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

    在嚴(yán)苛和復(fù)雜的環(huán)境中研究、開(kāi)發(fā)和測(cè)試產(chǎn)品時(shí),加速度傳感器能夠提供寶貴的數(shù)據(jù)。但在某些行業(yè),采集數(shù)據(jù)(特別是高g值下的測(cè)量)可能比較困難。因?yàn)榧铀俣葌鞲衅鞯膽?yīng)用取決于其精確度,所以在決定采用何種加速度
    的頭像 發(fā)表于 10-20 14:14 ?624次閱讀
    加速度傳感器需要<b class='flag-5'>考慮</b>的五大因素

    使用fal api 來(lái)讀寫(xiě)1024 字節(jié)數(shù)據(jù),需要需要考慮被高優(yōu)先級(jí)線程打斷嗎?

    使用fal api 來(lái)讀寫(xiě)1024 字節(jié)數(shù)據(jù),需要需要考慮被高優(yōu)先級(jí)線程打斷嗎?
    發(fā)表于 10-10 07:16

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

    FlashDB 的TSDB不支持寫(xiě)粒度為128,是出于什么考慮有這樣的限制? 如果我希望把這個(gè)數(shù)據(jù)庫(kù)移植到這樣的一個(gè)mcu上,我們應(yīng)該怎么做,有些建議嗎。 感謝各位大佬指點(diǎn)。
    發(fā)表于 09-23 08:19

    隔離變壓器功率選擇要考慮的 5 個(gè)因素,新手必看

    選購(gòu)隔離變壓器時(shí),功率大小的選擇至關(guān)重要,合適的功率能確保變壓器正常運(yùn)行并延長(zhǎng)其使用壽命,以下是一些考慮因素,幫助你選擇適當(dāng)功率的隔離變壓器。
    的頭像 發(fā)表于 08-25 13:50 ?1326次閱讀
    隔離變壓器功率選擇要<b class='flag-5'>考慮</b>的 5 個(gè)因素,新手必看

    電能質(zhì)量監(jiān)測(cè)裝置的傳感器選擇應(yīng)考慮哪些因素?

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

    ADC和FPGA之間LVDS接口設(shè)計(jì)需要考慮的因素

    本文描述了ADC和FPGA之間LVDS接口設(shè)計(jì)需要考慮的因素,包括LVDS數(shù)據(jù)標(biāo)準(zhǔn)、LVDS接口數(shù)據(jù)時(shí)序違例解決方法以及硬件設(shè)計(jì)要點(diǎn)。
    的頭像 發(fā)表于 07-29 10:01 ?5648次閱讀
    ADC和FPGA之間LVDS接口設(shè)計(jì)需要<b class='flag-5'>考慮</b>的因素

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

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

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

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

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

    三相變壓器的主要組成部分包括以下幾個(gè)關(guān)鍵部分:
    的頭像 發(fā)表于 05-20 13:35 ?1626次閱讀
    三相變壓器主要組成部分有哪些
    平舆县| 屏南县| 墨竹工卡县| 吕梁市| 象山县| 上杭县| 宿松县| 陵川县| 玉溪市| 铜鼓县| 松溪县| 巴林左旗| 讷河市| 拜城县| 水城县| 翁源县| 汉沽区| 揭西县| 深州市| 上蔡县| 武强县| 漳浦县| 荔波县| 德惠市| 仙桃市| 会宁县| 江孜县| 江都市| 岳阳县| 静宁县| 册亨县| 玉龙| 伊吾县| 霍邱县| 高邮市| 曲阳县| 崇文区| 丰都县| 井冈山市| 哈巴河县| 惠安县|