在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

RTOS為什么要搞兩種API?

h1654155149.6853 ? 來源:電子工程世界 ? 作者:電子工程世界 ? 2022-03-11 14:33 ? 次閱讀

本文以FreeRTOS為例,如果我們自己在官網(wǎng)下載源碼然后手動(dòng)移植代碼就是使用FreeRTOS的原生API接口,如果我們使用STM32CubeMX來配置工程就是使用的CMSIS-API接口,是對(duì)FreeRTOS的原生API接口進(jìn)行了封裝。

一、RTOS為什么要搞兩種API?

CMSIS-RTOS API是ARM公司為RTOS內(nèi)核制定的一套通用接口協(xié)議,它提供了一套「標(biāo)準(zhǔn)的API接口」,可以移植到各種各樣的RTOS上,使得上層的軟件、中間件、庫以及其他組件在不同的RTOS之上都可以正常工作。

簡單的說就是:STM32是ARM內(nèi)核的,這大家都知道。FreeRTOS是一種免費(fèi)的開源的嵌入式操作系統(tǒng)。那它肯定就不屬于ARM公司的對(duì)不對(duì)?這也很好理解。現(xiàn)在你要在我ARM內(nèi)核上面使用不是我的RTOS產(chǎn)品,那么我ARM公司就要把你這個(gè)RTOS給打包一遍,封裝成屬于我的適合我的API接口協(xié)議類型的CMSIS-RTOS API。這樣解釋應(yīng)該好一點(diǎn)。

在STM32上使用FreeRTOS,可以直接使用FreeRTOS的原生接口(原生API),源碼移植就是使用的是原生API接口,這無可厚非。你也可以選擇CMSIS接口,實(shí)際上CMSIS接口和原生接口都是類似的,但是如果你學(xué)會(huì)了CMSIS的RTOS接口之后,也能自學(xué)對(duì)應(yīng)的原生接口,當(dāng)然還是有區(qū)別的,因此還是需要花時(shí)間去熟悉的。

學(xué)會(huì)了CMSIS的最大好處就是,只要其它RTOS有提供CMSIS接口,我們就可以直接使用CMSIS接口,而不需要再花時(shí)間去了解原生接口。比如我們?cè)趯W(xué)習(xí)UCOS時(shí),發(fā)現(xiàn)UCOS的API和FreeRTOS的API不同,是因?yàn)槲覀儗W(xué)的都是它們?cè)腁PI,就是我們下載源碼后在keil中移植的那種。但是如果我們學(xué)會(huì)了CMSIS-API,那么不管以后學(xué)習(xí)哪一個(gè)OS,只要這個(gè)OS提供了CMSIS的接口,我們就直接可以用CMSIS的API來調(diào)用學(xué)習(xí),而不需要再花時(shí)間去了解原生接口。

STM32CubeMX在提供FreeRTOS時(shí)也提供了CMSIS接口,后面具體舉例時(shí)就可以看到封裝的.c文件,總之ST對(duì)FreeRTOS封裝出了CMSIS接口。

二、使用CubeMX配置FreeRTOS

以STM32F407ZGT6芯片為例,使用CubeMX配置FreeRTOS。

1、新建工程

ec13458c-54af-11ec-b2e9-dac502259ad0.png

2、外部晶振

選擇外部晶振

ec4a9e74-54af-11ec-b2e9-dac502259ad0.png

4、下載器

選擇四線的SWD接口下載器。

ec724690-54af-11ec-b2e9-dac502259ad0.png

5、打開FreeRTOS

這里可以看到STM32CubeMX只提供了一種RTOS就是FreeRTOS,并且提供的是CMSIS接口API,并沒有提供原生的API,所以如果你想學(xué)習(xí)原生API就必須學(xué)會(huì)手動(dòng)移植源碼,使用STM32CubeMX來創(chuàng)建工程就必須使用ARM公司的CMSIS API

