• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 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ī)制的實時化改造
    北安市| 富川| 兴安县| 广饶县| 巩留县| 志丹县| 当涂县| 桃园县| 苍梧县| 蓬莱市| 宁城县| 元氏县| 玉树县| 珠海市| 伊春市| 嘉祥县| 芮城县| 永州市| 原阳县| 鄂尔多斯市| 双峰县| 许昌县| 临邑县| 乌鲁木齐市| 焉耆| 马鞍山市| 贵州省| 明水县| 绥德县| 乌鲁木齐县| 青海省| 防城港市| 康保县| 铁力市| 吉隆县| 正蓝旗| 云霄县| 万州区| 新泰市| 罗源县| 农安县|