chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

嵌入式數(shù)據(jù)分包以及相關技巧

嵌入式情報局 ? 來源:最后一個bug ? 2023-01-06 14:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

		

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

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

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

1

傳輸限制

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

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

2

分包設計的考慮

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

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

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

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

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

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

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

3

計算包數(shù)問題

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

分包還不簡單?

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

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

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

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

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


		

#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的目的。

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

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

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

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

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

4

擴展

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

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

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

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

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

審核編輯 :李倩


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

    關注

    5192

    文章

    20274

    瀏覽量

    331695
  • ZigBee
    +關注

    關注

    158

    文章

    2303

    瀏覽量

    249469
  • C語言
    +關注

    關注

    183

    文章

    7642

    瀏覽量

    145116

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式驅動開發(fā),需要掌握哪些技能?

    :掌握UART、SPI、I2C等接口常見通信協(xié)議,以及如何開發(fā)和調試相應的通信代碼。 2、 編程技能扎實的編程基礎:嵌入式驅動開發(fā)的核心是軟件編程,因此至少需要掌握C語言技能。 掌握數(shù)據(jù)結構:在
    發(fā)表于 01-20 16:46

    arm嵌入式主板優(yōu)缺點

    嵌入式主板是嵌入在設備里面做控制、數(shù)據(jù)處理使用的CPU板 ,常見的有兩類,即基于X86的嵌入式主板和基于RISC的ARM 嵌入式主板。今天我
    發(fā)表于 01-08 07:08

    系統(tǒng)嵌入式的學習路線

    ,供各位嵌入式初學者參考,希望對大家有所幫助。嵌入式工程師需要掌握的內容非常廣泛,主要包括嵌入式軟件、嵌入式硬件、以及
    發(fā)表于 12-16 07:49

    CW32嵌入式軟件開發(fā)的必備知識

    一定了解,以便在特定情況下使用。 了解CW32標準庫的用法。 2 、數(shù)據(jù)結構與算法 熟悉各種數(shù)據(jù)結構,如數(shù)組、鏈表、棧、隊列等,以及常用的算法,如排序、查找、遞歸等。 能夠根據(jù)嵌入式
    發(fā)表于 11-28 07:48

    嵌入式與FPGA的區(qū)別

    ,現(xiàn)在招聘的崗位雖然越來越多,但需要本科以上理工類相關專業(yè)才行,而大廠更是要985/211的相關專業(yè)的碩士,因此fpga的門檻很高,可替代性差; 如果是嵌入式與FPGA要選一個,個人是比較建議
    發(fā)表于 11-20 07:12

    嵌入式系統(tǒng)的定義和應用領域

    都采用了嵌入式系統(tǒng)。同樣,軍事及航天類產品如四軸飛行器、雷達和作戰(zhàn)機器人也離不開嵌入式系統(tǒng)的支持。此外,家電類產品如數(shù)字電視、掃地機器人和智能家電,以及醫(yī)療電子類產品如生化分析儀和血液分析儀等,也都
    發(fā)表于 11-17 06:49

    盤點嵌入式就業(yè)所需要的技能有哪些?

    ,把握未來的職業(yè)機遇。 1.智能汽車行業(yè): - 熟悉嵌入式編程語言,如C/C++、Python等。 - 掌握嵌入式系統(tǒng)設計與開發(fā)流程,了解汽車電子控制系統(tǒng)的基本原理。 - 具備良好的數(shù)據(jù)結構和算法
    發(fā)表于 08-11 15:43

    入行嵌入式應該怎么準備?

    知識: 一、C/C++編程C/C++是嵌入式系統(tǒng)開發(fā)中最常用的編程語言。熟練掌握C/C++語言將使你能夠理解和編寫底層驅動程序、操作系統(tǒng)以及與硬件交互的代碼。對于嵌入式系統(tǒng)來說,效率和資源利用率
    發(fā)表于 08-06 10:34

    Linux嵌入式和單片機嵌入式的區(qū)別?

    : 單片機嵌入式 :開發(fā)環(huán)境相對簡單,通常使用C語言或匯編語言進行編程,開發(fā)工具包括Keil、IAR等。 Linux嵌入式 :開發(fā)環(huán)境較為復雜,除了需要掌握C語言,還需要了解Linux操作系統(tǒng)的相關知識
    發(fā)表于 06-20 09:46

    嵌入式開發(fā)入門指南:從零開始學習嵌入式

    特定功能的計算機系統(tǒng),廣泛應用于智能家居、工業(yè)控制、醫(yī)療設備、車載系統(tǒng)等領域。 2. 學習嵌入式開發(fā)的前置知識熟悉C語言編程掌握基本的數(shù)據(jù)結構與算法了解數(shù)字電路與微控制器原理熟悉Linux操作系統(tǒng)
    發(fā)表于 05-15 09:29

    嵌入式適合自學嗎?

    缺乏系統(tǒng)的規(guī)劃,而學習到一些不相關或不重要的內容。 2)缺乏實踐機會:嵌入式開發(fā)需要大量的實踐,而自學的學習者可能缺乏實際的項目練習和實踐機會。這會導致學習者在實際工作中缺乏經(jīng)驗,難以勝任嵌入式
    發(fā)表于 04-27 09:54

    飛凌嵌入式「2025嵌入式及邊緣AI技術論壇」議程公布

    4月22日,飛凌嵌入式“2025嵌入式及邊緣AI技術論壇”將在深圳舉行,論壇以“新生態(tài),智未來”為主題,旨在匯聚行業(yè)智慧,探討嵌入式技術與邊緣AI的深度融合與創(chuàng)新應用。
    的頭像 發(fā)表于 04-02 15:12 ?1203次閱讀
    飛凌<b class='flag-5'>嵌入式</b>「2025<b class='flag-5'>嵌入式</b>及邊緣AI技術論壇」議程公布

    嵌入式去哪個城市好?

    對于嵌入式技術從業(yè)者來說,選擇哪個城市發(fā)展是一個重要的決策。以下是一些建議: 一線城市 北京作為中國的首都和科技中心,北京擁有眾多頂尖的高校和研究機構,以及大量的高科技企業(yè),為嵌入式開發(fā)和應用提供了
    發(fā)表于 04-02 10:12

    如何成為嵌入式開發(fā)工程師?

    如何成為嵌入式開發(fā)工程師? 成為嵌入式開發(fā)工程師通常需要掌握一系列技能和知識,并且在實踐中不斷積累經(jīng)驗。以下是一些基本步驟和建議: 1. 基礎教育:- 獲取電子工程、計算機科學或相關領域的學位
    發(fā)表于 02-19 10:39

    嵌入式機器學習的應用特性與軟件開發(fā)環(huán)境

    設備和智能傳感器)上,這些設備通常具有有限的計算能力、存儲空間和功耗。本文將您介紹嵌入式機器學習的應用特性,以及常見的機器學習開發(fā)軟件與開發(fā)環(huán)境。 嵌入式機器學習的應用特性與優(yōu)勢 由于嵌入式
    的頭像 發(fā)表于 01-25 17:05 ?1400次閱讀
    <b class='flag-5'>嵌入式</b>機器學習的應用特性與軟件開發(fā)環(huán)境