ARM 學(xué)習(xí)資料 RTX 基本內(nèi)容 嵌入式技術(shù)如何使用 RTX 數(shù)據(jù)手冊 URD-ARM-RTX-LEC-001.ppt_第1頁
ARM 學(xué)習(xí)資料 RTX 基本內(nèi)容 嵌入式技術(shù)如何使用 RTX 數(shù)據(jù)手冊 URD-ARM-RTX-LEC-001.ppt_第2頁
ARM 學(xué)習(xí)資料 RTX 基本內(nèi)容 嵌入式技術(shù)如何使用 RTX 數(shù)據(jù)手冊 URD-ARM-RTX-LEC-001.ppt_第3頁
ARM 學(xué)習(xí)資料 RTX 基本內(nèi)容 嵌入式技術(shù)如何使用 RTX 數(shù)據(jù)手冊 URD-ARM-RTX-LEC-001.ppt_第4頁
ARM 學(xué)習(xí)資料 RTX 基本內(nèi)容 嵌入式技術(shù)如何使用 RTX 數(shù)據(jù)手冊 URD-ARM-RTX-LEC-001.ppt_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、RTX操作系統(tǒng),目標,什么是RTX RTX主要功能 RTX技術(shù)規(guī)范 RTX工作原理 怎樣使用RTX內(nèi)核 怎樣設(shè)置RTX內(nèi)核 RTX編程應(yīng)用 步進馬達驅(qū)動模擬閃燈控制 交通燈控制,什么是RTX,RTX概述 RTX內(nèi)核是一個實時操作系統(tǒng)(RTOS),可以同時運行多函數(shù)或是任務(wù)。在嵌入式運用中這是非常有用的。當然也可以不用RTOS開發(fā)實時程序不需要,例如通過循環(huán)執(zhí)行一個或多個任務(wù)。但有像RTX這樣的實時操作系統(tǒng),可以解決眾多的調(diào)度、維護、定時等問題。 RTOS 可以自由地調(diào)度系統(tǒng)資源,比如CPU和內(nèi)存,并且提供一種任務(wù)間通信機制。 RTX內(nèi)核是一個強大的實時操作系統(tǒng),可以很容易地使用和運行基于 AR

2、M7TDMI、ARM9或是 Cortex-M3 CPU 內(nèi)核的微控制器。,什么是RTX,RTX概述 RTX程序使用標準的C結(jié)構(gòu)編寫,運用RealView 編譯器進行編譯。RTX.H 頭文件定義了RTX函數(shù)以及宏,可以讓輕松地聲明任務(wù)并到RTOS所有特性。 RTX內(nèi)核可以輕松地使用實時執(zhí)行達器,該實時執(zhí)行器為基于ARM CPU核的微控制器提供。RTX內(nèi)核提供了一組C函數(shù)以及C宏,可以讓開發(fā)者使用在CPU中并行運行的任務(wù)去創(chuàng)建實時運用程序。,RTX主要功能,RTX有何功能 RTX的基本功能就是開始和停止任務(wù)(進程),除此 之外還支持進程通信。 例如任務(wù)的同步、共享資源(外設(shè)或內(nèi)存)的管理、任務(wù)之間

3、消息的傳遞。,RTX進程間通信,RTX提供了幾種不同的進程通信方法 : 事件標志 信號量 互斥量 信箱 下面分別介紹RTX進程間各種通信:,RTX進程間通信,事件標志 事件標志是實現(xiàn)進程同步的主要方法,每個進程有16個事件標識可供使用,所以最多能等待16個不同的事件。也可以同時等待多個事件標志,這種情況下,如果這些事件標志是與的關(guān)系,那么這些事件標志必須都被置位后該進程才能繼續(xù)運行;如果這些事件標志是或的關(guān)系,那么這些事件標志中的一個或幾個被置位后該進程就可以繼續(xù)運行。 事件標志也可被ARM中斷功能置位。在這種機制下,通過使用ARM中斷函數(shù)設(shè)置任務(wù)等待的標志,可以使異步的外部事件和RTX核的任

