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

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

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

3天內不再提示

詳細了解隊列的特點及用處

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-05-31 15:25 ? 次閱讀

隊列的特點:

先進先出,隊列是一種操作受限的線性表,其限制條件為允許在表的一端進行插入,而在表的另一端進行刪除。插入的一端叫做隊尾,刪除的一端叫做隊頭。向隊列中插入新元素的行為稱為進隊,從隊列中刪除元素的行為稱為出隊。一般用法在隊頭插入,在隊尾刪除。

隊列終究它就是個buf,buf就是存東西的,保存不丟失,可以理解為在buf上封裝了一些操作。

隊列的用處:

1、用于任務間通信,尤其對于單任務系統,多個任務都操作一個隊列,比如,A任務往隊列里扔數據,B任務負責檢查隊列,只要有數據就進行處理,起到了兩個任務通信的效果,同樣可以把這個數據理解為消息,A任務給B任務發消息,B任務根據不同的消息(數據)做不同的處理。

2、緩沖數據。最常見的就是串口接收數據,搞一個環形buf隊列,收到數據就放到這個隊列中,當然這個buf肯定是有長度的,不能一直存儲數據。正常用法下,得及時讀取走,這樣就能一直接收數據不丟失。

隊列的幾個基本的使用包括:

  1. 隊列的創建;
  2. 隊列的添加元素,刪除元素,提取元素等對隊列的操作;

隊列的創建:首先定義一個隊列的大小,這里直接定義為int型數組,最大存儲6個元素。定義一個結構體存放隊列的信息,包括數組的指針,用于后續對數組的操作,定義好結構體后對結構體進行初始化

int queuebuffer[6]={0};typedef struct _Tag_My_Queue_{   int *buffer;   unsigned char In;   unsigned char Out;   int queueSize;}my_queue;void queueInit(my_queue *queue,int *buffer,int bufferSize){   queue->buffer = buffer;   queue->In = 0;   queue->Out = 0;   queue->queueSize = bufferSize;}

隊列空間 與隊列數據數量的函數如下:

int queue_space(my_queue *queue){    int size =queue->queueSize;    int num = queue->Out;    while(num != queue->In)    {        size--;        num = (num + 1)%queue->queueSize;    }    return size - 1;}//queue data numbersint queue_deep(my_queue *queue){    int size = 0;    int num = queue->Out;    while(num != queue->In)    {        size++;        num = (num + 1)%queue->queueSize;    }    return size;}

如果要對隊列增加和刪除元素要進行隊列的相關操作。定義函數如下:

int addDataToQueue(my_queue *queue,int data){   if(queue_full(queue))   {       printf("queue already full!!!\n");       return 0;   }   queue->buffer[queue->In] = data;     queue->In = (queue->In + 1) % queue->queueSize;   return 1;}int deleteDataFromQueue(my_queue *queue,int *data){   if(queue_empty(queue))   {       printf("queue already empty!!!\n");       return 0;   }   *data = queue->buffer[queue->Out];   queue->Out = (queue->Out + 1) % queue->queueSize;   return 1;}

隊列生成后要進行隊列的元素判斷,隊列是否為空,或者是否隊列已滿,定義函數如下:

int addDataToQueue(my_queue *queue,int data){   if(queue_full(queue))   {       printf("queue already full!!!\n");       return 0;   }   queue->buffer[queue->In] = data;     queue->In = (queue->In + 1) % queue->queueSize;   return 1;}int deleteDataFromQueue(my_queue *queue,int *data){   if(queue_empty(queue))   {       printf("queue already empty!!!\n");       return 0;   }   *data = queue->buffer[queue->Out];   queue->Out = (queue->Out + 1) % queue->queueSize;   return 1;}

下面就對隊列 的數據進行相關的操作,包括增加數據入隊列,數據出隊列等相關的操做,運行函數觀察運行起來的狀態。

