日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式大雜燴
[導(dǎo)讀]關(guān)注「嵌入式大雜燴」,選擇「星標(biāo)公眾號(hào)」一起進(jìn)步!1隊(duì)列類(lèi)比通信最近開(kāi)啟了一個(gè)新的項(xiàng)目,與以往的產(chǎn)品有點(diǎn)差異,存在一些技術(shù)盲區(qū)和難點(diǎn),所以大部分時(shí)間都在查閱資料、仿真、交流等等,有時(shí)候吃飯都在思考設(shè)計(jì)上的一些問(wèn)題~對(duì)于研發(fā)人員而言,能夠接手一個(gè)新的綜合性項(xiàng)目,不僅僅能夠在其中吸收...


關(guān)注「嵌入式大雜燴」,選擇「星標(biāo)公眾號(hào)」一起進(jìn)步!

1

隊(duì)列類(lèi)比通信

最近開(kāi)啟了一個(gè)新的項(xiàng)目,與以往的產(chǎn)品有點(diǎn)差異,存在一些技術(shù)盲區(qū)和難點(diǎn),所以大部分時(shí)間都在查閱資料、仿真、交流等等,有時(shí)候吃飯都在思考設(shè)計(jì)上的一些問(wèn)題~對(duì)于研發(fā)人員而言,能夠接手一個(gè)新的綜合性項(xiàng)目,不僅僅能夠在其中吸收到新的技術(shù)和思路,也可以反過(guò)來(lái)思考老項(xiàng)目的方案和設(shè)計(jì),最終達(dá)到技術(shù)上的整體提升。所以一個(gè)字"忙",今天好不容易抽出了一些時(shí)間,跟大家分享一個(gè)好玩的東西-“?隊(duì)列?”~隊(duì)列還要講嗎?不就是一種FIFO的數(shù)據(jù)結(jié)構(gòu)嗎?你說(shuō)得很對(duì),不過(guò)今天不單單講隊(duì)列,如下圖所示:可以看出隊(duì)列主要有兩個(gè)功能:?1)用來(lái)轉(zhuǎn)移數(shù)據(jù);2)進(jìn)行數(shù)據(jù)緩存。類(lèi)比平時(shí)的通信過(guò)程,也主要是進(jìn)行數(shù)據(jù)轉(zhuǎn)移,當(dāng)通信的雙方可能存在處理速度、響應(yīng)上的較大差異時(shí),就需要我們構(gòu)建軟件上的數(shù)據(jù)緩存或者其他同步機(jī)制,當(dāng)然目前一些高性能的外設(shè)都存在硬件上的FIFO。這樣類(lèi)比下來(lái),平時(shí)實(shí)現(xiàn)的串口通信,IIC通信的等等通信過(guò)程,在軟件里面進(jìn)行抽象與虛擬用隊(duì)列這樣的數(shù)據(jù)結(jié)構(gòu)就再合適不過(guò)了,玩過(guò)OS的朋友都知道,OS中一般都會(huì)提供消息隊(duì)列等等這樣的通信服務(wù),也是類(lèi)似的道理~2

思路

既然我們把通信與隊(duì)列統(tǒng)一起來(lái)了,那么你還會(huì)選擇一個(gè)包一個(gè)包的直接數(shù)據(jù)處理嗎?類(lèi)似于你直接拿著一幀串口來(lái)規(guī)定其每個(gè)bit的含義一樣~有些朋友可能會(huì)說(shuō),那我把數(shù)據(jù)包定義大一點(diǎn),隊(duì)列的元素以struct_pack來(lái)作為整包入隊(duì),確實(shí)這樣也是可行的,一般大家也是這么做的。但是如果你所傳遞的數(shù)據(jù)包格式、大小等等差異較大,是不是就會(huì)存在傳遞小數(shù)據(jù)包而浪費(fèi)內(nèi)存,并且降低隊(duì)列傳遞效率的問(wèn)題呢?為了設(shè)計(jì)一個(gè)隊(duì)列支持多種格式的數(shù)據(jù)傳遞,并且能夠達(dá)到較大的節(jié)省內(nèi)存和提高效率,那么核心思想就是"化時(shí)間為空間"。思路回到通信上來(lái)~

不管什么通信過(guò)程,其實(shí)對(duì)于大多數(shù)的情況都是一個(gè)個(gè)的字節(jié)傳遞即字節(jié)流,讓通信過(guò)程變得更加有意義,無(wú)非就是承載了各種各樣的通信協(xié)議,那么不同的通信協(xié)議就展現(xiàn)出了不同的效果~

3

設(shè)計(jì)

