Queue參考代碼

queue.c

#include "queue.h"
#include "stdlib.h"
// 初始化循環隊列
void initializeCircularQueue(CircularQueue *cq, uint8_t *buffer, uint32_t size) {cq->front = 0;cq->rear  = 0;cq->count = 0;cq->size  = size;cq->data  = buffer;
}// 入隊操作(數組形式)
// 入隊空數組以清空隊列
uint8_t enqueueArray(CircularQueue *cq, uint8_t arr[], uint32_t size) {if(0 == arr) //丟棄數據{cq->count = 0;cq->front = cq->rear;return 0;}if ((size == 0) || (size > (cq->size-cq->count))) {return -1;}for (uint32_t i = 0; i < size; i++) {cq->data[cq->rear] = arr[i];cq->rear = (cq->rear + 1) % (cq->size);}cq->count = cq->count + size;return 0;
}// 出隊操作(數組形式)
uint8_t dequeueArray(CircularQueue *cq, uint8_t arr[], uint32_t size) {if ((cq->count < size) || (size ==0)) {         // 判斷循環隊列是否有足夠元素出隊return -1;}for (uint32_t i = 0; i < size; i++) {arr[i] = cq->data[cq->front];cq->front = (cq->front + 1) % (cq->size); // 使用循環隊列的特性}cq->count = cq->count - size;return 0;
}

queue.h

#ifndef __QUEUE_H_
#define __QUEUE_H_#include <stdint.h>typedef struct {uint8_t *data;  //front rear需要占用一個位置uint32_t size;  //保存隊列中最大容納元素個數uint32_t front;uint32_t rear;uint32_t count; //保存隊列中的元素個數
} CircularQueue;void initializeCircularQueue(CircularQueue *cq, uint8_t *buffer, uint32_t size) ;
uint8_t enqueueArray(CircularQueue *cq, uint8_t arr[], uint32_t size);
uint8_t dequeueArray(CircularQueue *cq, uint8_t arr[], uint32_t size);#endif

初始化

static uint8_t modbus_recvbuf[256] = {0};
CircularQueue modbus_queue;void modbus_init()
{initializeCircularQueue(&modbus_queue, modbus_recvbuf, sizeof(modbus_recvbuf));
}

入隊出隊

數據數組是ethernet_recvbuf,因為可能粘包半包問題所以需要隊列處理
一旦找到個整包,出隊到modbus_handlebuf中去

enqueueArray(&modbus_queue, ethernet_recvbuf, size);
dequeueArray(&modbus_queue, modbus_handlebuf, size);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93158.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過時間計算地固系到慣性系旋轉矩陣

通過時間計算地固系到慣性系旋轉矩陣 1. 引言 在航天工程和衛星導航領域&#xff0c;經常需要在地固坐標系(ECEF)和慣性坐標系(ECI)之間進行轉換。本文將詳細介紹如何根據UTC時間計算這兩個坐標系之間的旋轉矩陣&#xff0c;并提供完整的C語言實現。 2. 基本概念 2.1 坐標系定義…

【Datawhale AI 夏令營】金融文檔分析檢索增強生成系統的架構演變與方法論進展

# **金融文檔分析檢索增強生成系統的架構演變與方法論進展****第一部分&#xff1a;基礎原則和基線系統分析****第一部分&#xff1a;金融領域檢索增強生成范式的解構****第二部分&#xff1a;基線剖析&#xff1a;流水線的二分法****同步軌跡 (SimpleRAG)****異步改進 (AsyncS…

C語言相關簡單數據結構:順序表

目錄 1.順序表的概念及結構 1.1 線性表 如何理解邏輯結構和物理結構&#xff1f; 1.2 順序表分類 順序表和數組的區別&#xff1a; 順序表分類&#xff1a; 靜態順序表 動態順序表 1.3 動態順序表的實現 初始化 尾插 頭插 尾刪 頭刪 在指定位置之前插入數據 刪…

nginx配置代理服務器

Nginx 作為代理服務器時&#xff0c;主要用于反向代理&#xff08;最常用&#xff0c;轉發客戶端請求到后端服務&#xff09;或正向代理&#xff08;較少用&#xff0c;為客戶端提供訪問外部網絡的代理&#xff09;。以下是兩種場景的具體配置示例&#xff1a; 一、反向代理配置…

MySQL數據庫知識體系總結 20250813

一、數據庫的原理 1.數據庫的分類 我們可以根據數據的結構類型&#xff0c;將數據分成三類&#xff0c;分別是&#xff1a;結構化數據&#xff0c;半結構化數據&#xff0c;非結構化數據。 要點&#xff1a;對于結構化數據來講通常是先有結構再有數據。要點&#xff1a;對于半…

C++ 中構造函數參數對父對象的影響:父子控件管理機制解析

文章目錄C 中構造函數參數對父對象的影響&#xff1a;父子控件管理機制解析1. Qt 中的父對象管理機制2. 構造函數傳遞父對象的不同方式2.1. 父控件是 QWidget parent&#xff08;通用方式&#xff09;分析&#xff1a;2.2. 父控件是 Books_Client parent&#xff08;限制父控件…

直播美顏SDK開發實戰:高性能人臉美型的架構與實現

在直播行業里&#xff0c;美顏已經不再是錦上添花&#xff0c;而是標配中的標配。無論是游戲主播、帶貨達人&#xff0c;還是唱歌、跳舞的才藝主播&#xff0c;直播美顏SDK往往決定了用戶的第一印象和停留時長。尤其是高性能人臉美型技術&#xff0c;不僅能讓主播的五官更加自然…