void main(){   my_queue testqueue;   int data;   queueInit(&testqueue,queuebuffer,sizeof(queuebuffer)/sizeof(queuebuffer[0]));   addDataToQueue(&testqueue,55);   addDataToQueue(&testqueue,3);   addDataToQueue(&testqueue,2);   addDataToQueue(&testqueue,33);   addDataToQueue(&testqueue,6);printf("queue data is %d\r\n",queue_print(&testqueue));   printf("---queue deep:%d\n",queue_deep(&testqueue));   printf("---queue space:%d\n",queue_space(&testqueue));   deleteDataFromQueue(&testqueue,&data);   printf("data:%d\n",data);   deleteDataFromQueue(&testqueue,&data);   printf("data:%d\n",data);   deleteDataFromQueue(&testqueue,&data);   printf("data:%d\n",data);   deleteDataFromQueue(&testqueue,&data);   printf("data:%d\n",data);   printf("---queue deep:%d\n",queue_deep(&testqueue));   printf("---queue space:%d\n",queue_space(&testqueue));   deleteDataFromQueue(&testqueue,&data);   printf("data:%d\n",data);   addDataToQueue(&testqueue,45);   addDataToQueue(&testqueue,22);   addDataToQueue(&testqueue,33);   deleteDataFromQueue(&testqueue,&data);   printf("data:%d\n",data);   printf("data:%d\n",deleteDataFromQueue(&testqueue,&data));   printf("---queue deep:%d\n",queue_deep(&testqueue));   printf("---queue space:%d\n",queue_space(&testqueue));   queue_print(&testqueue);   printf("In:%d,Out:%d\n",testqueue.In,testqueue.Out);while(1);}

運行結果如下圖所示:

poYBAGKUgcmAfgcpAABhQIfmPK0474.png運行結果

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

    關注

    8

    文章

    7134

    瀏覽量

    89392
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62875
  • 隊列
    +關注

    關注

    1

    文章

    46

    瀏覽量

    10923
