ucos ii學習筆記 訊息佇列的原理及使用

2021-07-24 12:25:57 字數 2065 閱讀 1161

**:

ucos-ii學習筆記

——訊息佇列的原理及使用

created on: 2012-10-

7author: zhang bin

學習筆記

for 

ucos-ii 

pcredesigned by zhang bin

2012-

10-7

versions

:v-0.1

all rights reserved

#include

"includes.h"

#define

task_stk_size 

512 

#define

n_messages 

128 

os_stk 

starttaskstk[task_stk_size];

os_stk 

mytaskstk[task_stk_size];

os_stk 

youtaskstk[task_stk_size];

char

*s_flag; 

//該字串指示哪個任務在執行

//char *s_1; 

char

*ss; 

//存放接收到的訊息指標

char

*s100; 

//存放傳送訊息的指標

char*s;

char

*s500;

void

*msggrp[n_messages]; 

//定義訊息指標陣列

//建立訊息佇列,首先需要定義乙個指標陣列

(用於存放訊息郵箱

),然後把各個訊息資料緩衝區的首位址存入這個陣列中

//最後再呼叫函式

osqcreate()

來建立訊息佇列

int8u 

err;

int8u y=

0;os_event 

*str_q; 

//定義事件控制塊指標 佇列的事件控制塊指標 用於存放建立的訊息佇列的指標

void

mytask(

void

*data); 

void

starttask(

void

*data); 

void

youtask(

void

*data); 

void

main (

void)

void

starttask (

void

*pdata)

if(ostimeget()

>

1000

&&ostimeget()

<

1500)

if(pc_getkey(

&key) 

==true)  }

ostimedlyhmsm(0, 0, 1, 0); }}

void

mytask(

void

*pdata)}

void

youtask(

void

*pdata)}

//執行的現象說明上面分析是正確的,因為當時鐘節拍數大於

100,小於

500時,會傳送第乙個

if語句中的兩個字串

s100和s

//下面執行的任務接收到並且顯示。當時鐘節拍數大於

1000

小於1500

時,傳送第二個

if語句中的字串,下面執行的任務

//接收並顯示。當時鐘節拍數大於

1500

時,就不再傳送訊息了,下面的任務得不到訊息就無限等待下去,所以就不再顯示了

//從執行的現象不難可以看出,有時

mytask

或youtask

執行了,但是沒有得到訊息而處於等待狀態

//使用上面的方法可以很清楚地看出任務排程和執行的關係了 

mytask

和youtask

是交替執行的,因為延遲時間相等

UCOS II 訊息佇列學習一

訊息佇列通常可以應用以下兩個地方 1.儲存外部事件 外部事件由中斷收集,然後儲存到佇列。2.串列埠接收程式中的接收迴圈緩衝區,可理解為訊息佇列。使用乙個訊息佇列的步驟如下 1 建立乙個指向訊息陣列的指標和陣列的大小,該指標陣列必須申明為void型別,如下 void myarrayofmsg size...

uCOS II郵箱和訊息佇列

1 ucos ii郵箱和訊息佇列 郵箱和訊息佇列是ucos ii中任務間的通訊機制,它可以使乙個任務或者中斷服務子程式向另乙個任務傳送以指標方式定義的變數。因具體的應用有所不同,每個指標指向的資料結構變數也有所不同。兩者都基於事件控制塊os event。與郵箱相比,訊息佇列在os event基礎上加...

uc os II 分析(10) 訊息佇列

訊息佇列在任務間可以傳遞多條訊息,由3部分組成 事件控制塊 訊息佇列和訊息 oseventtype os event type q時,描述的就是訊息佇列。1.訊息指標陣列 訊息佇列的核心iushi訊息指標陣列。osqsize 陣列的長度 osqenter 已存放訊息指標的元素數目 osqstart ...