JavaWeb(蒼穹外賣)--學習筆記18(Apache POI)

前言 本篇文章是學習B站黑馬程序員蒼穹外賣的學習筆記&#x1f4d1;。我的學習路線是Java基礎語法-JavaWeb-做項目&#xff0c;管理端的功能學習完之后&#xff0c;就進入到了用戶端微信小程序的開發&#xff0c;用戶端開發的流程大致為用戶登錄—商品瀏覽&#xff08;其中涉及…

OpenJDK 17 源碼 安全點輪詢的信號處理流程

OpenJDK 17 源碼&#xff0c;安全點輪詢的信號處理流程如下&#xff08;重點分析安全點輪詢相關部分&#xff09;&#xff1a;核心信號處理流程信號觸發&#xff1a;當線程訪問安全點輪詢內存頁時&#xff08;SafepointMechanism::is_poll_address&#xff09;&#xff0c;會觸…

InfluxDB 在工業控制系統中的數據監控案例(一)

工業控制系統數據監控的重要性**在工業領域&#xff0c;生產過程的復雜性和連續性使得數據監控成為保障生產穩定運行的關鍵環節。通過實時收集、處理和分析生產數據&#xff0c;企業能夠及時掌握設備運行狀態、產品質量信息以及生產流程的各項參數&#xff0c;從而為生產決策提…

嵌入式學習(day26)frambuffer幀緩沖

一、UI技術: User interface&#xff08;1&#xff09;framebuffer: 幀緩沖、幀緩存技術 Linux內核專門為圖形化顯示提供的一套應用程序接口。流程如下&#xff1a;1. 打開顯示設備 (/dev/fb0) 2. 獲取顯示設備相關參數&#xff08;分辨率&#xff0c;像素格式&#xff09;---》…

408每日一題筆記 41-50

答案&#xff1a;A 解析&#xff1a;CSMA/CD 協議里&#xff0c;“爭用期” 就是信號在總線上最遠兩個端點之間往返傳輸的時間&#xff0c;也叫沖突窗口&#xff0c;選 A。

【物聯網】基于樹莓派的物聯網開發【26】——樹莓派開啟串口并配置串口助手Minicom

串口配置 &#xff08;1&#xff09;打開串口&#xff0c;終端輸入命令&#xff1a; sudo raspi-config &#xff08;2&#xff09;串口設置選擇Interfacing Options→Serial port→No→Yes→ok&#xff08;3&#xff09;設置開啟&#xff0c;打開串口 &#xff08;4&#xff0…

考研/考公知識共享平臺的設計與實現-項目分享

考研/考公知識共享平臺的設計與實現-項目分享項目介紹項目摘要學生前臺用例圖管理員用例圖系統流程圖系統功能結構圖實體圖學生信息實體圖資料信息管理實體圖報考指南管理寫在最后項目介紹 使用者&#xff1a;管理員、學生前臺、學生后臺 開發技術&#xff1a;MySQLJavaSpring…

一鍵設置 NTP 時區的腳本(親測,適用于部署 K8S 的前置環境)

文章目錄一、時區和時間同步的配置命令二、完整腳本ntp_timezone_setup.sh三、使用方法3.1、創建腳本3.2、賦予執行權限3.3、運行腳本3.4、驗證一、時區和時間同步的配置命令 整理用于做時區和時間同步的配置幾條命令分別如下&#xff1a; 1?? 編輯 chrony 配置 vim /etc/…

BPMN編輯器技術實現總結AI時代的工作流編輯器

項目概述 基于 diagram.js 的 BPMN 流程設計器&#xff0c;通過依賴注入(DI)實現模塊化擴展&#xff0c;自定義模塊擴展與SVG圖形渲染。后端工作流引擎自定義統一任務調度函數&#xff0c;實現異構模型統一調用。 核心技術架構 1. diagram.js 架構基礎 核心模塊組成 Canv…

兩階段最小二乘法(2SLS)與 工具變量(IV)模型

以下是關于兩階段最小二乘法&#xff08;2SLS&#xff09;與工具變量&#xff08;IV&#xff09;模型關系的系統解析&#xff0c;結合計量經濟學理論與論文上下文進行說明&#xff1a;一、核心關系&#xff1a;2SLS是IV模型的實現方法 1. IV模型&#xff1a;解決內生性的理論框…

熬夜面膜賽道跑出的新物種

在快節奏的現代生活中&#xff0c;熬夜已成為都市人群的常態&#xff0c;深夜11點后的朋友圈總是一片“失眠”哀嚎。隨之而來的是“熬夜肌”問題的激增——暗沉、干燥、屏障受損等訴求催生了龐大的熬夜面膜市場。2025年&#xff0c;中國面膜線上規模已達484億元&#xff0c;其中…

20250813測試開發崗(涼)面

1. 自我介紹2. 你如何理解測開&#xff0c;你認為測開的工作有哪些3. 測試的時候包括哪些部分4. 就功能層面&#xff0c;你認為需要從那些部分考慮&#xff0c;形成一個完整并可執行的trace&#xff08;是這個詞吧&#xff09;5. 你了解數據庫嗎&#xff08;我說只會比較基礎的…

面向Python/C#開發者入門Java與Bukkit API

本教程將以"手持發射器箭矢機槍"功能為例&#xff0c;帶你掌握Java語言基礎和Bukkit API的核心概念&#xff0c;最終實現自主開發插件。 我們將通過剖析一個實際Java代碼文件&#xff0c;逐步解析其運作機制&#xff0c;幫助你順利將現有編程知識遷移到Java和Bukkit…