色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

嵌入式數據分包以及相關技巧

嵌入式情報局 ? 來源:最后一個bug ? 2023-01-06 14:29 ? 次閱讀

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

		

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個字節的數據,該分配幾個扇區?

我相信你已經有答案了~

審核編輯 :李倩


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

    關注

    5090

    文章

    19176

    瀏覽量

    306946
  • ZigBee
    +關注

    關注

    158

    文章

    2271

    瀏覽量

    243177
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137453

原文標題:嵌入式數據分包以及相關技巧

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

收藏 人收藏

    評論

    相關推薦

    嵌入式主板的概述與發展

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

    新手怎么學嵌入式?

    基本的概念。嵌入式系統是一種將計算機技術嵌入到特定設備中的系統,它通常具有特定的功能和有限的資源。你需要學習一些計算機基礎知識,如數據結構、操作系統、計算機組成原理等。這些知識將幫助你理解嵌入
    發表于 12-12 10:51

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

    在現代科技浪潮中,嵌入式技術已成為支撐各種智能設備和系統運行的核心力量。那么,究竟什么是嵌入式?嵌入式系統,顧名思義,是將計算機的硬件和軟件嵌入到某種設備或系統中,以實現特定功能的計算
    的頭像 發表于 10-16 10:14 ?1360次閱讀

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

    嵌入式主板,通常被稱為嵌入式系統的核心組件,是一種用于控制和數據處理的計算機硬件,其設計旨在嵌入特定設備中執行專門任務。嵌入式主板如同是設備
    的頭像 發表于 09-30 10:05 ?778次閱讀

    嵌入式常用數據結構有哪些

    嵌入式編程中,數據結構的選擇和使用對于程序的性能、內存管理以及開發效率都具有重要影響。嵌入式系統由于資源受限(如處理器速度、內存大小等),因此對
    的頭像 發表于 09-02 15:25 ?576次閱讀

    嵌入式系統是什么?

    含軟件運行環境以及操作系統,硬件部分包含信號處理器、存儲器以及通信模塊等多方面內容。與傳統的計算機系統相比,嵌入式系統與之相差很大,它并不能實現大容量的存儲功能,軟件部分則以API接口
    的頭像 發表于 08-29 16:26 ?455次閱讀

    嵌入式開發前景怎么樣?

    嵌入式開發前景非常廣闊,這主要得益于物聯網、人工智能、大數據等技術的快速發展,以及嵌入式系統在各個領域的廣泛應用。以下是對嵌入式開發前景的詳
    的頭像 發表于 07-10 09:00 ?2856次閱讀
    <b class='flag-5'>嵌入式</b>開發前景怎么樣?

    嵌入式系統軟硬件基礎知識大全

    兩部分組成的。硬件部分包括處理器、存儲器、輸入輸出等,是嵌入式系統實現功能的基礎。軟件部分則包括操作系統、驅動程序、應用程序等,負責控制硬件組件的工作和實現各種功能。嵌入系統的硬件和軟件是相互依存、相互
    發表于 05-09 14:12

    嵌入式系統的外設器件選擇

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

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

    本文中,我們將討論什么是嵌入式主板、它的組件以及它在嵌入式系統中的功能。 嵌入式主板的組件 嵌入式主板由多個關鍵部件組成,每個部件對其整體功
    的頭像 發表于 04-17 15:11 ?1588次閱讀

    嵌入式fpga是什么意思

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

    fpga是嵌入式

    FPGA(現場可編程門陣列)不是嵌入式系統,但FPGA在嵌入式系統中有著重要的應用。
    的頭像 發表于 03-14 17:19 ?2462次閱讀

    嵌入式軟件設計的原則分享

    嵌入式軟件開發如果具有更好的閱讀性、擴展性以及維護性,就需要考慮很多因素。今天給大家分享幾個嵌入式軟件設計的原則。
    發表于 02-25 10:54 ?740次閱讀
    <b class='flag-5'>嵌入式</b>軟件設計的原則分享

    嵌入式軟件開發應該掌握哪些知識?

    掌握的知識 1.基礎知識 1.1 c/c++編程語言和數據結構 C/C++ 是嵌入式系統中常用的編程語言,因為它們提供了直接訪問硬件的能力。通過使用特定的編譯器和調用硬件相關的接口,可以實現對各種外設
    發表于 02-19 11:23

    嵌入式學習步驟

    開發。 嵌入式學習步驟總結如下: (1).確定目標平臺:選擇適合您要開發的嵌入式系統的硬件平臺。這取決于您要控制的設備以及您需要執行的任務。 (2).選擇編程語言:嵌入式系統通常使用C
    發表于 02-02 15:24
    主站蜘蛛池模板: www.伊人| 超碰在线97av视频免费 | 哒哒哒高清视频在线观看 | 99er热精品视频国产免费 | japanese幼儿videos| 国产色播视频在线观看 | 日本边添边摸边做边爱边 | 女人张腿让男人桶免费 | 在教室做啊好大用力 | 男女亲吻摸下面吃奶视频 | 伊人网青青草 | 乱色欧美激惰 | 久久精品国产福利电影网 | 肉欲横流(NP高H) | 成人区精品一区二区不卡AV免费 | 一个人的HD高清在线观看 | 午夜国产精品视频在线 | 神电影院午夜dy888我不卡 | 熟妇久久无码人妻AV蜜桃 | 蜜芽手机在线观看 | 在线亚洲专区中文字幕 | 久久国产成人午夜AV影院无码 | 国产午夜精品美女免费大片 | 俄罗斯性xxxx | 国产精品人妻久久无码不卡 | 性盈盈剧场 | 国产精品嫩草影视在线观看 | 第一福利视频网站在线 | 少妇伦子伦情品无吗 | 久草精品视频 | 好吊妞国产欧美日韩视频 | 香蕉 在线播放 | 香蕉久久一区二区三区啪啪 | 久久精品麻豆国产天美传媒果冻 | 人人啪日日观看在线 | 日本无码人妻丰满熟妇5G影院 | 精精国产www视频在线观看免费 | 亚州笫一色惰网站 | 国产三级视频在线 | 能看的黄页最新网站 | 国产 日韩 欧美 高清 亚洲 |