ec9da1be-54af-11ec-b2e9-dac502259ad0.png

ecc3036e-54af-11ec-b2e9-dac502259ad0.png

Include paramters

這一個(gè)與FreeRTOS的原生接口有關(guān),大家凡是看到v打頭、x打頭的函數(shù),都是FreeRTOS的原生函數(shù),我們現(xiàn)在要使用的是對(duì)原生接口封裝后的CMSIS API,通過Include paramter的配置可以決定哪些原生接口被使用,哪些不被使用,不過有關(guān)Include paramters中的內(nèi)容,一般情況下使用默認(rèn)設(shè)置即可。

ecfaecfc-54af-11ec-b2e9-dac502259ad0.png

User Constant

在該這欄目中可以添加宏定義,添加后就會(huì)在代碼中自動(dòng)生成宏定義的代碼,但是我們一般不會(huì)這樣添加,我們需要定義什么宏定義,我們一般都是直接在代碼中編寫。

ed341694-54af-11ec-b2e9-dac502259ad0.png

Task and Queues

在這一個(gè)欄目中,我們可以添加任務(wù)(線程),自動(dòng)生成代碼時(shí)就會(huì)生成創(chuàng)建任務(wù)(線程)的代碼,一般會(huì)有一個(gè)默認(rèn)任務(wù),如果需要的話我們可以額外添加一個(gè)任務(wù),當(dāng)然我們也可以自己去寫這些創(chuàng)建任務(wù)的代碼。

添加一個(gè)任務(wù)(線程),默認(rèn)任務(wù)+添加的任務(wù),目前我們有兩個(gè)任務(wù),創(chuàng)建工程時(shí)會(huì)自動(dòng)生成創(chuàng)建這兩個(gè)任務(wù)的代碼。

添加之前

ed64d540-54af-11ec-b2e9-dac502259ad0.png

添加之前

添加之后

edbcf324-54af-11ec-b2e9-dac502259ad0.png

添加之后

Timers and Semaphores

通過該欄目可以添加軟件定時(shí)器、互斥鎖和信號(hào)量,然后就可以自動(dòng)生成軟件定時(shí)器、互斥鎖和信號(hào)量的代碼,但是一般情況是在寫代碼時(shí)我們自己添加相應(yīng)的代碼,而不是自動(dòng)生成能,所以這個(gè)欄目不配置。

edcf81f6-54af-11ec-b2e9-dac502259ad0.png

目前不添加定時(shí)器、互斥鎖和信號(hào)量,編程時(shí)在代碼中添加。

FreeRTOS Heap Usage(堆設(shè)置)

ee1bfffe-54af-11ec-b2e9-dac502259ad0.png

6、時(shí)鐘配置

Fvco:VCO頻率 SYSCLK:系統(tǒng)時(shí)鐘頻率 Fusb:USB,SDIO,RNG等的時(shí)鐘頻率 Fs:PLL輸入時(shí)鐘頻率,可以是HSI,HSE等. plln:主PLL倍頻系數(shù)(PLL倍頻),取值范圍:64~432. pllm:主PLL和音頻PLL分頻系數(shù)(PLL之前的分頻),取值范圍:2~63. pllp:系統(tǒng)時(shí)鐘的主PLL分頻系數(shù)(PLL之后的分頻),取值范圍:2,4,6,8.(僅限這4個(gè)值!) pllq:USB/SDIO/隨機(jī)數(shù)產(chǎn)生器等的主PLL分頻系數(shù)(PLL之后的分頻),取值范圍:2~15.

外部晶振為8M的時(shí)候,推薦值:plln=336,pllm=8,pllp=2

ee614c12-54af-11ec-b2e9-dac502259ad0.png

7、工程設(shè)置

ee914b56-54af-11ec-b2e9-dac502259ad0.png

eeb87820-54af-11ec-b2e9-dac502259ad0.png

8、生成代碼