我們來(lái)大致實(shí)現(xiàn)這個(gè)過(guò)程~
在資源緊張的MCU中一般會(huì)這樣做,使用隊(duì)列主要涉及到3個(gè)函數(shù):入隊(duì)列、出隊(duì)列以及隊(duì)列當(dāng)前大小 :

1//入隊(duì)列
2uint8_t?QueueIn(uint8_t?uByte);??
3
4//出隊(duì)列
5uint8_t?QueueOut(void);
6
7//當(dāng)前隊(duì)列大小
8uint8_t?QueueSize(void);

指定通信協(xié)議,非常的簡(jiǎn)潔,不需要考慮丟包和重發(fā)機(jī)制。數(shù)據(jù)格式定義如下 :1數(shù)據(jù)長(zhǎng)度1? ?數(shù)據(jù)區(qū)1? ?...?數(shù)據(jù)長(zhǎng)度N? ?數(shù)據(jù)區(qū)N
2
3byte1???|??byte2?~?byteX?|?...?|byteY?|?byte(Y 1)?~?byteZ

參考偽代碼:
1/*********************************************
2?*?隊(duì)列數(shù)據(jù)包定義
3?********************************************/

4typedef?struct?_tag_pack
5{
6????uint8_t?len;
7????uint8_t?dataBuff[MAX_DATA_LEN];
8}QueuePack;
9
10/*********************************************
11?*?Function:?SendPack
12?*?Description:用于發(fā)送數(shù)據(jù)包的打包入隊(duì)過(guò)程
13?*?Author:?bug菌
14?********************************************/

15uint8_t?SendPack(QueuePack?*?pQueuePack)
16{
17????uint8_t?Cnt?=?0;
18
19????//進(jìn)入臨界區(qū)--對(duì)于多任務(wù)系統(tǒng)
20????if(QueueIn(pQueuePack->len))
21????{
22????????return?false;?//queue?overflow
23????}
24
25????for(Cnt?=?0;Cnt?len;Cnt )
26????{
27????????if(QueueIn(pQueuePack->dataBuff[Cnt]))
28????????{
29????????????return?false;?//queue?overflow
30????????}
31????}
32????//出臨界區(qū)--對(duì)于多任務(wù)系統(tǒng)
33????return?return;?//queue?success
34}
35/*********************************************
36?*?Function:?RevPack
37?*?Description:由于接受隊(duì)列數(shù)據(jù)包解析過(guò)程
38?*?Author:?bug菌
39?********************************************/

40uint8_t?RevPack(QueuePack?*?pQueuePack)
41{
42????uint8_t?Cnt?=?0;
43
44????//進(jìn)入臨界區(qū)--對(duì)于多任務(wù)系統(tǒng)
45????if(QueueSize()?return?false;
46????????pQueuePack->len?=?QueueOut();
47
48????for(Cnt?=?0;Cnt?len;Cnt )
49????{
50????????if(QueueSize()?return?false;?//queue?empty
51????????pQueuePack->dataBuff[Cnt]?=?QueueOut();
52????}
53????//出臨界區(qū)--對(duì)于多任務(wù)系統(tǒng)
54????return?return;?//queue?success
55}

這樣我們就可以發(fā)送不同格式的數(shù)據(jù)包,并且在接收端進(jìn)行解析獲得最終的數(shù)據(jù)區(qū)。接受到數(shù)據(jù)區(qū)域以后,比如數(shù)據(jù)區(qū)的第一個(gè)字節(jié)表示數(shù)據(jù)包類(lèi)型,接受端即可識(shí)別對(duì)應(yīng)的數(shù)據(jù)類(lèi)型來(lái)使用~其實(shí)還有很多軟件上的處理都是類(lèi)比的處理辦法,一旦你把它們統(tǒng)一起來(lái)就非常容易了~
最后再小提一下臨界區(qū)的事,對(duì)于多任務(wù)系統(tǒng),由于不同任務(wù)的出入隊(duì)需要對(duì)打包過(guò)程進(jìn)行互斥,這樣每個(gè)包才具有完整性~最后

?? ?如果覺(jué)得本文不錯(cuò)的話,一定要記得跟bug菌點(diǎn)個(gè)再走哦~

往期干貨:

往期推薦



實(shí)用 | 10分鐘教你搭建一個(gè)嵌入式web服務(wù)器

RT-Thread和Freertos的區(qū)別?

程序如何運(yùn)行?編譯、鏈接、裝入?

串口通信 | 簡(jiǎn)單明了的基礎(chǔ)知識(shí)

一種無(wú)OS的MCU實(shí)用軟件框架


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