一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內(nèi)不再提示

RT-Thread記錄(七、IPC機制之郵箱、消息隊列)

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-06-22 10:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

講完了線程同步的機制,我們要開始線程通訊的學習,
線程通訊中的郵箱消息隊列也屬于 RT-Thread 的IPC機制。

目錄

前言
一、郵箱
1.1 郵箱控制塊
1.2 郵箱操作
1.2.1 創(chuàng)建和刪除
1.2.2 初始化和脫離
1.2.3 發(fā)送郵件
1.2.4 接收郵件
1.3 示例(指針傳遞)
1.3.1 郵箱消息傳遞
1.3.2 郵箱個數(shù)示例
二、消息隊列
2.1 消息隊列控制塊
2.2 消息隊列操作
2.2.1 創(chuàng)建和刪除
2.2.2 初始化和脫離
2.2.3 發(fā)送消息
2.2.4 接收消息
2.3 消息隊列原理簡析
2.4 示例(消息隊列原理理解)
2.4.1 理解消息隊列原理
2.4.2 消息傳遞
結(jié)語

前言

與上篇文章的介紹的信號量、互斥量和事件集,郵箱、消息隊列同樣為 RT-Thread IPC機制。但是信號量它們屬于線程同步機制,并不能在線程之間傳遞消息,我們本文介紹的 郵箱、消息隊列就是實現(xiàn)線程間消息傳遞的機制。

相對于上一篇文章的內(nèi)容,線程通訊的學習會相對復雜些,因為涉及到消息的傳遞,消息在實際項目中的可能存在多種不同的情況,所以 郵箱和消息隊列的使用場景和方式是關鍵,尤其是消息隊列?;旧蠈嶋H項目中的所有消息類型都可以使用消息隊列的方式。消息隊列應用于串口通信我會單獨用一篇博文來說明,本文先做基礎介紹和基本示例的講解。