建議勾選上分文件管理。我們?cè)谏纱a的時(shí)候,出現(xiàn)了如下提示,我們這里需要解決這個(gè)警告,否者會(huì)出問題。

eedce2aa-54af-11ec-b2e9-dac502259ad0.png

前面介紹FreeRTOS時(shí)說過,F(xiàn)reeRTOS線程切換的本質(zhì)就是定時(shí)器定一個(gè)時(shí)間,定的時(shí)間到了就切換運(yùn)行其它線程,在默認(rèn)情況下會(huì)使用Systick來作為RTOS的時(shí)間片定時(shí)器,這里不湊巧的是HAL 庫代碼已經(jīng)使用了 Systick,所以上面警告就是告訴你沖突了,我們需要解決這個(gè)沖突。

如何解決沖突?

先點(diǎn)擊“否”,將 sys 中的 Systick 換成其它定時(shí)器,比如tim1,RTOS就使用 tim1來做自己的Systick。

eef7defc-54af-11ec-b2e9-dac502259ad0.png

做了以上設(shè)置后在生成代碼時(shí)就不會(huì)再出現(xiàn)前面所提到的警告。

FreeRTOSConfig.h

在生成的工程項(xiàng)目中的頭文件目錄下有一個(gè)FreeRTOSConfig.h,如果是源碼移植的話,我們應(yīng)該修改這一個(gè).h來設(shè)置我們需要的配置,但是CubeMx提供了圖形化的配置界面,也就是我們前面所介紹的內(nèi)容,我們進(jìn)行了前面的配置后,關(guān)鍵配置信息就會(huì)記錄到這個(gè).h中,最后 FreeRTOS在工作時(shí)就會(huì)使用到.h 中的相關(guān)配置。

3、工程文件介紹

ef116aca-54af-11ec-b2e9-dac502259ad0.png

ef3cd6d8-54af-11ec-b2e9-dac502259ad0.png

CMSIS API

ef7bd1ee-54af-11ec-b2e9-dac502259ad0.png

CMSIS API

怎么樣是不是跟我們使用原生API創(chuàng)建的任務(wù)函數(shù)有點(diǎn)不一樣,那是肯定不一樣的。但是要明白這種方式只不過是給FreeRTOS原生的API穿上了一件華麗的外衣而已,函數(shù)內(nèi)部其實(shí)還是調(diào)用的原生API,只不過沒讓你看見而已。

efb75386-54af-11ec-b2e9-dac502259ad0.png

原生API

eff75d5a-54af-11ec-b2e9-dac502259ad0.png

原生API

不管是CMSIS API還是原生API函數(shù)的創(chuàng)建過程基本是一樣的,只不過函數(shù)不一樣,所以也不要太過糾結(jié)使用哪一種API,后期這兩種API都會(huì)分析它們之間的不同,包括消息隊(duì)列、信號(hào)量、互斥量等等!

CMSIS API函數(shù)主要有:

SignalEvents//信號(hào) osSignalSet:Setsignalflagsofathread. osSignalClear:Resetsignalflagsofathread. osSignalWait:Suspendexecutionuntilspecificsignalflagsareset. Mutexes//互斥鎖 osMutexCreate:Defineandinitializeamutex. osMutexWait:ObtainamutexorWaituntilitbecomesavailable. osMutexRelease:Releaseamutex. osMutexDelete:Deleteamutex. Semaphores//信號(hào)量 osSemaphoreCreate:Defineandinitializeasemaphore. osSemaphoreWait:ObtainasemaphoretokenorWaituntilitbecomesavailable. osSemaphoreRelease:Releaseasemaphoretoken. osSemaphoreDelete:Deleteasemaphore. MemoryPool//內(nèi)存池 osPoolCreate:Defineandinitializeafix-sizememorypool. osPoolAlloc:Allocateamemoryblock. osPoolCAlloc:Allocateamemoryblockandzero-setthisblock. osPoolFree:Returnamemoryblocktothememorypool. MessageQueue//消息隊(duì)列 osMessageCreate:Defineandinitializeamessagequeue. osMessagePut:Putamessageintoamessagequeue. osMessageGet:Getamessageorsuspendthreadexecutionuntilmessagearrives. MailQueue//郵箱隊(duì)列 osMailCreate:Defineandinitializeamailqueuewithfix-sizememoryblocks. osMailAlloc:Allocateamemoryblock. osMailCAlloc:Allocateamemoryblockandzero-setthisblock. osMailPut:Putamemoryblockintoamailqueue. osMailGet:Getamailorsuspendthreadexecutionuntilmailarrives. osMailFree:Returnamemoryblocktothemailqueue.

