哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(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)上層用戶(hù)協(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)載。文章觀(guā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)注

    5209

    文章

    20636

    瀏覽量

    336843
  • ZigBee
    +關(guān)注

    關(guān)注

    158

    文章

    2310

    瀏覽量

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

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146117

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    嵌入式驅(qū)動(dòng)開(kāi)發(fā),需要掌握哪些技能?

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

    什么是嵌入式應(yīng)用開(kāi)發(fā)?

    概述 所謂的嵌入式應(yīng)用開(kāi)發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā)、軟硬件綜合開(kāi)發(fā) ?嵌入式應(yīng)用開(kāi)發(fā)?是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā),包括系統(tǒng)化設(shè)計(jì)指導(dǎo)下的硬件和軟件綜合研發(fā)。
    發(fā)表于 01-12 16:13

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

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

    系統(tǒng)嵌入式的學(xué)習(xí)路線(xiàn)

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

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

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

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

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

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

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

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

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

    入行嵌入式應(yīng)該怎么準(zhǔn)備?

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

    嵌入式開(kāi)發(fā)就業(yè)還有前景嗎?

    ,嵌入式開(kāi)發(fā)的主要工作是開(kāi)發(fā)各種醫(yī)療設(shè)備和系統(tǒng),如醫(yī)療影像、醫(yī)療機(jī)器人、遠(yuǎn)程診療等。嵌入式開(kāi)發(fā)人員需要掌握相關(guān)的硬件和軟件技術(shù),如處理器、傳感器、通信技術(shù)、醫(yī)療數(shù)據(jù)處理等,同時(shí)也需要具
    發(fā)表于 07-16 10:47

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

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

    嵌入式開(kāi)發(fā)入門(mén)指南:從零開(kāi)始學(xué)習(xí)嵌入式

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

    嵌入式軟件行業(yè)增長(zhǎng)驅(qū)動(dòng)因素

    設(shè)備通信。同樣,在工業(yè)物聯(lián)網(wǎng)(IIoT)和新型智能系統(tǒng)中,嵌入式系統(tǒng)用于操作機(jī)器、收集傳感器數(shù)據(jù)和支持預(yù)測(cè)性維護(hù)以及邊緣人工智能,所有這些都需要可靠的軟件和實(shí)時(shí)決策。
    的頭像 發(fā)表于 05-09 11:26 ?930次閱讀

    飛凌嵌入式2025嵌入式及邊緣AI技術(shù)論壇圓滿(mǎn)結(jié)束

    飛凌嵌入式「2025嵌入式及邊緣AI技術(shù)論壇」在深圳深鐵皇冠假日酒店盛大舉行,此次活動(dòng)邀請(qǐng)到了200余位嵌入式技術(shù)領(lǐng)域的技術(shù)專(zhuān)家、企業(yè)代表和工程師用戶(hù),共享嵌入式及邊緣AI技術(shù)的盛宴!
    的頭像 發(fā)表于 04-28 13:57 ?4333次閱讀
    飛凌<b class='flag-5'>嵌入式</b>2025<b class='flag-5'>嵌入式</b>及邊緣AI技術(shù)論壇圓滿(mǎn)結(jié)束

    嵌入式適合自學(xué)嗎?

    缺乏系統(tǒng)的規(guī)劃,而學(xué)習(xí)到一些不相關(guān)或不重要的內(nèi)容。 2)缺乏實(shí)踐機(jī)會(huì):嵌入式開(kāi)發(fā)需要大量的實(shí)踐,而自學(xué)的學(xué)習(xí)者可能缺乏實(shí)際的項(xiàng)目練習(xí)和實(shí)踐機(jī)會(huì)。這會(huì)導(dǎo)致學(xué)習(xí)者在實(shí)際工作中缺乏經(jīng)驗(yàn),難以勝任嵌入式
    發(fā)表于 04-27 09:54
    万年县| 赞皇县| 措勤县| 岫岩| 隆化县| 南通市| 仲巴县| 太白县| 南投县| 抚宁县| 庆阳市| 察雅县| 个旧市| 钦州市| 商城县| 宁德市| 东乌珠穆沁旗| 峨眉山市| 和田县| 灵武市| 泸州市| 成武县| 繁昌县| 洪泽县| 息烽县| 黑河市| 彰化县| 静安区| 宽甸| 巢湖市| 吴桥县| 观塘区| 玛多县| 隆安县| 新绛县| 赤水市| 白沙| 邹城市| 满城县| 威信县| 包头市|