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

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

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

3天內不再提示

FreeRTOS的直接任務(消息)通知

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-01-07 09:37 ? 次閱讀
之前分享了《FreeRTOS V10.4.0更新了哪些功能?》,今天就來詳細講述其中的一個知識點:FreeRTOS的直接任務(消息)通知,這樣做的目的就是減少RAM占用空間并加快執行速度。

嵌入式專欄

1

寫在前面幾乎所有RTOS操作系統都提供了隊列和信號量的功能,對于大部分新手來說,使用隊列和信號量是必備技能。

但是,在大多數情況下,他們都是使用“中介對象”進行通信,而并非“直接任務消息”通信。

通過“中介對象”進行通信,每一組隊列或信號量都會分配一段內存(消息緩沖區和流緩沖區)。就存在一個問題,如果隊列或信號量比較多,勢必造成更大的內存開支。

但是,如果通過本文說的“直接消息”通信,會節約很多內存。

嵌入式專欄

2

什么是直接任務通知?大多數任務間通信方法都通過中介對象,例如隊列,信號量或事件組。發送任務寫入通信對象,接收任務從通信對象讀取。

比如FreeRTOS的隊列通信,首先創建隊列之前要定義一個隊列:

而這個隊列包含了很多中介對象:

51ced8f2-507c-11eb-8b86-12bb97331649.png

大家可以算一下這個“中介對象”會占用多少RAM空間?

通過一個代碼示意圖理解中介對象通信:

525d7ce2-507c-11eb-8b86-12bb97331649.png

直接任務通知:當使用直接任務通知時,顧名思義,發送任務將通知直接發送給接收任務,而無需中介對象。

通過一個代碼示意圖理解:

52ac85da-507c-11eb-8b86-12bb97331649.png

從FreeRTOS V10.4.0開始,每個任務都有一系列通知。每個通知都包含一個32位值和一個布爾狀態,它們一起僅消耗5個字節的RAM。

就像任務可以阻止二進制信號量等待該信號量變為“可用”一樣,任務可以阻止通知以等待該通知的狀態變為“待處理”。同樣,就像任務可以阻止計數信號量以等待該信號量的計數變為非零一樣,任務可以阻止通知以等待該通知的值變為非零。下面的第一個示例演示了這種情況。

通知不僅可以傳達事件,還可以通過多種方式傳達數據。

嵌入式專欄

3

進一步分析直接任務通知通過對比FreeRTOS V10.4.0和之前版本,你會發現V10.4.0多了一些API,比如ulTaskNotifyTake / ulTaskNotifyTakeIndexed:

530f67cc-507c-11eb-8b86-12bb97331649.png

在官網也有針對這些API的詳細介紹和說明,以及應用代碼例子:

53c0628e-507c-11eb-8b86-12bb97331649.png

直接任務通信API說明地址:

https://www.freertos.org/RTOS-task-notification-API.html

(公號不支持外鏈接,請復制鏈接到瀏覽器打開)

嵌入式專欄

4

使用直接任務通知性能優勢和使用限制任務通知的靈活性使它們可以在需要創建單獨的隊列、 二進制信號量、 數信號量或事件組的情況下使用。

與使用中介對象(例如信號量)來取消阻止任務相比,使用直接通知取消阻止RTOS任務的速度快了45%(來自官方數據),并且使用的RAM更少。

當然,有這些性能優勢,也肯定一些限制:

僅當只有一個任務可以作為事件的接收者時,才可以使用RTOS任務通知。但是,在大多數實際使用情況下都可以滿足此條件,例如中斷使執行任務處理的任務中斷時,該任務將處理該中斷接收的數據。

僅在使用RTOS任務通知代替隊列的情況下:接收任務可以在“阻塞”狀態下等待通知(因此不占用任何CPU時間),而發送任務不能在“阻塞”狀態下等待消息。如果發送無法立即完成,則發送完成。

嵌入式專欄

5

使用方法使用方法其實很簡單,只要你會使用RTOS的隊列、信號量,基本看一眼官方例子就能使用。

我這里也拿官方例子說明一下:

