天天看點

【LiteOS】LiteOS消息隊列-實戰

目錄

前言

連結

參考

筆錄草稿

建立測試任務部分源碼

LiteOS源碼連結

常見問題

華為開發者社群

華為LiteOS官方教程

我的gitee-LiteOS-mcu

李柱明部落格:https://www.cnblogs.com/lizhuming/

本文連結:https://www.cnblogs.com/lizhuming/p/13944550.html

上面連結

最近工作有點忙,遠嗎閱讀推遲了哈哈

采用傳位址方式

其實這些元件的應用是很簡單的,沒太在意,很快就搭建好看見,準備測試并看源碼,

但是,今天下午卻花了兩小時,僅僅為了測試非拷貝方式通信失敗問題

bug就是我在函數裡建立一個局部存放消息内容的緩沖區,采用函數 <code>LOS_QueueWrite</code> 發送出去

接收時卻出現各種問題,很明顯就是位址錯誤,但是我一丢丢都沒想起消息内容被改寫的注意點,唉

采用位址方式時,必須保該位址内容沒有被修改,且不推薦使用局部變量

本任務用于 LiteOS 消息隊列測試

步驟

建立任務相關值及函數

在 <code>LssAppConfig.h</code> 中添加

任務優先級宏 <code>lssConfigvMsgQueueTaskPRIO (5)</code>

任務堆棧宏 <code>lssConfigvMsgQueueTaskSIZE 512u</code>

任務初始化完成枚舉 <code>evMsgQueueTaskNum = 0x0D,</code>

消息隊列外部句柄 <code>extern UINT32 MsgQueueTask_Handle;</code>

在 <code>main.c</code> 中添加

添加任務頭檔案 <code>#include "MsgQueueAppTask.h"</code>

添加句柄

任務句柄 <code>UINT32 MsgQueueTask_Handle = NULL;</code>

消息隊列測試句柄 <code>UINT32 TestAQue_Handle = NULL;</code>

建立消息隊列任務函數

在啟動任務中

添加 <code>uwRet = Creat_vMsgQueue_Task();</code>,以表示建立該任務

添加 <code>uwRet = LOS_QueueCreate("Msg Queue", 20, &amp;TestAQue_Handle, 0, 10);</code> , 以表示建立消息

建立任務檔案 <code>MsgQueueTask.c</code> 和 <code>MsgQueueTask.h</code>

主要用于消息隊列的業務測試

編寫任務函數 <code>void vMsgQueueTask( void )</code>

消息隊列測試任務源檔案

消息隊列測試任務頭檔案

在 <code>IPCApp.c</code> 檔案中添加兩個測試函數(架構需要)

<code>void IPCAppMsgQueueA(msgIpc_t *msg)</code> 函數

就是消息的發送端

隊列測試函數A

<code>void IPCAppMsgQueueB(msgIpc_t *msg)</code> 函數

隊列測試函數B

頭檔案 <code>PCApp.h</code> 也要做外置函數處理

在 <code>IPCCoreTask.c</code> 檔案中 <code>void msgDecode(msgIpc_t * msg)</code> 函數中添加兩條處理指令(架構需要)

<code>$QA#</code>

<code>$QB#</code>

指令處理添加部分源碼

繼續閱讀