【程序】RTX的使用---搭建RTX運(yùn)行的環(huán)境 文章來(lái)源:EDN博客 作者:E_arm 訪問(wèn)次數(shù):350 -------------------------------------------------------------------------------- 文章導(dǎo)讀:本程序?yàn)镽TX的使用---搭建RTX運(yùn)行的環(huán)境 使用RTX之前,,先對(duì)系統(tǒng)運(yùn)行的大概流程進(jìn)行簡(jiǎn)單的說(shuō)明。第一步要做的是先配置運(yùn)行的環(huán)境,在MDK中配置運(yùn)行環(huán)境很簡(jiǎn)單,,加入啟動(dòng)匯編代碼后,配置好系統(tǒng)時(shí)鐘,,然后對(duì)RTX的一些參數(shù)進(jìn)行配置就可以了,。然后啟動(dòng)內(nèi)核,啟動(dòng)內(nèi)核會(huì)創(chuàng)建一個(gè)進(jìn)程,??梢栽谶@個(gè)進(jìn)程里創(chuàng)建多個(gè)進(jìn)程并刪除自己。這樣多個(gè)任務(wù)就可以按時(shí)間片輪詢執(zhí)行了,。至于進(jìn)程間的通信可以通過(guò)時(shí)間標(biāo)志,、信號(hào)量、互斥量,、信箱來(lái)實(shí)現(xiàn),。 這里先舉例說(shuō)明RTX內(nèi)核的啟動(dòng)和使用。進(jìn)程間的通信后續(xù)會(huì)加上,。 1,、新建工程,加入啟動(dòng)匯編; 2,、加入RTX_Config.c文件,,對(duì)操作系統(tǒng)進(jìn)行配置?;A(chǔ)配置包括任務(wù),、堆棧大小、堆棧檢查,、硬件時(shí)鐘,、多任務(wù)輪轉(zhuǎn)、空閑任務(wù),、用戶定時(shí)器的配置,,高級(jí)配置包括硬件資源需求和配置宏。默認(rèn)的配置系統(tǒng)就能很好的工作,,如果要優(yōu)化堆棧的使用就需要進(jìn)行一些配置了,。 任務(wù): #define OS_TASKCNT 6 /*處于活動(dòng)狀態(tài)的最大任務(wù)數(shù)*/ #define OS_PRIVCNT 0 /*是否可以用戶自定義任務(wù)*/ 堆棧: #define OS_STKSIZE 50 /*默認(rèn)的堆棧大小*/ #define OS_STKCHECK 1 /*激活堆棧檢查*/ #define OS_RUNPRIV 0 /*是否運(yùn)行所有的任務(wù)在特權(quán)模式*/ 用戶定時(shí)器: #define OS_TIMERCNT 0 /*指定的用戶定時(shí)器數(shù)目*/ 硬件時(shí)鐘: #define OS_CLOCK 72000000 /*為選定的時(shí)鐘指定輸入時(shí)鐘的頻率*/ #define OS_TICK 10000 /*指定時(shí)間脈沖間隔,單位us*/ 多任務(wù)輪轉(zhuǎn) #define OS_ROBIN 1 /*是否激活多任務(wù)輪轉(zhuǎn)*/ #define OS_ROBINTOUT 5 /*標(biāo)識(shí)當(dāng)前運(yùn)行任務(wù)的時(shí)間片,,當(dāng)前時(shí)間片用完,,當(dāng)前運(yùn)行任務(wù)被終止,下一個(gè)任務(wù)被重新開(kāi)始*/ 說(shuō)明: ARM處理器共支持7種處理器模式,,其中包括:用戶模式,、系統(tǒng)模式、管理模式,、中止模式,、未定義模式、中斷模式,、快速中斷模式,。其中管理、中止,、未定義,、中斷、快速中斷歸屬于異常模式,。而異常和系統(tǒng)歸屬于特權(quán)模式,。 3、在C文件中包含頭文件#include <RTL.h>就可以使用RTX的庫(kù)函數(shù),,啟動(dòng)內(nèi)核了,。下面舉例說(shuō)明。 #include <RTL.h> OS_TID phase_A; /* 分配任務(wù)ID號(hào): phase_A*/ OS_TID phase_B; /* 分配任務(wù)ID號(hào): phase_B*/ static U64 stack[800/8]; /*自定義的堆棧大小*/ __task void init(void); __task void phase_A(void); /* 進(jìn)程函數(shù)的聲明*/ __task void phase_B(void) ; int main (void) { SYS_Init (); /* 初始化系統(tǒng)的時(shí)鐘*/ os_sys_init (init); /* 按照默認(rèn)的配置初始化第一個(gè)進(jìn)程*/ } /*第一個(gè)進(jìn)程:創(chuàng)建新的線程并刪除自己*/ __task void init (void) { phase_A = os_tsk_create (task_A, 0); /* 使用默認(rèn)的配置創(chuàng)建一個(gè)進(jìn)程*/ phase_A = os_tsk_create_user (task_B,0,&stack,sizeof(stack)); /*使用自定義的堆棧創(chuàng)建進(jìn)程*/ os_tsk_delete_self (); /*刪除自己*/ } __task void task_A(void) { /*編寫(xiě)用戶代碼*/ } __task void task_B(void) { /*編寫(xiě)用戶代碼*/ } 本文來(lái)自: 高校自動(dòng)化網(wǎng)(Www.) 詳細(xì)出處參考(轉(zhuǎn)載請(qǐng)保留本鏈接):http://www./html/MCS51/5537_2.html |
|