訊息佇列建立及執行,參閱安富萊電子demo
static queuehandle_t xqueue1 =
null
;static queuehandle_t xqueue2 =
null
;typedef
struct msg
msg_t;
msg_t g_tmsg;
/* 定義乙個結構體用於訊息佇列 */
static
void
vtasktaskuserif
(void
*pvparameters)
else
break
;/* k3鍵按下,向xqueue2傳送資料 */
case key_down_k3:
ptmsg->ucmessageid++
; ptmsg->uldata[0]
++;; ptmsg->usdata[0]
++;/* 使用訊息佇列實現指標變數的傳遞 */if(
xqueuesend
(xqueue2,
/* 訊息佇列控制代碼 */
(void*)
&ptmsg,
/* 傳送結構體指標變數ptmsg的位址 */
(ticktype_t)10)
!= pdpass )
else
/* 其他的鍵值不處理 */
default
:break;}
}vtaskdelay(20
);}}
static
void
vtaskled
(void
*pvparameters)
else}}
static
void
vtaskmsgpro
(void
*pvparameters)
else}}
intmain
(void
)/* 建立10個儲存指標變數的訊息佇列,由於cm3/cm4核心是32位機,乙個指標變數占用4個位元組 */
xqueue2 =
xqueuecreate(10
,sizeof
(struct msg *))
;if( xqueue2 ==0)
/* 啟動排程,開始執行任務 */
vtaskstartscheduler()
;/*
如果系統正常啟動是不會執行到這裡的,執行到這裡極有可能是用於定時器任務或者空閒任務的
heap空間不足造成建立失敗,此要加大freertosconfig.**件中定義的heap大小:
#define configtotal_heap_size ( ( size_t ) ( 17 * 1024 ) )
*/while(1
);}/* 如果程式使用到了硬體中斷請使用以下方式 */
static
void
tim1_irqhandler
(void
)static
void
tim2_irqhandler
(void
)
stm32cubemx 佇列建立及執行
以下是普通變數佇列建立和執行
注意: stm32cubemx 生成的**訊息佇列目前只能傳遞普通變數,如果傳遞結構體或者其它型別變數,最好不使用 cmsis_os.h封裝好的api
/* user code begin 4 */
void
messageqtask
(void
const
* argument)
else
osdelay
(1000);
}/* user code end 5 */
}void
startdefaulttask
(void
const
* argument)
osdelay(10
);osthreadsuspend
(defaulttaskhandle)
;//掛起任務
}/* user code end 5 */
}int
main
(void
)
3 2 2 佇列訊息和非佇列訊息
摘錄於 windows程式 第5版,珍藏版 charles.petzold 著 p60 前面提過 windows 將訊息傳送給乙個視窗,意思是說 windows 呼叫了該視窗的視窗過程。但是,乙個 windows 程式同時還具有乙個訊息迴圈使用者從訊息佇列中檢索和分發訊息,其中檢索訊息是通過呼叫 g...
訊息佇列 訊息佇列
輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...
訊息佇列 訊息佇列 kafka
kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...