国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

RT-Thread操作系統的FreeRTOS兼容層

RTThread物聯網操作系統 ? 來源:未知 ? 2023-01-14 00:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Github地址

https://github.com/RT-Thread-packages/FreeRTOS-Wrapper

期待您的Star

本項目是2022年開源之夏,RT-Thread社區項目。已經于2022年9月由唐照洲(美國佐治亞理工學院,大四)順利結項完成。FreeRTOS兼容層目前已經落地到RT-Thread對ESP32-IDF(唐照洲)和core-v-mcu(王順)兩款SDK的兼容項目中。


1 概述


這是一個針對RT-Thread國產操作系統的FreeRTOS操作系統兼容層,可以讓原有基于FreeRTOS操作系統的項目快速、無感地遷移到RT-Thread操作系統上,實現在RT-Thread操作系統上無感的使用FreeRTOS的API,同時可以使用RT-Thread的豐富組件。項目基于FreeRTOS V10.4.6版本。

1.1 RT-Thread的其他RTOS兼容層

  • RT-Thread操作系統的μCOS-III兼容層:https://github.com/mysterywolf/RT-Thread-wrapper-of-uCOS-III

  • RT-Thread操作系統的μCOS-II兼容層:https://github.com/mysterywolf/RT-Thread-wrapper-of-uCOS-II

  • RT-Thread操作系統的RTX(即CMSIS-RTOS1)兼容層:https://github.com/RT-Thread-packages/CMSIS_RTOS1

  • RT-Thread操作系統的RTX5(即CMSIS-RTOS2)兼容層:https://github.com/RT-Thread-packages/CMSIS_RTOS2

  • RT-Thread操作系統的Arduino生態兼容層:https://github.com/RTduino/RTduino

2 FreeRTOS的API支持情況及使用注意事項


API支持情況詳見,readme 鏈接如下:

https://github.com/RT-Thread-packages/FreeRTOS-Wrapper

(請復制至外部瀏覽器打開)

兼容層對FreeRTOS的支持情況記錄在issue中記錄。一些支持的函數在功能和使用方法上和FreeRTOS略有不同,在遷移過程中需要注意。

2.1線程、消息隊列與互斥量

2.1.1 vTaskSuspend

vTaskSuspend只支持掛起當前運行的線程,在使用時xTaskToSuspend參數必須為NULL。否則會觸發斷言。

2.1.2 xQueueSendToFront

xQueueSendToFront不支持設置超時,使用時xTicksToWait參數會被忽略,消息隊列沒有空間時會立即返回errQUEUE_FULL

2.1.3 xQueueCreateStatic

靜態消息隊列需要參考以下的例子創建,確保為消息隊列分配的內存足夠大:

 1#defineQUEUE_LENGTH10
 2#defineITEM_SIZEsizeof(uint32_t)
 3
 4/*以下是在原版FreeRTOS分配內存的方法,由于RT-Thread消息隊列內部的實現與FreeRTOS不同,這樣分配的內存不夠存放ITEM_SIZE個消息*/
 5//uint8_tucQueueStorage[QUEUE_LENGTH*ITEM_SIZE];
 6/*要使用QUEUE_BUFFER_SIZE宏分配內存*/
 7uint8_tucQueueStorage[QUEUE_BUFFER_SIZE(QUEUE_LENGTH,ITEM_SIZE)];
 8StaticQueue_txQueueBuffer;
 9QueueHandle_txQueue1;
10xQueue1=xQueueCreate(QUEUE_LENGTH,ITEM_SIZE,&(ucQueueStorage[0]),&xQueueBuffer);

2.1.4 Mutex和Recursive Mutex

FreeRTOS提供了兩種互斥量,Mutex和Recursive Mutex。Recursive Mutex可以由同一個線程重復獲取,Mutex不可以。RT-Thread提供的互斥量是可以重復獲取的,因此兼容層也不對Mutex和Recursive Mutex做區分。

用xSemaphoreCreateMutex和xSemaphoreCreateRecursiveMutex創建的互斥量都是可以重復獲取的。

2.2 定時器