/*main()創建的兩個任務的原型*/static void prvTask1( void *pvParameters );static void prvTask2( void *pvParameters );
/*處理由main()創建的任務的句柄*/static TaskHandle_t xTask1 = NULL, xTask2 = NULL;
/*創建兩個任務,來回發送通知,然后啟動RTOS調度程序*/void main( void ){    xTaskCreate( prvTask1, “Task1”, 200, NULL, tskIDLE_PRIORITY, &xTask1 );    xTaskCreate( prvTask2, “Task2”, 200, NULL, tskIDLE_PRIORITY, &xTask2 );    vTaskStartScheduler();}/*———————————————————–*/
/*prvTask1()使用API的“索引”版本*/static void prvTask1( void *pvParameters ){    for( ;; )    {        /* 發送通知到prvTask2() ,使其脫離“已阻止”狀態。*/        xTaskNotifyGiveIndexed( xTask2, 0 );
/*阻止等待prvTask2()通知此任務*/        ulTaskNotifyTakeIndexed( 0, pdTRUE, portMAX_DELAY );    }}/*———————————————————–*/
/* prvTask2()使用API的原始版本(不帶“索引”) */static void prvTask2( void *pvParameters ){    for( ;; )    {/*等待prvTask1()通知此任務 */        ulTaskNotifyTake( pdTRUE, portMAX_DELAY );
/*向prvTask1()發送通知,使它退出“已阻止”狀態*/        xTaskNotifyGive( xTask1 );    }}

責任編輯:xj

原文標題:如何改善FreeRTOS運行的速度、RAM大小

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。


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

    關注

    8

    文章

    1369

    瀏覽量

    114901
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62329
  • 運行速度
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6734