4、務(wù)同步。,RTX進程間通信,信號量 在多任務(wù)實時操作系統(tǒng)中,需要特別的方法訪問共享資源。否則,這些任務(wù)對共享資源的同時訪問可能會導(dǎo)致數(shù)據(jù)的不一致或外設(shè)的錯誤操作。 解決訪問臨界資源問題的主要方法是信號量。信號量是包含了虛擬標志的軟件對象。內(nèi)核將標志給第一個請求的任務(wù)。在任務(wù)將其返回給信號量之前,沒有其他的任務(wù)可以獲取這個標志。只有擁有標志的任務(wù)才能訪問公共資源,這就阻止了其他的任務(wù)訪問和擾亂公共資源。 當信號量的標志不可用時,訪問它的進程將被掛起,一旦標志被返回,這個進程就會被喚醒。為了解決錯誤的等待條件,必須引入超時機制。,RTX進程間通信,互斥量 互斥量是解決進程同步問題的另一種方法。它們

5、用作對臨界區(qū)的訪問控制,只有擁有互斥量的進程才能訪問臨界區(qū),其他試圖訪問臨界區(qū)的進程將被阻塞。,RTX進程間通信,信箱 有時進程之間需要交換消息,這在網(wǎng)絡(luò)中是很常見的,例如TCP-IP、UDP、ISDN等。 消息就是包含協(xié)議消息或幀的內(nèi)存塊的指針,這樣的內(nèi)存塊可以動態(tài)的分配和提供給用戶。為了防止內(nèi)存泄漏,用戶有責任正確地分配和回收內(nèi)存塊。 如果接收進程訪問信箱中的消息不存在,它將被掛起,直到該消息被發(fā)送進程發(fā)送到信箱中,該被掛起的接收進程才會被喚醒。,RTX技術(shù)規(guī)范,描述RTX Kernel 支持的進程數(shù): 最多256 支持的信箱數(shù): 無限制 支持的互斥量數(shù): 無限制 支持的信號量數(shù): 每個進

6、程16個 支持的用戶定時器數(shù):無限制,RTX技術(shù)規(guī)范,描述RTX Kernel RAM 要求:最少500字節(jié) 代碼要求:小于5 K字節(jié) 硬件要求:一個或多個片上時鐘可用 用戶進程優(yōu)先級:1 255 進程切換的時間:小于5sec 60MHz, 0 ws. 中斷停止時間:小于1.8 sec 60MHz, 0 ws,使用RTX內(nèi)核的好處,RTX核的實時響應(yīng)是基于多任務(wù)并發(fā)執(zhí)行的思想,將系統(tǒng)必須響應(yīng)的任務(wù)被分成幾個更小的任務(wù),這樣做有許多好處: 現(xiàn)實世界的事件通常是由并發(fā)事件組成的,這種模式可以被映射到軟件中; 不同的事件在需要時可隨時發(fā)生,將一個任務(wù)分割成可以獨立執(zhí)行的進程,使得這種情況可以實現(xiàn);

7、任務(wù)的優(yōu)先級是可改變的;,使用RTX內(nèi)核的好處,一個大的模塊可以分割成幾個小的模塊,這樣做有利于程序的理解及模塊的管理; 通過將一個軟件分割成獨立的幾個部分可減小系統(tǒng)的復(fù)雜性,同時減少錯誤的發(fā)生,使測試更容易; 系統(tǒng)的擴展更加容易,只需要在系統(tǒng)中增加任務(wù)就可以實現(xiàn); RTX核的實時性為實時應(yīng)用程序提供了許多方便,例如可以提供一個好的中斷處理、任務(wù)的周期性響應(yīng)及等待 函數(shù)的時限等。,RTX工作原理,ARM系統(tǒng)中使用RTX可管理目標系統(tǒng)的各種資源,RTX核管理哪些資源以及是怎樣管理這些資源的 呢? 時間片中斷:RTX核使用一個標準的ARM定時器產(chǎn)生周期性的中斷,這個中斷即RTX核的時間片中斷。一些

8、RTX庫程序的超時和時間間隔值都是通過該RTX核時間片數(shù)目來設(shè)定的。 默認情況下,RTX核是通過定時器0來產(chǎn)生系統(tǒng)時鐘片。任何一個定時器都可以作為系統(tǒng)時鐘片產(chǎn)生器,在系統(tǒng)配置文件RTX Config.c可進行設(shè)置,RTX核時間片中斷每隔150000個機器周期產(chǎn)生一次,因此速度運行的標準ARM設(shè)備來說,其時鐘片是0.01秒或者說是100Hz(60MHz/4/150000)。,RTX工作原理,系統(tǒng)時鐘任務(wù) 節(jié)拍時鐘任務(wù)是系統(tǒng)任務(wù),在每個時鐘節(jié)拍中斷中執(zhí)行,具有最高的優(yōu)先級,而且不會被搶占,其主要是用于任務(wù)間的切換。 RTX任務(wù)并非真正的并行執(zhí)行,而是時間片操作。將可用的CPU時間分割成了時間片,R