和FreeRTOS不同,RT-Thread不使用一個消息隊列向定時器線程傳遞命令。使用兼容層時任何需要設置超時的定時器函數,如xTimerStart( xTimer, xTicksToWait )xTicksToWait參數會被忽略,函數會立即完成命令并返回。

2.3 FromISR函數

FreeRTOS為一些函數提供了在中斷中使用的FromISR版本,如果這些函數喚醒了更高優先級的線程,需要手動調度,如下所示:

1BaseType_txHigherPrioritTaskWoken=pdFALSE;
2xQueueSendToFrontFromISR(xRxQueue,&cIn,&xHigherPriorityTaskWoken);
3if(xHigherPriorityTaskWoken)
4{
5taskYIELD();
6}

RT-Thread不為函數提供FromISR版本,函數可以在中斷調用并在內部完成調度。因此在兼容層中使用FromISR函數后不需要手動調度,xHigherPriorityTaskWoken總會被設置成pdFALSE

2.4 內存堆

兼容層保留了FreeRTOS的五種內存分配算法,默認使用heap_3pvPortMalloc/vPortFree內部調用RT_KERNEL_MALLOC/RT_KERNEL_FREE在RT-Thread內部的內存堆分配。這種情況下內存堆的大小由RT-Thread BSP配置決定,無法在FreeRTOSConfig.h中通過configTOTAL_HEAP_SIZE設置。若使用其他算法,需要修改FreeRTOS/sSConscript,選擇相應的源文件

1#可將heap_3.c替換成heap_1.c等
2src+=Glob(os.path.join("portable","MemMang","heap_3.c"))

FreeRTOS/portable/rt-thread/FreeRTOSConfig.h中通過configTOTAL_HEAP_SIZE設置內存堆大小。應用調用pvPortMalloc/vPortFree會在一塊獨立于RT-Thread,大小為configTOTAL_HEAP_SIZE的內存堆中分配,RT-Thread內部的內存堆仍然存在,兼容層函數內部分配內存都在RT-Thread的內存堆完成。

2.5 線程優先級

RT-Threa線程優先級數值越小時優先級越高,而FreeRTOS線程優先級數值越大優先級越高。在使用兼容層的FreeRTOS API,如xTaskCreate,使用FreeRTOS的規則為線程指定優先級即可。若在應用中將RT-Thread和FreeRTOS API混合使用,在指定線程優先級時要特別注意。可以使用以下兩個宏對RT-Thread和FreeRTOS線程優先級做轉換:

1#defineFREERTOS_PRIORITY_TO_RTTHREAD(priority)(configMAX_PRIORITIES-1-(priority))
2#defineRTTHREAD_PRIORITY_TO_FREERTOS(priority)(RT_THREAD_PRIORITY_MAX-1-(priority))

2.6 線程堆棧大小

FreeRTOS線程堆棧大小的單位為sizeof(StackType_t),RT-Thread線程堆棧大小為sizeof(rt_uint8_t)。使用FreeRTOS API創建線程時一定要遵守FreeRTOS的規則,切勿混淆。

2.7 vTaskStartScheduler

由于RT-Thread和FreeRTOS的內核啟動流程不同,使用兼容層時,main函數是在一個線程中運行,該線程優先級為CONFIG_RT_MAIN_THREAD_PRIORITY。(此選項通過SCons配置,數值越小優先級越高。),此時調度器已經開啟。一般的FreeRTOS應用采用以下的方式創建線程:

1xTaskCreate(pxTask1Code,......);
2xTaskCreate(pxTask2Code,......);
3......
4vTaskStartScheduler();

使用兼容層時,任何使用xTaskCreate創建的線程若優先級比CONFIG_RT_MAIN_THREAD_PRIORITY更高,會立即開始執行。vTaskStartScheduler只是為了提供對應用的兼容,沒有任何實際效果。在使用兼容層時,創建線程要特別注意,確保在調用xTaskCreate時,該線程所需的所有資源已經完成初始化,可以正常運行。

3 使用方法


通過Env工具將兼容層加入到工程中:

1RT-Threadonlinepackages
2systempackages--->
3[*]FreeRTOSWrapper--->
4Version(latest)

使用scons --menuconfig配置RT-Thread內核,以下選項會影響到FreeRTOS兼容層:

