在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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ù)分包以及相關(guān)技巧

嵌入式情報(bào)局 ? 來(lái)源:最后一個(gè)bug ? 2023-01-06 14:29 ? 次閱讀

前些天跟大家解釋了如下代碼:

		

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)一步泛化。

只要是類(lèi)似分組的處理都可以使用該算法

比如內(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)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5094

    文章

    19178

    瀏覽量

    307732
  • ZigBee
    +關(guān)注

    關(guān)注

    158

    文章

    2271

    瀏覽量

    243360
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137739

原文標(biāo)題:嵌入式數(shù)據(jù)分包以及相關(guān)技巧

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式主板的概述與發(fā)展

    隨著科技的迅猛發(fā)展,嵌入式系統(tǒng)在現(xiàn)代電子產(chǎn)品中扮演著越來(lái)越重要的角色。嵌入式主板作為嵌入式系統(tǒng)的核心組件之一,承擔(dān)著控制、處理和通訊等多種功能。本文將對(duì)嵌入式主板的基本概念、構(gòu)成部分、
    的頭像 發(fā)表于 01-13 16:30 ?318次閱讀
    <b class='flag-5'>嵌入式</b>主板的概述與發(fā)展

    新手怎么學(xué)嵌入式?

    基本的概念。嵌入式系統(tǒng)是一種將計(jì)算機(jī)技術(shù)嵌入到特定設(shè)備中的系統(tǒng),它通常具有特定的功能和有限的資源。你需要學(xué)習(xí)一些計(jì)算機(jī)基礎(chǔ)知識(shí),如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計(jì)算機(jī)組成原理等。這些知識(shí)將幫助你理解嵌入
    發(fā)表于 12-12 10:51

    什么是嵌入式?一文讀懂嵌入式主板

    在現(xiàn)代科技浪潮中,嵌入式技術(shù)已成為支撐各種智能設(shè)備和系統(tǒng)運(yùn)行的核心力量。那么,究竟什么是嵌入式嵌入式系統(tǒng),顧名思義,是將計(jì)算機(jī)的硬件和軟件嵌入到某種設(shè)備或系統(tǒng)中,以實(shí)現(xiàn)特定功能的計(jì)算
    的頭像 發(fā)表于 10-16 10:14 ?1594次閱讀

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據(jù)處理的計(jì)算機(jī)硬件,其設(shè)計(jì)旨在嵌入特定設(shè)備中執(zhí)行專(zhuān)門(mén)任務(wù)。嵌入式主板如同是設(shè)備
    的頭像 發(fā)表于 09-30 10:05 ?985次閱讀

    嵌入式常用數(shù)據(jù)結(jié)構(gòu)有哪些

    嵌入式編程中,數(shù)據(jù)結(jié)構(gòu)的選擇和使用對(duì)于程序的性能、內(nèi)存管理以及開(kāi)發(fā)效率都具有重要影響。嵌入式系統(tǒng)由于資源受限(如處理器速度、內(nèi)存大小等),因此對(duì)數(shù)
    的頭像 發(fā)表于 09-02 15:25 ?610次閱讀

    嵌入式系統(tǒng)是什么?

    含軟件運(yùn)行環(huán)境以及操作系統(tǒng),硬件部分包含信號(hào)處理器、存儲(chǔ)器以及通信模塊等多方面內(nèi)容。與傳統(tǒng)的計(jì)算機(jī)系統(tǒng)相比,嵌入式系統(tǒng)與之相差很大,它并不能實(shí)現(xiàn)大容量的存儲(chǔ)功能,軟件部分則以API接口
    的頭像 發(fā)表于 08-29 16:26 ?494次閱讀

    嵌入式開(kāi)發(fā)前景怎么樣?

    嵌入式開(kāi)發(fā)前景非常廣闊,這主要得益于物聯(lián)網(wǎng)、人工智能、大數(shù)據(jù)等技術(shù)的快速發(fā)展,以及嵌入式系統(tǒng)在各個(gè)領(lǐng)域的廣泛應(yīng)用。以下是對(duì)嵌入式開(kāi)發(fā)前景的詳
    的頭像 發(fā)表于 07-10 09:00 ?2944次閱讀
    <b class='flag-5'>嵌入式</b>開(kāi)發(fā)前景怎么樣?

    如何提升嵌入式編程能力?

    、SPI、CAN、WIFI、MQTT等多種通信協(xié)議。 4. 使用開(kāi)發(fā)工具:熟練掌握嵌入式開(kāi)發(fā)工具,如編譯器、調(diào)試器、仿真器和實(shí)時(shí)操作系統(tǒng)(RTOS)。 5. 閱讀數(shù)據(jù)手冊(cè):仔細(xì)閱讀你所使用的微控制器或
    發(fā)表于 06-21 10:01

    嵌入式系統(tǒng)軟硬件基礎(chǔ)知識(shí)大全

    兩部分組成的。硬件部分包括處理器、存儲(chǔ)器、輸入輸出等,是嵌入式系統(tǒng)實(shí)現(xiàn)功能的基礎(chǔ)。軟件部分則包括操作系統(tǒng)、驅(qū)動(dòng)程序、應(yīng)用程序等,負(fù)責(zé)控制硬件組件的工作和實(shí)現(xiàn)各種功能。嵌入系統(tǒng)的硬件和軟件是相互依存、相互
    發(fā)表于 05-09 14:12

    嵌入式系統(tǒng)的外設(shè)器件選擇

    ,都可視系統(tǒng)的實(shí)際需求來(lái)進(jìn)行選擇。本文將為您介紹上述外設(shè)器件的類(lèi)型與選擇的考慮要素。 存儲(chǔ)器的種類(lèi)眾多且特性不同 存儲(chǔ)器 在嵌入式系統(tǒng)中,[存儲(chǔ)器]是一個(gè)關(guān)鍵的器件,它用于存儲(chǔ)程序代碼、數(shù)據(jù)以及系統(tǒng)執(zhí)行所需的其他信息。除了微控
    的頭像 發(fā)表于 05-05 09:38 ?989次閱讀
    <b class='flag-5'>嵌入式</b>系統(tǒng)的外設(shè)器件選擇

    嵌入式主板,你了解多少?

    本文中,我們將討論什么是嵌入式主板、它的組件以及它在嵌入式系統(tǒng)中的功能。 嵌入式主板的組件 嵌入式主板由多個(gè)關(guān)鍵部件組成,每個(gè)部件對(duì)其整體功
    的頭像 發(fā)表于 04-17 15:11 ?1679次閱讀

    嵌入式fpga是什么意思

    嵌入式FPGA是指將FPGA技術(shù)集成到嵌入式系統(tǒng)中的一種解決方案。嵌入式系統(tǒng)是一種為特定應(yīng)用而設(shè)計(jì)的計(jì)算機(jī)系統(tǒng),它通常包括處理器、內(nèi)存、外設(shè)接口等組件,并且被嵌入到更大的設(shè)備或系統(tǒng)中,
    的頭像 發(fā)表于 03-15 14:29 ?1385次閱讀

    fpga是嵌入式

    FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)不是嵌入式系統(tǒng),但FPGA在嵌入式系統(tǒng)中有著重要的應(yīng)用。
    的頭像 發(fā)表于 03-14 17:19 ?2535次閱讀

    嵌入式軟件設(shè)計(jì)的原則分享

    嵌入式軟件開(kāi)發(fā)如果具有更好的閱讀性、擴(kuò)展性以及維護(hù)性,就需要考慮很多因素。今天給大家分享幾個(gè)嵌入式軟件設(shè)計(jì)的原則。
    發(fā)表于 02-25 10:54 ?751次閱讀
    <b class='flag-5'>嵌入式</b>軟件設(shè)計(jì)的原則分享

    嵌入式軟件開(kāi)發(fā)應(yīng)該掌握哪些知識(shí)?

    掌握的知識(shí) 1.基礎(chǔ)知識(shí) 1.1 c/c++編程語(yǔ)言和數(shù)據(jù)結(jié)構(gòu) C/C++ 是嵌入式系統(tǒng)中常用的編程語(yǔ)言,因?yàn)樗鼈兲峁┝酥苯釉L問(wèn)硬件的能力。通過(guò)使用特定的編譯器和調(diào)用硬件相關(guān)的接口,可以實(shí)現(xiàn)對(duì)各種外設(shè)
    發(fā)表于 02-19 11:23
    主站蜘蛛池模板: 欧美51| 中文免费观看视频网站 | 韩国免费特一级毛片 | 十三以下岁女子毛片免费播放 | 天天操夜 | 丁香婷婷久久 | 国产重口老太和小伙乱视频 | 22eee在线播放成人免费视频 | 人人免费操 | 免费又爽又黄的禁片1000部 | 亚洲国产色婷婷精品综合在线观看 | 亚洲第一色图 | 在线天堂中文有限公司 | 国产成人影视 | 欧美性xxxx交 | 国产视频一区二 | 涩色影院 | 久久久久九九精品影院 | 亚洲香蕉影视在线播放 | 亚洲国产成人精品女人久久久 | 国产性老妇女做爰在线 | 香蕉婷婷| 亚洲黄色一区二区 | 成人影院久久久久久影院 | 四虎国产成人亚洲精品 | 亚洲欧美人成网站综合在线 | 老司机狠狠k免费毛片 | 国产午夜在线观看视频 | 操的好爽视频 | 九九99久久精品午夜剧场免费 | 特级片毛片 | 开心激情五月婷婷 | 国产片一级aaa毛片视频 | 永久免费mv网站入口 | 717影院理论午夜伦不卡久久 | 亚洲成人激情片 | 91成人免费观看 | 99精品国产高清自在线看超 | 性网站在线观看 | 四虎最新免费观看网址 | 五月情网 |