9、TX內(nèi)核將其分配給每個任務(wù)。由于時間片很短(默認是10ms),顯現(xiàn)出來的就好像任務(wù)是同時運行的一樣。 任務(wù)管理:RTX的所有任務(wù)都處在一個確定的狀態(tài),這些狀態(tài)顯示了任務(wù)的情況,RTX工作原理,空閑任務(wù):當沒有任務(wù)處于就緒態(tài)時,RTX核執(zhí)行空閑任務(wù)os_idle_demon。空閑任務(wù)是一個簡單的死循環(huán),例如:for (;); 系統(tǒng)資源:RTX內(nèi)核任務(wù)由任務(wù)控制塊(TCB)定義。TCB是一個動態(tài)分配的存儲塊,包含了所有的任務(wù)控制以及變量信息。多任務(wù)協(xié)作 輪轉(zhuǎn)多任務(wù) 多任務(wù)的搶占 棧的管理 棧的管理 中斷函數(shù),配置RTX內(nèi)核,在使用RTX的嵌入式應(yīng)用程序中,必須對RTX內(nèi)核進行基礎(chǔ)配置。在文件夾Ke

10、ilARMStartup 中可以找到 RTX_Config.c ,它包含了所有的配置設(shè)置,并且可隨著不同的ARM設(shè)備而不同。在RTX_Config.c 中的配置選項可以: 指定當前運行任務(wù)的數(shù)目; 指定使用用戶自定堆棧任務(wù)的數(shù)目; 指定為每個任務(wù)分配堆棧的大小; 開啟或是禁止堆棧校核; 指定CPU定時器作為系統(tǒng)定時器;,配置RTX內(nèi)核,為選中的定時器指定輸入的時鐘頻率; 指定定時器節(jié)拍間隔; 開啟或是禁止輪轉(zhuǎn)任務(wù)調(diào)度; 為輪轉(zhuǎn)任務(wù)調(diào)度指定時間片; 定義空閑任務(wù)操作; 指定用戶定時器的數(shù)目; 為用戶定時器回調(diào)函數(shù)指定代碼; 注意: 在RL-RTX庫中沒有默認的配置,因此,必須為每一個工程添加 R

11、TX_Config.c配置文件。 為了適應(yīng)RTX內(nèi)核的特性,必須修改RTX_Config.c 中的配置。,RTX編程應(yīng)用-閃燈控制,RTX_Config.c文件中,部分配置參數(shù)說明如下表 :,RTX編程應(yīng)用-閃燈控制,RTX_Config.c文件中,部分配置參數(shù)說明如下表 :,閃燈控制,程序說明:本例程序模擬了一個步進馬達驅(qū)動。四個LED的閃爍模擬了四個輸出驅(qū)動階段的觸發(fā)。在程序中定義了以下5個任務(wù) t_phaseA; 實現(xiàn)LED1的亮滅并調(diào)用signal_func (t_phaseB);函數(shù)。 t_phaseB; 實現(xiàn)LED2的亮滅并調(diào)用signal_func (t_phaseC); 函數(shù)。

12、 t_phaseC; 實現(xiàn)LED3的亮滅并調(diào)用signal_func (t_phaseA);函數(shù)。 t_clock; 實現(xiàn)LED4的亮滅 t_lcd; 實現(xiàn)LCD屏幕內(nèi)容顏色的變化,閃燈控制,os_sys_init;實現(xiàn)了在rtx kernel初始化后,任務(wù)就開始執(zhí)行,閃燈控制,部分代碼說明 main函數(shù): int main (void) SystemInit(); /* 初始化時鐘*/ STM_EVAL_LEDInit(LED1); /* 初始化LED燈*/ STM_EVAL_LEDInit(LED2); STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LE