1RT_USING_TIMER_SOFT/*使用FreeRTOS定時器時必須開啟*/
2RT_TIMER_THREAD_PRIO/*定時器線程優先級。與FreeRTOS相反,該選項數值越小優先級越高*/
3RT_TIMER_THREAD_STACK_SIZE/*定時器線程棧大小,單位為sizeof(rt_uint8_t)*/
4RT_USING_MUTEX/*使用FreeRTOS互斥量時必須開啟*/
5RT_USING_SEMAPHORE/*使用FreeRTOS信號量時必須開啟*/
6RT_USING_HEAP/*使用FreeRTOS動態內存分配時必須開啟*/
7RT_TICK_PER_SECOND/*相當于FreeRTOSconfigTICK_RATE_HZ*/
8RT_THREAD_PRIORITY_MAX/*相當于FreeRTOSconfigMAX_PRIORITIES*/
9RT_NAME_MAX/*相當于FreeRTOSconfigMAX_TASK_NAME_LEN*/

FreeRTOS/portable/rt-thread提供了FreeRTOSConfig.h模版。大部分內容不可以修改或依賴RT-Thread內核的配置,可以手動修改的內容如下:

 1/*可以選擇不使用recursivemutex*/
 2#ifdefRT_USING_MUTEX
 3#defineconfigUSE_RECURSIVE_MUTEXES1
 4#defineconfigUSE_MUTEXES1
 5#endif
 6
 7/*可以選擇不使用countingsemaphore*/
 8#ifdefRT_USING_SEMAPHORE
 9#defineconfigUSE_COUNTING_SEMAPHORES1
10#endif
11
12/*若不使用heap_3,可以通過configTOTAL_HEAP_SIZE配置內存堆大小*/
13#defineconfigSUPPORT_STATIC_ALLOCATION1
14#ifdefRT_USING_HEAP
15#defineconfigSUPPORT_DYNAMIC_ALLOCATION1
16#defineconfigTOTAL_HEAP_SIZE10240
17#defineconfigAPPLICATION_ALLOCATED_HEAP0
18#endif
19
20#defineconfigMINIMAL_STACK_SIZE128
21
22/*可以選擇的函數和功能*/
23#defineINCLUDE_vTaskPrioritySet1
24#defineINCLUDE_uxTaskPriorityGet1
25#defineINCLUDE_vTaskDelete1
26#defineINCLUDE_vTaskSuspend1
27#defineINCLUDE_xTaskDelayUntil1
28#defineINCLUDE_vTaskDelay1
29#defineINCLUDE_xTaskGetIdleTaskHandle1
30#defineINCLUDE_xTaskAbortDelay1
31#defineINCLUDE_xSemaphoreGetMutexHolder1
32#defineINCLUDE_xTaskGetHandle1
33#defineINCLUDE_uxTaskGetStackHighWaterMark1
34#defineINCLUDE_uxTaskGetStackHighWaterMark21
35#defineINCLUDE_eTaskGetState1
36#defineINCLUDE_xTaskResumeFromISR1
37#defineINCLUDE_xTaskGetSchedulerState1
38#defineINCLUDE_xTaskGetCurrentTaskHandle1
39#defineconfigUSE_APPLICATION_TASK_TAG1
40#defineconfigUSE_TASK_NOTIFICATIONS1
41#defineconfigTASK_NOTIFICATION_ARRAY_ENTRIES3

在test目錄下提供了一些例程,可以將它們加入BSP目錄下的applications文件夾中。使用SCons編譯并燒錄后,可以連接串口,輸入相應的msh命令,觀察例程的執行結果:

 1msh/>queue_dynamic
 2Task1receivedata0fromqueue
 3Task1receivedata1fromqueue
 4Task1receivedata2fromqueue
 5Task1receivedata3fromqueue
 6Task1receivedata4fromqueue
 7Task1receivedata5fromqueue
 8Task1receivedata6fromqueue
 9Task1receivedata7fromqueue
10Task1receivedata8fromqueue
11Task1receivedata9fromqueue
12Task1receivedata10fromqueue

4 參考資料


RT-Thread文檔

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README

FreeRTOS文檔

https://www.freertos.org/a00106.html