收藏 人收藏

    評論

    相關推薦

    Labview Queue State Machine(隊列狀態機)

    本帖最后由 eehome 于 2013-1-5 10:02 編輯 下面是一個Sample,想要詳細了解,請回帖,我們一起學習……
    發表于 07-06 16:16

    用VDK+BF537開發產品中,想詳細了解一下VDK中事件、事件bit、信號量的使用方法,以及如何寫自己的device drivers

    用VDK+BF537開發產品中,想詳細了解一下VDK中事件、事件bit、信號量的使用方法,以及如何寫自己的device drivers。請問哪有針對上述問題的資料下載?
    發表于 12-06 09:19

    請大神通俗易懂的描述一下隊列以及狀態機用處和用法

    一直沒太搞明白隊列用處和用法,請問是控制流程使用的嗎?我有一個設備需要進行1,2,3,4,5個步驟需要執行,但是執行哪幾個有我選定,這個時候就可以用隊列,狀態機是吧?具體怎么用有人能介紹一下嗎???
    發表于 12-24 13:42

    關于藍牙模塊基礎知識點介紹的太詳細了

    關于藍牙模塊基礎知識點介紹的太詳細了
    發表于 10-08 06:56

    詳細了解下ups的相關計算

    關于ups方面的計算有很多,ups無論是接空開,還是連接電纜,以及選擇電池,都可能需要計算它的電流或功率等,那么今天我們來詳細了解下ups的相關計算。一、UPS電源及電流一、高頻ups與工頻ups
    發表于 11-16 09:08

    嵌入式軟件中的隊列有何特點

    數據結構之隊列篇1 隊列特點及在嵌入式軟件中的應用隊列(queue)是一個簡單線性表,它是一個允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
    發表于 12-21 07:28

    詳細了解一下STM32F1的具體電路參數

    最近筆者在使用STM32時,需要詳細了解一下F1的具體電路參數。于是查看其官方數據手冊,結果記錄如下。絕對最大額度值一般工作條件表中的FT指5V 耐壓??梢栽谝_定義表格中看到。I/O端口特性(邏輯電平)在最后一個表格中還可以看到STMF103芯片內部的上/下拉電阻的阻值為40k。...
    發表于 01-18 07:07

    通過 iftop、 nethogs 和 vnstat 詳細了解你的網絡連接狀態

    通過 iftop、 nethogs 和 vnstat 詳細了解你的網絡連接狀態。
    的頭像 發表于 01-27 21:10 ?2.1w次閱讀
    通過 iftop、 nethogs 和 vnstat <b class='flag-5'>詳細了解</b>你的網絡連接狀態

    TI官網的中文詳細概述帶你了解TI官網用處

    本文的主要內容介紹的是TI的官網中文詳細概述帶你了解TI官網用處
    發表于 04-23 15:39 ?43次下載
    TI官網的中文<b class='flag-5'>詳細</b>概述帶你<b class='flag-5'>了解</b>TI官網<b class='flag-5'>用處</b>

    什么是優先隊列?漫畫形式帶你詳細了解優先隊列

    這一次,我們來講一講二叉堆的另外一個應用:優先隊列
    的頭像 發表于 10-03 20:10 ?8099次閱讀

    詳細了解卡爾曼濾波器

    在這篇文章的結尾,您將對KF的工作原理,其背后的想法,為什么需要多個變體以及最常見的變體有一個直觀而詳細了解。
    的頭像 發表于 05-03 18:31 ?2930次閱讀
    <b class='flag-5'>詳細了解</b>卡爾曼濾波器

    一文詳細了解OpenHarmony新圖形框架

    3月30日,OpenHarmony v3.1 Release版本正式發布了。此版本為大家帶來了全新的圖形框架,實現了UI框架顯示、多窗口、流暢動畫等基礎能力,夯實了OpenHarmony系統能力基座。下面就帶大家詳細了解新圖形框架。
    的頭像 發表于 04-27 13:21 ?2275次閱讀
    一文<b class='flag-5'>詳細了解</b>OpenHarmony新圖形框架

    帶您一起詳細了解IEEE802.3bt(PoE++)的有關特點

    Hqst華強盛(盈盛電子)導讀:帶您一起詳細了解IEEE802.3bt(PoE++)的有關特點,讓我們對IEEE802.3bt(PoE++)協議有更具體的了解
    的頭像 發表于 01-04 11:26 ?2330次閱讀
    帶您一起<b class='flag-5'>詳細了解</b>IEEE802.3bt(PoE++)的有關<b class='flag-5'>特點</b>

    一文帶你詳細了解工業電腦

    扇設計、承受振動和惡劣環境的能力、輕松配置、全面的I/O選項、延長生命周期、耐用的組件。了解如何為您的應用選擇工業電腦對提高設施的生產力和效率至關重要。詳細了解
    的頭像 發表于 06-12 14:24 ?464次閱讀
    一文帶你<b class='flag-5'>詳細了解</b>工業電腦

    嵌入式環形隊列與消息隊列的實現原理

    嵌入式環形隊列,也稱為環形緩沖區或循環隊列,是一種先進先出(FIFO)的數據結構,用于在固定大小的存儲區域中高效地存儲和訪問數據。其主要特點包括固定大小的數組和兩個指針(頭指針和尾指針),分別指向
    的頭像 發表于 09-02 15:29 ?628次閱讀
    主站蜘蛛池模板: 亚洲精品成人无码A片在线 亚洲精品成人久久久影院 亚洲精品成人a在线观看 | 亚洲欧美无码2017在线 | 竹菊精品久久久久久久99蜜桃 | 色多多旧版污污破解版 | 被男按摩师添的好爽在线直播 | 国产精品人成视频免费999 | 国产精品人妻无码久久久蜜桃 | 国精产品一区二区三区 | 欧美日韩国产高清综合二区 | 玩50岁四川熟女大白屁股直播 | 久久午夜一区二区 | 岳打开双腿开始配合日韩视频 | 扒开胸罩揉她的乳尖视频 | 一级毛片全部免 | 色多多污污在线播放免费 | 国产AV无码成人黄网站免费 | 午夜男女爽爽羞羞影院在线观看 | 亚洲看片无码免费视频 | 邻家美姨在线观看全集免费 | 最近中文字幕免费高清MV视频 | 忘忧草在线影院WWW日本二 | 老湿司午夜爽爽影院榴莲视频 | 亚洲午夜久久久精品电影院 | 99久久蜜臀亚洲AV无码精品 | tobu中国日本高清 | 边摸边吃奶玩乳尖视频 | 超熟女专门志 | 北条麻妃のレズナンパ | 性盈盈剧场 | 欧美亚洲另类丝袜自拍动漫 | 久久涩视频 | 偷尝禁果H1V1幸运的山熊 | 国产伦子沙发午休系列资源曝光 | 国产精品JIZZ在线观看A片 | 久久欧洲AV无码精品色午夜麻豆 | 97超碰免费人妻中文 | 国产亚洲日韩另类在线播放 | 韩国电影real在线观看完整版 | 国产精品99AV在线观看 | 伦理片a在线线2 | jizzjizz丝袜|