13、D4); STM3210C_LCD_Init(); /初始化LCD LCD_Clear(White); os_sys_init (init); /* 初始化 RTX 并且開始執(zhí)行 init任務(wù) */ ,閃燈控制,init任務(wù) _task void init (void) os_mut_init(mut_GLCD);/*初始化一個互斥量mut_GLCD,任務(wù)執(zhí)行期間持有這個互斥量,執(zhí)行完后釋放掉*/ t_phaseA = os_tsk_create (phaseA, 0); /* 創(chuàng)建任務(wù) phaseA */ t_phaseB = os_tsk_create (phaseB, 0); /*創(chuàng)建任

14、務(wù) phaseB */ t_phaseC = os_tsk_create (phaseC, 0); /*創(chuàng)建任務(wù) phaseC */ t_clock = os_tsk_create (clock, 0); /*創(chuàng)建任務(wù) clock */ t_lcd = os_tsk_create (lcd, 0); /*創(chuàng)建任務(wù) lcd */ os_evt_set (0 x0001, t_phaseA); /*發(fā)送信號事件0 x0001 到任務(wù)phaseA ,喚醒它*/ os_tsk_delete_self (); /*刪除自身,以實現(xiàn)任務(wù)的切換*/ ,閃燈控制,說明:當系統(tǒng)啟動時,在運行任何任務(wù)前RTX k

15、ernel必須先啟動起來,在C main函數(shù)中調(diào)用os_sys_init函數(shù),把第一個任務(wù)名init作為參數(shù)給os_sys_init()函數(shù)。這保證了在rtx kernel初始化后,任務(wù)就開始執(zhí)行了而不是還在main函數(shù)中執(zhí)行。然后刪除自身,實現(xiàn)任務(wù)切換。,閃燈控制,任務(wù)phaseA 分析 _task void phaseA (void) for (;) os_evt_wait_and (0 x0001, 0 xffff); /*用來等待所有事件標記為ox0001的事件發(fā)生,oxffff表示一直等待直到時間片用完 */ LED_On (LED1); /點亮LED1 signal_func (t

16、_phaseB); /* 發(fā)信號給任務(wù)t_phaseB ,給t_clock任務(wù)設(shè)了一個標記0 x0100并執(zhí)行這個任務(wù),給t_phaseB設(shè)了標記0 x0001,并執(zhí)行任務(wù)t_phaseB*/ LED_Off(LED1); /熄滅LED1 ,閃燈控制,簡要說明 在t_phaseA中調(diào)用了signal_func(t_phaseB),則給t_clock任務(wù)設(shè)了一個標記0 x0100并執(zhí)行這個任務(wù),給t_phaseB設(shè)了標記0 x0001,并執(zhí)行任務(wù)t_phaseB。由于在t_phaseA任務(wù)中調(diào)用了os_evt_wait_and (0 x0001, 0 xffff);t_phaseB的標記和t_p

17、haseA相同,所以當時間片沒到時,有一段時間t_phaseA任務(wù)和t_phaseB任務(wù)是同步的,即LED1和LED2有一段時間是同時亮的。并且給t_clock設(shè)置了事件標記,該任務(wù)實現(xiàn)了LED4每隔一定時間亮一下。t_phaseB和t_phaseC任務(wù)和t_phaseA類似。而t_lcd這個任務(wù)當時間片輪到它時才執(zhí)行。,RTX編程應(yīng)用-紅綠燈控制,簡述: TRAFFIC例子是一個行人交通燈控制的例程,介紹使用RTX核實時操作系統(tǒng)設(shè)計多任務(wù)應(yīng)用程序的基本方法。在用戶定義的時間內(nèi),交通燈亮;在這個時間外,黃燈亮;如果行人按了請求按鈕,交通燈立即顯示為行人通過狀態(tài),否則交通燈繼續(xù)運行。,RTX編程

18、應(yīng)用-紅綠燈控制,該交通燈控制可分為如下幾個進程共同實現(xiàn)的 : 初始化進程:初始化一系列的接口、啟動其他進程。一旦初始化任務(wù)完成,這個進程立刻被它自己撤銷。 命令進程:命令處理器控制交通燈的控制,該進程用于控制和處理接受到的一系列命令。 亮燈進程:當時鐘時間在活動時間范圍以內(nèi)時,控制交通燈的相位。 讀命令進程:讀取行人按鈕進程、向點燈進程發(fā)送信號 退出命令字符:如果在串行流有ESC字符,命令進程將終止顯示命令。,RTX編程應(yīng)用-紅綠燈控制,本示例主要模擬交通紅綠燈控制。在某個指定的時間內(nèi)交通燈操作,若不在這個時間范圍內(nèi)則黃等閃爍。假如有一個行人按下按鈕請求,這個交通燈立即進入可以行走的狀態(tài),否