Github地址

https://github.com/RT-Thread-packages/FreeRTOS-Wrapper

期待您的Star

———————End———————

你可以添加微信:rtthread2020 為好友,注明:公司+姓名,拉進RT-Thread官方微信交流群!

fae593d8-9362-11ed-bfe3-dac502259ad0.gif


原文標題:RT-Thread操作系統的FreeRTOS兼容層

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。


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

    關注

    32

    文章

    1613

    瀏覽量

    44869

原文標題:RT-Thread操作系統的FreeRTOS兼容層

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    硬實時·廣生態·強賦能,中國工業報解讀RT-Thread工業發展之路|新聞資訊

    近日,《中國工業報》深度報道了RT-Thread(睿賽德)在工業邊端操作系統領域的發展路徑。報道指出,憑借25億臺的全球裝機量與近20年的開源積淀,RT-Thread已成為國內嵌入式操作系統
    的頭像 發表于 02-02 18:53 ?368次閱讀
    硬實時·廣生態·強賦能,中國工業報解讀<b class='flag-5'>RT-Thread</b>工業發展之路|新聞資訊

    單片機的操作系統

    。 ? ? RT-Thread ?:國產開源系統,集成GUI、網絡協議棧、文件系統等組件,兼容POSIX接口,適合物聯網設備。 ? 嵌入式操作系
    發表于 11-14 06:18

    【好書推薦】RT-Thread第22本相關書籍!《嵌入式實時操作系統開發實踐》| 技術集結

    隨著物聯網、智能家居與工業控制等領域的快速發展,嵌入式實時操作系統的應用愈發廣泛。RT-Thread作為國產開源RTOS的代表,憑借其出色的實時性、組件化設計和強大的生態體系,已成為眾多工程師和高校
    的頭像 發表于 10-16 18:46 ?688次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第22本相關書籍!《嵌入式實時<b class='flag-5'>操作系統</b>開發實踐》| 技術集結

    RT-Thread睿賽德榮獲工博會“CIIF信息技術獎”,“1+X+N”戰略推動國產操作系統體系化發展 | 新聞速遞

    在第二十五屆中國國際工業博覽會(工博會)上,國產嵌入式操作系統領軍企業RT-Thread睿賽德憑借其在嵌入式操作系統領域的持續創新與產業貢獻,榮獲2025年“CIIF信息技術獎”。此次獲獎
    的頭像 發表于 10-10 10:05 ?1024次閱讀
    <b class='flag-5'>RT-Thread</b>睿賽德榮獲工博會“CIIF信息技術獎”,“1+X+N”戰略推動國產<b class='flag-5'>操作系統</b>體系化發展 | 新聞速遞

    學習強國深度報道 RT-Thread“1+X+N”戰略,國產操作系統賦能高端制造引關注|媒體視角

    近日,國產嵌入式操作系統領軍企業RT-Thread睿賽德在工博會發布的“1+X+N”戰略體系,獲得了國家級權威媒體平臺“學習強國”的重點報道。該報道從產業高度深入剖析了RT-Thread睿賽德以自主
    的頭像 發表于 09-29 17:37 ?1204次閱讀
    學習強國深度報道 <b class='flag-5'>RT-Thread</b>“1+X+N”戰略,國產<b class='flag-5'>操作系統</b>賦能高端制造引關注|媒體視角

    【好書推薦】RT-Thread第20本相關書籍!《嵌入式實時操作系統RT-Thread原理與應用》| 技術集結

    01內容簡介ContentSummary本書為讀者提供了一個全面、系統RT-Thread學習指南,旨在幫助初學者及有經驗的開發者掌握RT-Thread實時操作系統和STM32嵌入式微
    的頭像 發表于 08-24 10:05 ?1024次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第20本相關書籍!《嵌入式實時<b class='flag-5'>操作系統</b><b class='flag-5'>RT-Thread</b>原理與應用》| 技術集結

    經濟日報:國產嵌入式操作系統領軍企業RT-Thread正在持續把新思想、新技術留給上海|媒體視角

    。此次,RT-Thread睿賽德攜邊端側AI創新方案精彩亮相大會。其聯合創始人&工業負責人邱祎闡釋“AIOS”理念,在OS+AI架構上重構升級,通過操作系統深度
    的頭像 發表于 08-05 21:02 ?1127次閱讀
    經濟日報:國產嵌入式<b class='flag-5'>操作系統</b>領軍企業<b class='flag-5'>RT-Thread</b>正在持續把新思想、新技術留給上海|媒體視角

    RT-Thread 遇上 Rust:安全內核 RusT-Thread 的誕生

    大家好,我們是中國科學技術大學操作系統原理與設計(H)課oooooS小組。這個項目是我們的課程大作業:參考RT-Thread架構,使用Rust搭建一個原生的嵌入式操作系統內核。初識Rust是因為xk
    的頭像 發表于 08-02 11:03 ?3538次閱讀
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全內核 RusT-<b class='flag-5'>Thread</b> 的誕生

    權威認證!RT-Thread操作系統100%國產自主可控,鑄就睿擎工業平臺安全基石? !

    在工業自動化、電力控制、軌道交通等高端裝備領域,操作系統的安全可靠與自主可控是關乎產業命脈的核心訴求。作為國產嵌入式實時操作系統(RTOS)的領軍者,RT-Thread始終將代碼的透明性與自主性置于
    的頭像 發表于 07-11 17:05 ?3052次閱讀
    權威認證!<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系統</b>100%國產自主可控,鑄就睿擎工業平臺安全基石? !

    RT-Thread榮獲2025優秀開源項目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術協會主辦的2025上海開源創新精英薈。上海市商委副主任張杰出席會議并致辭。RT-Thread嵌入式操作系統項目憑借其卓越的技術創新與開源生態
    的頭像 發表于 07-04 09:04 ?2642次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優秀開源項目 | 新聞速遞

    揭秘RT-Thread上的AUTOSAR CP系統

    本文探討了RT-Thread與AUTOSARCP的融合,解決車載ECU開發中實時性、安全性與靈活性的平衡問題。通過分層安全內核(rt-safetyos/autoos)和工具鏈整合,兼容AUTOSAR
    的頭像 發表于 06-23 20:22 ?3222次閱讀
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP<b class='flag-5'>系統</b>

    玄鐵加入RT-Thread 高級會員合作伙伴 | 戰略新篇

    今天起,玄鐵XuanTie正式成為RT-Thread高級會員合作伙伴。此次合作標志著雙方將在嵌入式操作系統創新、RISC-V生態構建及行業應用落地等領域展開深度協同,加速推動開源技術的產業化進程
    的頭像 發表于 06-23 20:22 ?1107次閱讀
    玄鐵加入<b class='flag-5'>RT-Thread</b> 高級會員合作伙伴 | 戰略新篇

    【直播預告】《實時操作系統應用技術—基于RT-Thread與ARM的編程實踐》教學脈絡及資源簡介

    直播預告直播主題:《實時操作系統應用技術—基于RT-Thread與ARM的編程實踐》教學脈絡及資源簡介開放時間:2025年5月29日(周四)20:00主講老師:王宜懷課程類型:視頻直播觀看平臺
    的頭像 發表于 05-26 17:50 ?1258次閱讀
    【直播預告】《實時<b class='flag-5'>操作系統</b>應用技術—基于<b class='flag-5'>RT-Thread</b>與ARM的編程實踐》教學脈絡及資源簡介

    RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

    的開源實時操作系統,正持續優化社區協作流程,現面向全球開發者招募審核團(ReviewTeam)成員,共同維護代碼質量,推動RT-Thread生態繁榮發展!什么是RT
    的頭像 發表于 05-21 18:02 ?1255次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區治理與演進

    RT-Thread嵌入式操作系統專業培訓班-深圳站重磅開啟!

    RT-Thread官方將在深圳舉辦為期三天的嵌入式操作系統專業培訓班!本次培訓將深入講解RT-Thread嵌入式實時操作系統的核心技術與實戰應用,助力開發者快速掌握RTOS開發精髓。無
    的頭像 發表于 04-11 18:18 ?830次閱讀
    <b class='flag-5'>RT-Thread</b>嵌入式<b class='flag-5'>操作系統</b>專業培訓班-深圳站重磅開啟!