原文標題:如何改善FreeRTOS運行的速度、RAM大小

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用任務通知提高RTOS應用的效率

    在實時嵌入式系統中,性能和資源效率是決定設計成敗的關鍵因素。傳統的實時操作系統(RTOS)提供了如隊列、信號量和事件組機制,實現任務之間的同步和通信。FreeRTOS/SAFERTOS還提供一種方法可以使這些過程更快、更輕量化,即任務
    的頭像 發表于 12-27 14:54 ?292次閱讀

    freertos最多支持多少個任務

    FreeRTOS是一個輕量級的實時操作系統(RTOS),其設計初衷就是為了提供簡單、可靠且高效的實時任務管理。關于FreeRTOS最多支持多少個任務的問題,實際上并沒有一個固定的上限,
    的頭像 發表于 09-02 14:21 ?1146次閱讀

    freertos和rtos區別是什么

    。RTOS 的主要特點是實時性、多任務處理、資源管理、中斷處理等。 FreeRTOS 是一個開源的實時操作系統,由英
    的頭像 發表于 09-02 14:18 ?1446次閱讀

    關于BLE通知值的通知長度問題求解

    FreeRtos 中的 streambuffer 的壓力。 如果 notify 支持每次通知大小大于 244 的數組,我需要做哪些修改才能實現每次通知大小為 512 或 1024 的數組。
    發表于 05-27 08:32

    請問一下FREERTOS只能創建4個任務,修改哪個宏定義可以增加創建任務的數量?

    請問一下FREERTOS只能創建4個任務,修改哪個宏定義可以增加創建任務的數量?解決方法:增加FREERTOS的堆。
    發表于 05-13 06:44

    淺析FreeRTOS任務調度器的三種調度算法和應用

    FreeRTOS在MCU領域應用非常廣泛,今天就給大家講解一下FreeRTOS調度器中的三種調度算法,以及在瑞薩RZ/T2L MPU中的應用。
    的頭像 發表于 05-10 14:02 ?7779次閱讀
    淺析<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>調度器的三種調度算法和應用

    用的cube生成的freertos工程,串口和任務通過郵箱通訊,結果任務反應很慢是怎么回事?

    初學freertos。用的cube生成的freertos工程,單片機型號位stm32f103vbt6。 建了三個人物,一個是串口任務,一個是LED每秒翻轉一次,一個是空任務。 串口
    發表于 05-08 08:13

    freertos系統如何劃分任務

    正在看freertos方面的教程,想請教下如何劃分任務? 比如之前做的一個數據采集板,用到了單片機以下功能: 1,單片機通過SPI1和ADC芯片通訊,同時還要通過SPI控制ADC電路部分的其他外圍
    發表于 05-08 07:16

    freertos如何周期性的執行一個任務,比如200ms調用一次任務, 用定時器發消息?

    freertos如何周期性的執行一個任務,比如200ms調用一次任務, 用定時器發消息?有沒有一個函數能直接實現
    發表于 05-07 08:21

    FreeRTOS系統使用xTaskCreate產生的任務與osThreadDef 產生的線程有什么不同?

    請教下是要 FreeRTOS系統, 使用 xTaskCreate 產生的任務 與 osThreadDef產生的線程有什么不同?
    發表于 04-29 07:20

    freertos任務創建,每一個任務分配的內存是多大才好,怎么計算呢?

    小白剛剛接觸freertos,想問一下就創建任務而言,每一個任務分配的內存是多大才好,怎么計算呢? 另外,每個任務的執行周期怎么確定?在任務
    發表于 04-23 06:39

    為什么CubeMX設計的FreeRTOS工程只能正常運行3個任務

    用CubeMX4.20設計的FreeRTOS工程有六個任務,出一個任務優先級較低外,另外幾個都是較高優先級。發現只有3個任務是正常運行的,還有三個沒有運行的跡象。用斷點跟蹤法在
    發表于 04-19 08:23

    freertos串口接收數據后如何發送給任務

    正在學freertos。串口中斷接收一幀數據后,放到數組里,如何將數據發送給任務呢? 如果用消息隊列,是否建立的消息隊列需要是數組類型的?還是說消息列表建立成uint8類型的,列表長度設為接收數據
    發表于 04-18 06:36

    FreeRTOS里在中斷中掛起任務出錯的原因?怎么解決?

    各位大佬,新手剛學習FreeRTOS,現在想在中斷中掛起某個任務,我在教程里看到說有中斷中的恢復函數xTaskResumeFromISR,但是沒有在中斷中的掛起函數,我搜了一下,有人說直接
    發表于 04-16 08:26

    FreeRTOS任務無故進入掛起狀態的原因?

    請教大家一個問題,我子啊使用FreeRTOS的時候創建了一個以太網的任務任務在使用的過程中被無故掛起,請問一下出現這種現象有哪幾種原因呢?
    發表于 04-09 07:20
    主站蜘蛛池模板: 久久精选视频 | 在镜头里被CAO翻了H | 国产精品久久久久久久久LI无码 | 少妇两个奶头喷出奶水了怎么办 | 出差无套内射小秘书 | 欧美一区二区三区激情视频 | 大学生第一次破女在线观看 | 全彩无翼污之邪恶女教师 | 真实国产精品视频国产网 | 91交换论坛| 国产 亚洲 中文字幕 久久网 | 白丝制服被啪到喷水很黄很暴力 | 国产精品ⅴ视频免费观看 | 国产日韩高清一区二区三区 | 青青草色青伊人 | 艳照门在线观看 | 日本xxx片免费高清在线 | 久久综合色一综合色88 | 午夜福利体验免费体验区 | 国产剧情在线精品视频不卡 | 九九视频在线观看视频6 | 中文字幕在线播放视频 | 国产精品美女久久久久浪潮AV | 人人草影院 | 亚洲一区乱码电影在线 | 久久精品国产视频澳门 | 边摸边吃奶玩乳尖视频 | 香蕉视频国产精品 | 国产精品一区二区亚瑟不卡 | 5G在线观看免费年龄确认18 | 国产午夜永久福利视频在线观看 | 亚洲美女视频高清在线看 | 人妻天天爽夜夜爽三区麻豆A片 | 久久这里有精品 | 亚洲乱码在线卡一卡二卡新区 | 国产毛A片啊久久久久久A | 亚洲精品在线网址 | 国产一区二区三区四区五在线观看 | 秋霞午夜鲁丝片午夜精品久 | 牛牛在线精品视频(正) | 一本道中文无码亚洲 |