本 RT-Thread 專欄記錄的開發(fā)環(huán)境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)
RT-Thread記錄(二、RT-Thread內(nèi)核啟動流程 — 啟動文件和源碼分析
RT-Thread 內(nèi)核篇系列博文鏈接:
RT-Thread記錄(三、RT-Thread 線程操作函數(shù)及線程管理與FreeRTOS的比較)
RT-Thread記錄(四、RT-Thread 時鐘節(jié)拍和軟件定時器
RT-Thread記錄(五、RT-Thread 臨界區(qū)保護)
RT-Thread記錄(六、IPC機制之信號量、互斥量和事件集)

一、郵箱

RT-Thread 中的郵件是線程、中斷服務、定時器向線程發(fā)送消息的有效手段(中斷和定時器需要非阻塞方式,不能等待發(fā)送,也不能接收)。

郵箱中的每一封郵件只能容納固定的 4 字節(jié)內(nèi)容(32位內(nèi)核正好可以傳遞一個指針)。

郵箱特點 RAM空間占用少,效率較高。

RT-Thread 有點類似 FreeRTOS 的任務通知,同樣的只能傳遞4個字節(jié)內(nèi)容。
但是 FreeRTOS 的任務通知是屬于任務自己的,每個任務有且只有一個通知,
而 RT-Thread 的郵箱由郵箱控制塊統(tǒng)一管理,新建一個郵箱,可以包含多封郵件(每封4個字節(jié))。

1.1 郵箱控制塊

老規(guī)矩用源碼,解釋看注釋(使用起來也方便復制 ~ ~?。?/p>

#ifdef RT_USING_MAILBOX
/**
 * mailbox structure
 */
struct rt_mailbox
{
    struct rt_ipc_object parent;             /**< inherit from ipc_object */
    rt_ubase_t          *msg_pool;           /**< 郵箱緩沖區(qū)的開始地址  */
    rt_uint16_t          size;               /**< 郵箱緩沖區(qū)的大小      */
    rt_uint16_t          entry;              /**< 郵箱中郵件的數(shù)目 */
    rt_uint16_t          in_offset;          /**< 郵箱緩沖的入口指針 */
    rt_uint16_t          out_offset;         /**< 郵箱緩沖的出口指針 */
    rt_list_t            suspend_sender_thread;   /**< 發(fā)送線程的掛起等待隊列 */
};
typedef struct rt_mailbox *rt_mailbox_t;
#endif

1.2 郵箱操作

1.2.1 創(chuàng)建和刪除

同以前的線程那些一樣,動態(tài)的方式,先定義一個郵箱結(jié)構(gòu)體的指針變量,接收創(chuàng)建好的句柄。

創(chuàng)建郵箱:

/**
參數(shù)的含義:
1、name 		郵箱名稱
2、size			郵箱容量(就是多少封郵件,4的倍數(shù))
3、flag 		郵箱標志,它可以取如下數(shù)值: RT_IPC_FLAG_FIFO 或 RT_IPC_FLAG_PRIO
返回值:
RT_NULL 		創(chuàng)建失敗
郵箱對象的句柄 	創(chuàng)建成功 
 */
rt_mailbox_t rt_mb_create(const char *name, rt_size_t size, rt_uint8_t flag)

最后的 flag 和信號量一樣建議 RT_IPC_FLAG_PRIO

pYYBAGKyeReAI15XAABhZnlz4fA191.png

刪除郵箱:

/**
參數(shù)的含義:
mb 	郵箱對象的句柄
返回
RT_EOK 	成功
 */
rt_err_t rt_mb_delete(rt_mailbox_t mb)

1.2.2 初始化和脫離

靜態(tài)的方式,先定義一個郵箱結(jié)構(gòu)體,然后對他進行初始化。

這里要注意,還要定義一個數(shù)組,用來做郵箱的內(nèi)存空間,和靜態(tài)初始化線程一樣。

初始化郵箱:

/**
參數(shù)含義:
1、mb	 	郵箱對象的句柄,需要取自定義的結(jié)構(gòu)體地址
2、name	 	郵箱名稱
3、msgpool 	緩沖區(qū)指針(用戶自定義的數(shù)組的地址,第一個數(shù)組元素的地址)
4、size 	郵箱容量(就是數(shù)組的大小/4)
5、flag 	郵箱標志,它可以取如下數(shù)值: RT_IPC_FLAG_FIFO 或 RT_IPC_FLAG_PRIO
返回
RT_EOK 	成功
 */
rt_err_t rt_mb_init(rt_mailbox_t mb,
                    const char  *name,
                    void        *msgpool,
                    rt_size_t    size,
                    rt_uint8_t   flag)

脫離郵箱:

/**
參數(shù)的含義:
mb 	郵箱對象的句柄
返回
RT_EOK 	成功
 */
rt_err_t rt_mb_detach(rt_mailbox_t mb)

1.2.3 發(fā)送郵件

在 RT-Thread 中發(fā)送郵件分為 有無等待方式發(fā)送郵件,以及發(fā)送緊急郵件。

在我建的工程版本中,并沒有發(fā)送緊急郵件函數(shù)了,這里按照工程源碼來說明,就不介紹發(fā)送緊急郵件的函數(shù)了,在一般的 STM32 應用中,個人認為緊急郵件有沒有都沒有影響!

無等待方式適用于所有的線程和中斷,等待方式不能用于中斷中!

無等待發(fā)送郵件:

/**
參數(shù):
1、mb	 	郵箱對象的句柄
2、value 	郵件內(nèi)容
返回
RT_EOK 		發(fā)送成功
-RT_EFULL 	郵箱已經(jīng)滿了
看函數(shù)原型,其實就是把等待方式發(fā)送的時間改成了0
 */
rt_err_t rt_mb_send(rt_mailbox_t mb, rt_ubase_t value)
{
    return rt_mb_send_wait(mb, value, 0);
}

無等待發(fā)送其實就是使用等待方式發(fā)送郵件,等待時間為0。

等待方式發(fā)送郵件:

/**
參數(shù):
1、mb 		郵箱對象的句柄
2、value 	郵件內(nèi)容
3、timeout 	超時時間
返回:
RT_EOK 			發(fā)送成功
-RT_ETIMEOUT 	超時
-RT_ERROR 		失敗,返回錯誤
 */
rt_err_t rt_mb_send_wait(rt_mailbox_t mb,
                         rt_ubase_t   value,
                         rt_int32_t   timeout)

1.2.4 接收郵件

接收郵件時,除了指定接收郵件的郵箱句柄,并指定接收到的郵件存放位置(需要有一個變量來保存接收到的數(shù)據(jù))。

/**
參數(shù)含義:
1、mb 		郵箱對象的句柄,從哪個郵件控制塊取郵件
2、value 	郵件內(nèi)容,需要用一個變量保存
3、timeout 	超時時間
返回值:
RT_EOK 	接收成功
-RT_ETIMEOUT 	超時
-RT_ERROR 	失敗,返回錯誤
 */
rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout)

1.3 示例(指針傳遞)

2個示例,第一個是正常的消息傳遞,第二個是與郵箱創(chuàng)建個數(shù)有關的引導示例。

1.3.1 郵箱消息傳遞

前面說到過,郵箱中的每一封郵件只能容納固定的 4 字節(jié)內(nèi)容,但是4字節(jié)可以傳遞指針,我們分別做個簡單的演示。

示例中,我們使用兩個不同的按鍵來發(fā)送郵件,通過一個事件來接收郵件,并打印收到的郵件內(nèi)容。

按鍵key3,發(fā)送4字節(jié)的內(nèi)容,按鍵Key2,發(fā)送一個字符串指針:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

郵件創(chuàng)建:

pYYBAGKyeRiAJ8cRAAAd5J9ja8E495.png

在接收線程中,我們打印出接收到的數(shù)值:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

測試結(jié)果,兩個按鍵按下,線程不僅能收到直接傳過來的4字節(jié)數(shù)據(jù),還能通過傳遞的指針發(fā)送一個字符串:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_13,color_FFFFFF,t_70,g_se,x_16

1.3.2 郵箱個數(shù)示例

在上面的例子中,我們開始創(chuàng)建的郵箱大小就一個,我們測試下,如果沒有線程接收,是不是就會打印郵箱滿的消息,我們把線程接收郵箱代碼注釋掉,其他還是和前面測試一樣:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

我們再來改一下,使用一個按鍵測試一下這個 size 是字節(jié)呢,還是直接是郵件個數(shù),直接看圖說明:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

在靜態(tài)初始化郵件時候,我們需要注意我們開辟的空間大小,需要是4的倍數(shù),我們一般都是用數(shù)組除以4直接表示郵箱的size大小,如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_13,color_FFFFFF,t_70,g_se,x_16

RT-Thread 是通過控制塊來管理這些IPC機制,在實際測試中,為了加深對某個對象的理解,比如這里的郵箱,可以直接打印出郵箱的參數(shù)來查看當前郵箱的狀態(tài)。學會測試!??!

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

二、消息隊列

消息隊列能夠接收來自線程或中斷服務例程中不固定長度的消息,并把消息緩存在自己的內(nèi)存空間中。

消息隊列和郵箱的區(qū)別是長度并不限定在 4 個字節(jié)以內(nèi),但是如果如果把消息隊列的每條消息的最大字節(jié)規(guī)定在4個字節(jié)以內(nèi),那么消息隊列就和郵箱一樣了。

典型應用,使用串口接收不定長數(shù)據(jù)(后期會單獨有博文介紹消息隊列在串口接收上的應用)。

2.1 消息隊列控制塊

消息隊列控制塊的這些屬性,我們等會用示例來打印出來看,加深一下對這些屬性的認識。

#ifdef RT_USING_MESSAGEQUEUE
/**
 * message queue structure
 */
struct rt_messagequeue
{
    struct rt_ipc_object parent;                        /**< inherit from ipc_object */

    void                *msg_pool;                      /**< 消息隊列的開始地址 */

    rt_uint16_t          msg_size;                      /**< 每個消息長度 */
    rt_uint16_t          max_msgs;                      /**< 最大的消息數(shù)量 */

    rt_uint16_t          entry;                         /**< 已經(jīng)有的消息數(shù) */

    void                *msg_queue_head;                /**< list head 鏈表頭 */
    void                *msg_queue_tail;                /**< list tail 鏈表尾*/
    void                *msg_queue_free;                /**< 空閑消息鏈表 */

    rt_list_t            suspend_sender_thread;         /**< 掛起的發(fā)送線程 */
};
typedef struct rt_messagequeue *rt_mq_t;
#endif

2.2 消息隊列操作

2.2.1 創(chuàng)建和刪除

先定義一個郵箱結(jié)構(gòu)體的指針變量,接收創(chuàng)建好的句柄。

創(chuàng)建消息隊列:

/**
參數(shù):
1、name 		消息隊列的名稱
2、msg_size 	消息隊列中一條消息的最大長度,單位字節(jié)
3、max_msgs 	消息隊列的最大個數(shù)
4、flag 		消息隊列采用的等待方式,它可以取如下數(shù)值: RT_IPC_FLAG_FIFO 或 RT_IPC_FLAG_PRIO
返回:
RT_EOK 				發(fā)送成功
消息隊列對象的句柄 	成功
RT_NULL 			失敗
 */
rt_mq_t rt_mq_create(const char *name,
                     rt_size_t   msg_size,
                     rt_size_t   max_msgs,
                     rt_uint8_t  flag)

注意!msg_size 單位是字節(jié),在32位系統(tǒng)中 RT-Thread 默認#define RT_ALIGN_SIZE 4 ,所以如果 msg_size 不是4字節(jié)對齊,系統(tǒng)會自動補全。

比如用戶定義為9,那么系統(tǒng)會自動把消息隊列大小設置為 12,定義為1,設置為4。

還有flag的使用,依然得注意一下,和郵箱信號量等一樣,注意實時性問題。

刪除消息隊列:

/**
參數(shù)
mq 		消息隊列對象的句柄
返回
RT_EOK 	成功
 */
rt_err_t rt_mq_delete(rt_mq_t mq)

2.2.2 初始化和脫離

靜態(tài)的方式,先定義一個消息隊列結(jié)構(gòu)體,然后對他進行初始化。

初始化消息隊列:

/**
參數(shù):
1、mq 			消息隊列對象的句柄,需要取自定義的結(jié)構(gòu)體地址
2、name 		名稱
3、msgpool 		存放消息的地址
4、msg_size 	消息隊列中一條消息的最大長度,單位字節(jié)
5、pool_size 	存放消息的緩沖區(qū)大小
6、flag 		消息隊列采用的等待方式,
返回:
RT_EOK 	成功
 */
rt_err_t rt_mq_init(rt_mq_t     mq,
                    const char *name,
                    void       *msgpool,
                    rt_size_t   msg_size,
                    rt_size_t   pool_size,
                    rt_uint8_t  flag)

脫離消息隊列:

/**
參數(shù):
mq 		消息隊列對象的句柄
返回:
RT_EOK 	成功
 */
rt_err_t rt_mq_detach(rt_mq_t mq)

2.2.3 發(fā)送消息

和郵件一樣,在 RT-Thread 中發(fā)送郵件分為 有無等待方式發(fā)送,以及緊急消息發(fā)送。

無等待方式適用于所有的線程和中斷,等待方式不能用于中斷中!

無等待發(fā)送消息:

/**
看函數(shù)原型,其實就是把等待方式發(fā)送的時間改成了0
參數(shù):
1、mq 		消息隊列對象的句柄
2、buffer 	消息內(nèi)容
3、size 	消息大小
返回:
RT_EOK 		成功
-RT_EFULL 	消息隊列已滿
-RT_ERROR 	失敗,表示發(fā)送的消息長度大于消息隊列中消息的最大長度
 */
rt_err_t rt_mq_send(rt_mq_t mq, const void *buffer, rt_size_t size)
{
    return rt_mq_send_wait(mq, buffer, size, 0);
}

等待方式發(fā)送郵件:

/**
除了最后多一個時間,其他參數(shù),和上面無等待方式一樣
timeout 	超時時間(時鐘節(jié)拍)
*/
rt_err_t rt_mq_send_wait(rt_mq_t     mq,
                         const void *buffer,
                         rt_size_t   size,
                         rt_int32_t  timeout)

發(fā)送緊急消息:

/**
參數(shù):
1、mq 		消息隊列對象的句柄
2、buffer 	消息內(nèi)容
3、size 	消息大小
返回:
RT_EOK 		成功
-RT_EFULL 	消息隊列已滿
-RT_ERROR 	失敗
 */
rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size)

2.2.4 接收消息

接收消息時,接收者需指定存儲消息的消息隊列對象句柄,并且指定一個內(nèi)存緩沖區(qū),接收到的消息內(nèi)容將被復制到該緩沖區(qū)里。

/**
參數(shù):
mq 				消息隊列對象的句柄
buffer 			消息內(nèi)容
size 			消息大小
timeout 		指定的超時時間
返回:
RT_EOK 			成功收到
-RT_ETIMEOUT 	超時
-RT_ERROR 		失敗,返回錯誤
 */
rt_err_t rt_mq_recv(rt_mq_t    mq,
                    void      *buffer,
                    rt_size_t  size,
                    rt_int32_t timeout)

2.3 消息隊列原理簡析

消息隊列控制塊:

要理解 消息隊列 的原理,就得從他初始化的狀態(tài)開始說起:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

發(fā)送消息,其實所有的步驟都是在rt_mq_send_wait函數(shù)中的,再次強調(diào),學會看源碼!

關鍵的幾個地方說明一下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

當然這里沒有特意的說明等待時間問題,因為發(fā)送和接收都可以阻塞等待,這里不是要理解的重點。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

發(fā)送完完成以后如果發(fā)現(xiàn)有線程在等待消息隊列,會發(fā)生一次調(diào)度:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

接收消息,其實類似,可以自己查看源碼,試著分析。

對于上述過程的理解,我單獨寫了個例子,結(jié)合例子去理解上面的步驟,更加直觀!請看下面 理解消息隊列原理示例。

2.4 示例(消息隊列原理理解)

2個示例,第一個為了更加直觀的理解消息隊列原理,第二個是簡單的消息傳遞。

對于典型的串口接收不定長度數(shù)據(jù)的示例,我會單獨使用一篇文章來介紹。

2.4.1 理解消息隊列原理

我們在上面 《2.3 消息隊列原理簡析》 分析了一下消息隊列的原理,我們再來通過一個例子直觀的加深一下理解。

新建一個消息隊列(注意新建時候的參數(shù)):

pYYBAGKyeRyAXQOeAAAvb5BLk_Q666.png

我們2個按鍵,通過Key2按鍵發(fā)送消息:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

通過 Key3 打印 消息隊列 對應的狀態(tài)值:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

我們測試的時候,通過觀察消息隊列初始化以后的狀態(tài),然后每次發(fā)送以后觀察 head,tail,free的變化情況,加深我們對消息隊列的理解:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

通過上面的示例再去理解消息隊列的原理,就很直觀了,如果有消息接收,觀察地址的變化,同樣的可以分析出接收消息時候的原理。

2.4.2 消息傳遞

消息傳遞相對來說,就簡單多了,直接在上面的基礎上,新建一個任務接收消息(因為沒有做長度識別,這里沒有做解析):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

還是通過上面的Key2按鍵發(fā)送消息:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_15,color_FFFFFF,t_70,g_se,x_16

結(jié)語

本文雖然只介紹了2個IPC機制,但是在項目中,它們的使用無處不在。

消息隊列的應用在我們實際使用中,是很重要的,串口通信接收數(shù)據(jù)就是使用消息隊列來實現(xiàn)。對于消息隊列的串口應用,我會單獨開一片博文來總結(jié)。

本文針對消息隊列的實現(xiàn)原理給出了很好的示例,還是那句話,學會多看源碼,多動手測試!

我會用心寫好每一篇博文,希望大家支持!謝謝!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • IPC
    IPC
    +關注

    關注

    3

    文章

    366

    瀏覽量

    53186
  • 線程
    +關注

    文章

    508

    瀏覽量

    20221
  • RT-Thread
    +關注

    關注

    32

    文章

    1409

    瀏覽量

    41960
  • 消息隊列
    +關注

    關注

    0

    文章

    34

    瀏覽量

    3133
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RT-Thread記錄(一、版本開發(fā)環(huán)境及配合CubeMX)

    RT-Thread 學習記錄的第一篇文章,RT-Thread記錄(一、RT-Thread 版本、RT-T
    的頭像 發(fā)表于 06-20 00:28 ?5966次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(一、版本開發(fā)環(huán)境及配合CubeMX)

    RT-Thread記錄(二、RT-Thread內(nèi)核啟動流程)

    在前面我們RT-Thread Studio工程基礎之上講一講RT-Thread內(nèi)核啟動流程.
    的頭像 發(fā)表于 06-20 00:30 ?5726次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(二、<b class='flag-5'>RT-Thread</b>內(nèi)核啟動流程)

    RT-thread內(nèi)核郵箱

    二、郵箱相關接口:在src/ipc.c中創(chuàng)建郵箱rt_mailbox_t rt_mb_create(const char *name,
    發(fā)表于 03-06 17:15

    RT-thread內(nèi)核消息隊列

    的所有內(nèi)存中的數(shù)據(jù)就是消息的真正內(nèi)容。rt-thread采用靜態(tài)隊列的方式來實現(xiàn)消息隊列IPC功能的。消息頭只是用來做索引功能,通過它可以索引到下一個消息頭的位置。如果大家還是有些不
    發(fā)表于 03-06 17:17

    一文讀懂RT-Thread操作系統(tǒng)的郵箱機制

    RT-Thread操作系統(tǒng)的郵箱有何作用?RT-Thread操作系統(tǒng)的郵箱機制管理數(shù)據(jù)結(jié)構(gòu)是怎樣的?
    發(fā)表于 02-28 08:10

    RT-Thread系統(tǒng)消息隊列常用的函數(shù)接口有哪些

    rt_messagequeue 對象從 rt_ipc_object 中派生,由 IPC 容器所管理。消息隊列的操作函數(shù)RT-Thread
    發(fā)表于 03-31 14:14

    怎樣去操作RT-Thread系統(tǒng)的消息郵箱

    rt_ipc_object 中派生,由 IPC 容器管理。結(jié)構(gòu)體 rt_ipc_object 定義如下:結(jié)構(gòu)體定義中,繼承關系一目了然,不再贅述。管理郵箱
    發(fā)表于 03-31 14:29

    【原創(chuàng)精選】RT-Thread征文精選技術(shù)文章合集

    RT-Thread記錄(五、RT-Thread 臨界區(qū)保護)RT-Thread記錄(六、IPC
    發(fā)表于 07-26 14:56

    rt-thread郵箱-隊列區(qū)別是什么?

    今天研究了下rt-thread,里面的郵箱隊列,除了消息尺寸不同之外還有別的差別嗎?怎么感覺像是同一種東西。
    發(fā)表于 10-31 08:29

    rt-thread 線程間同步和通信你用對了嗎

    系統(tǒng)優(yōu)化系列先停一停,總對人指指點點會讓大家反感的。今天給各位 rt-thread 使用者一些使用信號量、郵箱、消息隊列等同步和通信機制的...
    發(fā)表于 01-25 14:43 ?0次下載
    <b class='flag-5'>rt-thread</b> 線程間同步和通信你用對了嗎

    RT-Thread隱藏的寶藏completion

    completion 直接翻譯過來是完成,所以我更愿意稱 rt_completion 為 完成量。在 RT-Thread 的文檔中心 中講線程間通訊(IPC)時,只介紹...
    發(fā)表于 01-25 19:27 ?0次下載
    <b class='flag-5'>RT-Thread</b>隱藏的寶藏<b class='flag-5'>之</b>completion

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機制

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1869次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作<b class='flag-5'>機制</b>

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread v5.0.2 發(fā)布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?1964次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布

    玩轉(zhuǎn)RT-Thread消息隊列的應用

    在嵌入式系統(tǒng)開發(fā)中,實時處理串口和ADC數(shù)據(jù)是一項重要的任務。本文將介紹如何在RT-Thread實時操作系統(tǒng)中,利用消息隊列來同時處理來自串口和ADC的數(shù)據(jù)。通過這種方法,我們能夠高效地管理和處理
    的頭像 發(fā)表于 07-23 08:11 ?916次閱讀
    玩轉(zhuǎn)<b class='flag-5'>RT-Thread</b><b class='flag-5'>之</b>消息<b class='flag-5'>隊列</b>的應用