19、則交通燈繼續(xù)工作,因此大概可分為7個任務(wù),具體如下: init ; 初始化串口并開始其它任務(wù),刪除自身。 command ;控制處理從串口接收的命令 clock ; 控制時間 blinking ; 當時間超過交通燈運行的范圍,黃燈閃爍 lights ; 當時間在交通燈運行期間控制交通燈 keyread ; 讀取行人按鈕并發(fā)送信號給任務(wù)lights get_escape;如果在串口中一個ESC字符,則命令任務(wù)獲得一個信號來終結(jié)命令任務(wù)的顯示。,RTX編程應(yīng)用-紅綠燈控制,代碼分析 TRAFFIC.C文件:包含交通燈控制程序 SERIAL.C文件:通過事件來實現(xiàn)中斷驅(qū)動串行接口。該文件包含函數(shù)pu

20、tchar及getkey,高級I/O函數(shù)printf和getline可調(diào)用這些低級的I/O函數(shù)。不使用中斷驅(qū)動串行I/O口,交通燈控制程序也可以運行,但是效果不好。 GETLINE.C文件:從串口接受到字符的命令行編輯器。該源文件也被MEASURE運用程序使用。,RTX編程應(yīng)用-紅綠燈控制,main函數(shù)和閃燈實驗一樣:當系統(tǒng)啟動時,在運行任何任務(wù)前RTX kernel必須先啟動起來,在C main函數(shù)中調(diào)用os_sys_init函數(shù),把第一個任務(wù)名init作為參數(shù)給os_sys_init()函數(shù)。這保證了在rtx kernel初始化后,任務(wù)就開始執(zhí)行了而不是還在main函數(shù)中執(zhí)行。,RTX編程

21、應(yīng)用-紅綠燈控制,init函數(shù)任務(wù)分析 _task void init (void) t_clock = os_tsk_create (clock, 0); /* 創(chuàng)建時鐘任務(wù) */ t_lcd = os_tsk_create (lcd, 0); /* 創(chuàng)建lcd任務(wù) */ os_dly_wait (50); /延時50個時鐘周期 /* 創(chuàng)建命令任務(wù) */ t_command = os_tsk_create_user (command,0, /*刪除自身,停止init任務(wù),以實現(xiàn)任務(wù)的切換*/ ,RTX編程應(yīng)用-紅綠燈控制,clock任務(wù)功能是:以秒為單位進行計時,當display_time=

22、TRUE時,發(fā)信號給command任務(wù)。 _task void clock (void) os_itv_set (100); /* 設(shè)置間隔為1秒 */ while (1) /* 時鐘死循環(huán) */ if (+ctime.sec = 60) /* 秒計時 */ ctime.sec = 0; if (+ctime.min = 60) /* 分計時 */ ctime.min = 0; if (+ctime.hour = 24) /* 小時計時 */ ctime.hour = 0; if (display_time) /* if 當設(shè)置時間等于當前時間 */ os_evt_set (0 x0001,t

23、_command); /* 發(fā)送信號給 command 任務(wù)改變時間 */ os_itv_wait (); /* 1s間隔等待 (已經(jīng)設(shè)置為 1s ) */ ,RTX編程應(yīng)用-紅綠燈控制,Lcd任務(wù)功能:字符內(nèi)容顯示,顏色,背景設(shè)置 _task void lcd (void) LCD_Clear(White); /* 清除LCD */ for (;) os_mut_wait(mut_GLCD, 0 xffff); LCD_SetBackColor(Blue); /* 設(shè)置字體背景顏色 */ LCD_SetTextColor(White); /* 設(shè)置字體顏色 */ LCD_DisplayStr

24、ingLine(Line0, “ MCBSTM32C Demo ”); /*調(diào)用LCD驅(qū)動函數(shù),顯示字符*/ LCD_DisplayStringLine(Line1, RTX Traffic ); LCD_DisplayStringLine(Line2, ); LCD_DisplayStringLine(Line8, Press KEY to PASS ); os_mut_release(mut_GLCD); os_dly_wait (400); /*延時*/ os_mut_wait(mut_GLCD, 0 xffff); LCD_SetBackColor(Blue); /* Set the Text Color */ LCD_SetTextColor(Red); /* Set the Text Color */ LCD_DisplayStringLine(Line0, MCBSTM32C Demo ); LCD_DisplayStringLine(Line1, RTX Traffic ); LCD_DisplayStringLine(Line2, ); LCD_DisplayStringLine(Line8, Press KEY to PASS ); os_mut_rel

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論