審核編輯 :李倩

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

    關(guān)注

    5

    文章

    41

    瀏覽量

    18800
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7103

    瀏覽量

    125034

原文標(biāo)題:干貨|操作系統(tǒng)RTOS為什么要搞兩種API?

文章出處:【微信號(hào):電子工程世界,微信公眾號(hào):電子工程世界】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    硬件工程師掌握的兩種基本電流檢測(cè)電路

    電流檢測(cè)兩種基本方案講解.
    的頭像 發(fā)表于 03-11 08:54 ?6377次閱讀
    硬件工程師<b class='flag-5'>要</b>掌握的<b class='flag-5'>兩種</b>基本電流檢測(cè)電路

    AMC1204有兩種封裝,SOIC-8和SOIC-16,功能一樣嗎?為什么推出兩種封裝?

    呢?AMC1204,AMC1304這樣做有什么好處嗎? 2、AMC1204有兩種封裝,SOIC-8和SOIC-16,功能一樣嗎?為什么推出兩種封裝?
    發(fā)表于 12-27 07:22

    兩種采樣方式

    兩種采樣方式.....................................
    發(fā)表于 08-08 15:04

    求教關(guān)于兩種單片機(jī)控制NRF24L01問題

    最近在240151和51之間通信沒問題但是430和51之間 就沒弄出結(jié)果。51我用的22.1184M晶振430用的8M晶振應(yīng)該是時(shí)序問題 但是沒搞出來。求知道啊~~~~~~~~~~~~~~不知道有沒有搞過的兩種不同單片機(jī)的啊
    發(fā)表于 04-16 13:33

    如何學(xué)習(xí)RTOS

    希望機(jī)會(huì)來臨時(shí)你不要有這種感覺。為了幫大家理清RTOS編程的套路,我們會(huì)在“裸機(jī)系統(tǒng)與多線程系統(tǒng)”章節(jié)簡單的分析下這兩種編程方式的區(qū)別,這個(gè)區(qū)別我稱它為學(xué)習(xí)RTOS的命門,只要打通這個(gè)任督二脈,以后
    發(fā)表于 11-22 13:45

    TI-RTOS API函數(shù)Task_construct和Task_creat的作用是什么?

    明白Task_construct()和Task_creat()個(gè)函數(shù)分別是什么作用,有沒有TI RTOS Kernel API 詳細(xì)的說明文檔?
    發(fā)表于 04-28 09:27

    HarmonyOS和OpenHarmony的DevEco兩種IDE如何共存?

      用于 HarmonyOS 的 DevEco 和用于 OpenHarmony 的 DevEco 兩種IDE如何共存?  我用的是MacOS,不能同時(shí)安裝這個(gè)IDE,想現(xiàn)鮮API9就可以繼續(xù)開發(fā),想繼續(xù)開發(fā)Harmony OS
    發(fā)表于 05-09 11:07

    兩種常見的MOSFET驅(qū)動(dòng)電路

    本內(nèi)容提供了兩種常見的MOSFET驅(qū)動(dòng)電路
    發(fā)表于 09-23 10:03 ?2.3w次閱讀
    <b class='flag-5'>兩種</b>常見的MOSFET驅(qū)動(dòng)電路

    兩種總線數(shù)據(jù)兩種傳遞形式:PIO、DMA介紹資料下載

    電子發(fā)燒友網(wǎng)為你提供兩種總線數(shù)據(jù)兩種傳遞形式:PIO、DMA介紹資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-19 08:46 ?4次下載
    <b class='flag-5'>兩種</b>總線數(shù)據(jù)<b class='flag-5'>兩種</b>傳遞形式:PIO、DMA介紹資料下載

    兩種MOS冗余驅(qū)動(dòng)方案

    兩種MOS冗余驅(qū)動(dòng)方案
    發(fā)表于 10-28 12:00 ?2次下載
    <b class='flag-5'>兩種</b>MOS冗余驅(qū)動(dòng)方案

    詳解選擇RTOS的要點(diǎn)

    對(duì)于許多嵌入式項(xiàng)目來說,在采用非實(shí)時(shí)操作系統(tǒng)(non-RTOS)的任何場合,也都可采用RTOS。但是,找到一款具有完全相同應(yīng)用編程接口(API)的匹配
    的頭像 發(fā)表于 03-31 15:20 ?1024次閱讀

    現(xiàn)在是使用標(biāo)準(zhǔn)RTOS API的時(shí)間了嗎?

    與嵌入式MCU一起使用的RTOS的名單很長,其中大多數(shù)都有自己的專有功能以及獨(dú)特的API。有些API很好,有些則不太好。實(shí)際上,好的和不太好的RTOS
    發(fā)表于 05-30 11:08 ?360次閱讀

    RTOS核心:調(diào)度和分割

    采用非實(shí)時(shí)操作系統(tǒng)(non-RTOS)的任何場合,也都可采用RTOS。但是,找到一款具有完全相同應(yīng)用編程接口(API)的匹配RTOS就相當(dāng)
    的頭像 發(fā)表于 06-22 10:46 ?1000次閱讀

    溫濕度記錄儀兩種不同的存儲(chǔ)方式介紹

    溫濕度記錄儀兩種不同的存儲(chǔ)方式,怎么操作?
    的頭像 發(fā)表于 12-20 15:23 ?1156次閱讀
    溫濕度記錄儀<b class='flag-5'>兩種</b>不同的存儲(chǔ)方式介紹

    介紹兩種常見的移相器電路原理

    移相器的電路原理可以有多種實(shí)現(xiàn)方式,以下是兩種常見的移相器電路原理
    的頭像 發(fā)表于 09-19 11:01 ?2971次閱讀
    主站蜘蛛池模板: 性高清| 五月天婷婷一区二区三区久久 | 国外一级毛片 | 永久免费在线播放 | a天堂影院 | 天天插天天干 | 国产精品天天在线 | 在线播放免费 | 国产精品毛片天天看片 | 日本三级日本三级人妇三级四 | baoyu168成人免费视频 | 六月婷婷精品视频在线观看 | 四虎影院新地址 | 亚洲一级香蕉视频 | 三级网址在线观看 | 香蕉狠狠再啪线视频 | 狠狠做深爱婷婷久久一区 | 天天摸天天碰天天碰 | 五月天在线婷婷 | 在线天堂网 | 成年视频xxxxx免费播放软件 | 婷婷五月小说 | 一级片视频在线 | 亚洲性人人天天夜夜摸 | 国产成人优优影院 | 奇米视频在线观看 | 亚洲丁香婷婷 | 欧美日韩精品一区二区另类 | 俄罗斯aaaaa一级毛片 | 国产精品午夜国产小视频 | 国模沟沟一区二区三区 | 国产内地激情精品毛片在线一 | 久久精品30| 婷婷丁香啪啪 | 色九九| 欧美成人影院免费观 | 一级 黄 色 毛片 | 亚洲人成www在线播放 | 亚洲已满18点击进入在线观看 | 成人网视频免费播放 | 日本不卡高清视频 |