• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      RTX操作系統(tǒng)在STM32RBT6芯片中的移植與應(yīng)用

      2015-12-31 03:18:53徐自遠(yuǎn)
      課程教育研究·中 2015年12期
      關(guān)鍵詞:信號量堆棧內(nèi)核

      徐自遠(yuǎn)

      【摘要】本文介紹了MDK軟件自帶的基于時間輪轉(zhuǎn)的RTX操作系統(tǒng)在STM32F103RB芯片上的移植方法,并詳細(xì)描述了具體的移植過程和使用方法。并用一個LED輪換閃爍的實例演示了其具體應(yīng)用方法并對其操作系統(tǒng)函數(shù)庫做了簡單介紹。最后通過與其他同類操作系統(tǒng)的橫向比較,分析了其優(yōu)缺點(diǎn)及應(yīng)用范圍。

      【關(guān)鍵詞】RT?鄄RTX STM32 嵌入式操作系統(tǒng) MDK Cotex?鄄M3 ARM

      【中圖分類號】G64 【文獻(xiàn)標(biāo)識碼】A 【文章編號】2095-3089(2015)12-0248-02

      RL?鄄RTX操作系統(tǒng)是MDK官方內(nèi)置的一個實時操作系統(tǒng)。其內(nèi)核是一個基于時間片輪轉(zhuǎn)的實時操作系統(tǒng),可以同時運(yùn)行多函數(shù)或是任務(wù)。在嵌入式系統(tǒng)中嵌入實時操作系統(tǒng)是現(xiàn)在硬件開發(fā)的趨勢,對比前后臺循環(huán)方案與狀態(tài)機(jī)方案其優(yōu)點(diǎn)在于既增加了程序的可讀性,同時又提高了系統(tǒng)運(yùn)行的效率。

      1.RL-RTX操作系統(tǒng)介紹

      RL?鄄RTX操作系統(tǒng)可以自由地調(diào)度系統(tǒng)資源,比如CPU和內(nèi)存,并且提供一種任務(wù)間通信機(jī)制。 RTX內(nèi)核是一個強(qiáng)大的實時操作系統(tǒng),可以很容易地使用和運(yùn)行基于 ARM7?鄄TDMI、ARM9 或是 Cortex?鄄M3 CPU 內(nèi)核的微控制器。

      RTX程序使用標(biāo)準(zhǔn)的C結(jié)構(gòu)編寫,運(yùn)用RealViewR 編譯器進(jìn)行編譯。在RTX.H頭文件定義了RTX函數(shù)以及宏,可以讓輕松地聲明任務(wù)并達(dá)到實時操作系統(tǒng)所有特性。

      RL?鄄RTX操作系統(tǒng)內(nèi)核大致可分為任務(wù)管理、任務(wù)調(diào)度器、阻塞管理,任務(wù)間通訊管理,定時器管理,設(shè)備底層驅(qū)動6個部分。

      2.STM32F103RBT6芯片介紹

      STM32系列處理器是為高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計的ARM Cortex?鄄M3內(nèi)核芯片。本文應(yīng)用的STM32F103RBT6芯片為64腳LQFP64封裝。其工作頻率可高達(dá)72MHZ,具有128KB flash, 20KB SRAM 1個CAN總線,1個USB2.0接口,2個SPI,2個I2C接口,資源較為豐富。

      3.RL?鄄RTX操作系統(tǒng)在STM32F103RBT6芯片上的移植

      本次操作系統(tǒng)移植是基于RL?鄄RTX 4.05版進(jìn)行的。移植操作系統(tǒng)使用軟件編譯環(huán)境為Keil MDK 4.12版。下面對移植過程做詳細(xì)介紹。

      1)安裝MDK軟件

      從官網(wǎng)下載Keil MDK 4.12版并注冊安裝。

      2)下載STM32固件庫工程

      在ST官網(wǎng)下載STM32F10x_StdPeriph_Lib_V3.5.0,使用其中工程作為工程模版。

      3)建立GPIO工程

      依據(jù)ST官方庫的例子,建立一個GPIO/IOToggle 工程。修改IO端口配置與實際使用電路板的IO端口相對應(yīng)。編譯并運(yùn)行成功。

      4)移植RTX_Kernel

      RTX_Kernel操作系統(tǒng)移植步驟如下:

      3.1在main.c最前頭文件引用列中加入“#include”,調(diào)用rl.h頭文件。此頭文件包含RTX操作系統(tǒng)中運(yùn)行代碼。

      3.2項目選項里,在Target下,Operating system選擇 RTX Kernel。

      3.3復(fù)制C:\Keil\ARM\Boards\ST\STM32F10X_EVAL\

      RTX_Blinky\RTX_Config.c文件到項目目錄下,并將RTX_Config.c添加到項目中。(MDK安裝在默認(rèn)目錄C盤)

      3.4在RTX_Config.c根據(jù)硬件條件配置操作系統(tǒng)參數(shù)

      操作系統(tǒng)參數(shù)有很多,在C文件中尋找修改較為復(fù)雜,MDK4.12中可以通過向?qū)砼渲貌僮飨到y(tǒng)的各個參數(shù),其步驟為:①打開RTX_Config.c文件,文件編輯框下方有一個Configuration Wizard選項,點(diǎn)擊它可以看到任務(wù)參數(shù)選項。如圖1所示。

      圖 1 任務(wù)參數(shù)配置向?qū)?/p>

      ①Number of concurrent running tasks 設(shè)置運(yùn)行任務(wù)數(shù)

      此選項范圍為0~250個任務(wù),默認(rèn)為6個運(yùn)行任務(wù)。該數(shù)值定義了可同時運(yùn)行的最大任務(wù)數(shù)量,若設(shè)置任務(wù)超過此數(shù)量,則最后一個創(chuàng)建的任務(wù)不會運(yùn)行。

      ②Number of tasks with user?鄄provided stack 用戶定義堆棧的任務(wù)數(shù)量

      此選項范圍為0~250個任務(wù),默認(rèn)為0。此選項可定義一些需要開啟更大堆棧區(qū)域的任務(wù)。

      ③Task stack size 任務(wù)堆棧區(qū)域大小設(shè)置

      范圍為200~4096字節(jié),默認(rèn)堆棧大小為200字節(jié)。此選項為每個任務(wù)分配獨(dú)立的堆棧區(qū)域空間,RTX_Kernel為私有堆棧任務(wù)系統(tǒng),每個任務(wù)有自己私有堆棧區(qū)域,并非像RTX51一樣為公有堆棧任務(wù)系統(tǒng)。若在系統(tǒng)運(yùn)行中出現(xiàn)堆棧區(qū)域溢出的情況則需要增大此參數(shù)。

      ④Check for the stack overflow 檢查堆棧溢出

      注:開啟堆棧溢出檢查的話,會使系統(tǒng)性能降低,建議調(diào)試時開啟,程序調(diào)試完畢后關(guān)閉此選項。

      ⑤Run in privileged mode運(yùn)行在特權(quán)模式

      ⑥Timer clock value設(shè)置當(dāng)前MCU運(yùn)行頻率

      范圍為1?鄄1000000000HZ,默認(rèn)為6MHz,由于在本系統(tǒng)中使用時鐘頻率為48MHz,所以設(shè)置其為48000000。

      ⑦Timer tick value為RTX時間片時間

      范圍為1?鄄1000000us,默認(rèn)為10000us,即10ms一個時間片,可以修改此參數(shù)來改變?nèi)蝿?wù)輪轉(zhuǎn)的速度。

      ⑧Round?鄄Robin Task switching 任務(wù)時間片耗盡自動切換開關(guān)

      默認(rèn)為開啟。開啟RTX操作系統(tǒng)在某一任務(wù)時間片耗盡后會自動保存本任務(wù)堆棧并切換到其他任務(wù)中去。可點(diǎn)開此選項前的“+”號,在彈出的Round?鄄Robin Timeout 為任務(wù)設(shè)置自動切換時間,默認(rèn)為5個時間片即50ms。

      ⑨Number of user timers 用戶定時器使用數(shù)

      范圍為0~250個,定義可使用的系統(tǒng)定時器數(shù)量。

      3.5由于RTX操作系統(tǒng)用到了本芯片中的一些中斷向量,所以要移植RTX操作系統(tǒng)必須在中斷程序stm32f10x_it.c中屏蔽以下三個中斷函數(shù)。其分別是:PendSV_Handler(void),SysTick_Handler(void),SVC_Handler(void)。

      至此,RTX系統(tǒng)移植完畢,接下去就能編寫操作系統(tǒng)代碼了。

      4.操作系統(tǒng)應(yīng)用實例

      圖 2 系統(tǒng)運(yùn)行流程與操作系統(tǒng)運(yùn)行流程對比

      操作系統(tǒng)的使用能提高程序編寫的效率,特別是對一些時效管理與系統(tǒng)延時處理方面。使用前后臺循環(huán)編程方式與操作系統(tǒng)運(yùn)行流程對比如圖 4所示。

      本次系統(tǒng)移植目標(biāo)是讓兩個LED以不同頻率交替閃爍,要完成此目標(biāo)并讓任務(wù)正常運(yùn)行必須在main.c中添加初始化操作系統(tǒng)的代碼:

      1)先在main( )函數(shù)中添加系統(tǒng)初始化函數(shù)os_sys_init (init_task);。用來開啟系統(tǒng)任務(wù)并結(jié)束main函數(shù)的運(yùn)行。此時程序轉(zhuǎn)入init_task任務(wù)中。

      2)建立初始化任務(wù)函數(shù)init_task(void)。在程序中編寫初始化函數(shù)init_task( ),區(qū)別于普通的子程序,任務(wù)前需要添加前綴”__task”。在初始化任務(wù)中使用os_tsk_create( )命令創(chuàng)建task1與task2兩個任務(wù),并定義兩個OS_TID型任務(wù)變量id1,id2記錄開啟任務(wù)的返回值。最后使用os_tsk_delete_self ( );命令刪除init_task任務(wù)本身。此時task1,與task2任務(wù)被開啟。操作系統(tǒng)會根據(jù)任務(wù)輪詢機(jī)制依次進(jìn)入task1任務(wù)和task2任務(wù)。

      3)建立兩個任務(wù)函數(shù)task1,與task2。

      編譯上述代碼,將其下載到目標(biāo)板中,如果LED1與LED2兩個發(fā)光二極管能以不同的頻率閃爍發(fā)光說明移植成功了。

      RTX 操作系統(tǒng)的API比較簡單,它是基于時間片來進(jìn)行任務(wù)間輪轉(zhuǎn)調(diào)度的,即相同任務(wù)優(yōu)先級每個任務(wù)分得一定的時間片運(yùn)行時間,運(yùn)行完時間片后保存現(xiàn)場進(jìn)行任務(wù)切換。而其他實時操作系統(tǒng)中uC/OS?鄄II是不支持時間片輪轉(zhuǎn)的,從uC/OS-III開始才支持時間片輪轉(zhuǎn)調(diào)度。

      5.RTX操作系統(tǒng)函數(shù)庫簡介

      圖 4 RTX 任務(wù)系統(tǒng)組成圖

      RTX任務(wù)系統(tǒng)組成圖如圖 4所示。為了深入了解RTX操作系統(tǒng),對下面對每個模塊及其系統(tǒng)函數(shù)做簡單介紹。

      (1)任務(wù)創(chuàng)建與調(diào)度:

      創(chuàng)建任務(wù):os_tsk_create ( );創(chuàng)建指定任務(wù)。

      刪除任務(wù):os_tsk_delete_self ( );刪除任務(wù)本身。

      延時: os_dly_wait( ),延時指定數(shù)目的系統(tǒng)節(jié)拍事件。

      任務(wù)切換:os_tsk_pass( ),跳出當(dāng)前正在運(yùn)行的任務(wù)。

      (2)事件管理:os_evt_wait_and( ), os_evt_wait_or( ), os_evt_set(),isr_evt_set( )

      讓一個進(jìn)程等待一個事件,這個事件可以由其它進(jìn)程和中斷觸發(fā)。

      (3)郵箱管理:os_mbx_declare( ), os_mbx_init( ),os_mbx_wait( ),os_mbx_send( ), isr_mbx_send( ),建立一個郵箱,里面可以存放一定數(shù)目的消息(比如20條)。進(jìn)程可以等待郵箱隊列,如果郵箱里有消息,則取出,進(jìn)程繼續(xù)執(zhí)行;如果郵箱為空,則繼續(xù)等待。

      (3)互斥管理:os_mut_init ( ),os_mut_wait( ) //上鎖,os_mut_release( )//解鎖

      設(shè)置進(jìn)程獨(dú)占資源,加鎖,別的進(jìn)程需要等待本進(jìn)程,本進(jìn)程不會被時間輪轉(zhuǎn)切換。

      (4)信號量管理:os_sem_init( ), os_sem_send( ), os_sem_wait( ), isr_sem_send( )

      信號量與事件類似,進(jìn)程等待的信號量大于0時,進(jìn)程繼續(xù)執(zhí)行,信號量-1。發(fā)送信號量時,信號量+1.

      6.RTX操作系統(tǒng)與其他幾種操作系統(tǒng)需求對比

      FLASH和RAM的需求對比

      RTX是一款優(yōu)秀的基于時間輪轉(zhuǎn)片的微內(nèi)核操作系統(tǒng),適合FLASH和ROM資源不是很足的芯片,特別適合是對成本有要求,無擴(kuò)展ROM和RAM芯片的單片系統(tǒng)中使用。

      RTX的使用要比uC/OS容易,如果在Cortex?鄄M3芯片中使用實時操作系統(tǒng)的話,其優(yōu)勢較為明顯。

      參考文獻(xiàn):

      [1]《STM32自學(xué)筆記》蒙博宇編著, 北京市:北京航空航天大學(xué)出版社, 2012.

      [2]《STM32嵌入式微控制器快速上手》陳志旺等編著, 北京市:電子工業(yè)出版社, 2012.

      猜你喜歡
      信號量堆棧內(nèi)核
      基于STM32的mbedOS信號量調(diào)度機(jī)制剖析
      萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      Nucleus PLUS操作系統(tǒng)信號量機(jī)制的研究與測試
      嵌入式軟件堆棧溢出的動態(tài)檢測方案設(shè)計*
      基于堆棧自編碼降維的武器裝備體系效能預(yù)測
      μC/OS- -III對信號量的改進(jìn)
      Linux操作系統(tǒng)信號量機(jī)制的實時化改造
      重庆市| 贺兰县| 郸城县| 宝鸡市| 麻江县| 杭锦后旗| 永登县| 海门市| 类乌齐县| 林西县| 鄂托克旗| 咸阳市| 福鼎市| 宜都市| 邹城市| 荆州市| 稻城县| 张家川| 石狮市| 大安市| 沾益县| 天水市| 陇西县| 安庆市| 永定县| 中江县| 荔波县| 饶平县| 巢湖市| 河北区| 蓬安县| 庆云县| 瓮安县| 高雄市| 会理县| 平度市| 佛坪县| 远安县| 峨眉山市| 新竹县| 和田县|