第一篇:實時操作系統(tǒng)報告
實時操作系統(tǒng)課程實驗報告
專業(yè):通信1001 學(xué)號:3100601025 姓名:陳治州
完成時間:2013年6月11日
實驗 簡易電飯煲的模擬
一.實驗?zāi)康模?/p>
掌握在基于嵌入式實時操作系統(tǒng)μC/OS-II的應(yīng)用中,基于多任務(wù)的模式的編程方法。鍛煉綜合應(yīng)用多任務(wù)機(jī)制,任務(wù)間的通信機(jī)制,內(nèi)存管理等的能力。
二.實驗要求:
1.按“S”開機(jī),系統(tǒng)進(jìn)入待機(jī)狀態(tài),時間區(qū)域顯示當(dāng)前北京時間,默認(rèn)模式“煮飯”;2.按“C”選擇模式,即在“煮飯”、“煮粥”和“煮面”模式中循環(huán)選擇;
3.按“B”開始執(zhí)行模式命令,“開始”狀態(tài)選中,時間區(qū)域開始倒計時,倒計時完成后進(jìn)入“保溫”狀態(tài),同時該狀態(tài)顯示選中,時間區(qū)域顯示保溫時間;
4.按“Q”取消當(dāng)前工作狀態(tài),系統(tǒng)進(jìn)入待機(jī)狀態(tài),時間區(qū)域顯示北京時間,模式為當(dāng)前模式;
5.按“X”退出系統(tǒng),時間區(qū)域不顯示。
6.煮飯時長為30,煮粥時長為50,煮面時長為40.三.實驗設(shè)計:
1.設(shè)計思路:
以老師所給的五個程序為基礎(chǔ),看懂每個實驗之后,對borlandc的操作有了大概的認(rèn)識,重點(diǎn)以第五個實驗Task_EX為框架,利用其中界面顯示與按鍵掃描以及做出相應(yīng)的響應(yīng),對應(yīng)實現(xiàn)此次實驗所需要的功能。
本次實驗分為界面顯示、按鍵查詢與響應(yīng)、切換功能、時鐘顯示與倒計時模塊,綜合在一起實驗所需功能。2.模塊劃分圖:(1)界面顯示:
Main()Taskstart()Taskstartdispinit()在TaskStartDispInit()函數(shù)中,使用PC_DispStr()函數(shù)畫出界面。(2)按鍵查詢與響應(yīng):
Main()Taskstart()在TaskStart()函數(shù)中,用if(PC_GetKey(&key)== TRUE)判斷是否有按鍵輸入。然后根據(jù)key的值,判斷輸入的按鍵是哪一個;在響應(yīng)中用switch語句來執(zhí)行對應(yīng)按鍵的響應(yīng)。(3)切換功能:
l計數(shù)“C”按鍵的次數(shù)M=l%3Switch(m)M=0,1,2對應(yīng)于煮飯,煮粥,煮面,然后使用PC_DispStr()函數(shù)在選擇的選項前畫上“@”指示,同時,在其余兩項錢畫上“ ”以“擦出”之前畫下的“@”,注意l自增。
四.主要代碼:
#include “stdio.h” #include “includes.h” #include “time.h” #include “dos.h” #include “sys/types.h” #include “stdlib.h” #define TASK_STK_SIZE
512
#define N_TASKS
OS_STK
TaskStk[N_TASKS][TASK_STK_SIZE];
OS_STK
TaskStartStk[TASK_STK_SIZE];
INT8U
TaskData[N_TASKS];
void Task0(void *pdata);
void TaskStart(void *pdata);
static void TaskStartDispInit(void);
void main(void){
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS, OSCtxSw);
OSTaskCreate(TaskStart,(void *)0, &TaskStartStk[TASK_STK_SIZE-1], 4);
OSStart();
} void TaskStart(void *pdata){ #if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;#endif
INT8U l,m;
INT16S key;
l=0;
pdata = pdata;
TaskStartDispInit();
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
OSStatInit();
for(;;){
if(PC_GetKey(&key)== TRUE)
{
switch(key)
{
case 0x1B:
PC_DOSReturn();
break;
case 0x43:
{ m=(l%3);
switch(m)
{ case 0: {
PC_DispStr(26,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(40,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(55,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);} break;
case 1: { PC_DispStr(26,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(40,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(55,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);} break;case 2: { PC_DispStr(26,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(40,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(55,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);}
break;}
l++;} break;
} } OSCtxSwCtr = 0;
OSTimeDlyHMSM(0, 0, 1, 0);
} } static void TaskStartDispInit(void){ PC_DispStr(0, 0, “
uC/OS-II, The Real-Time Kernel
”, DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr(0, 1, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 2, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 3, “
dianfanbao shiyan
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 4, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 5, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 6, “
kai shi.zhu fan.zhu zhou.zhu mian.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 7, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 8, “
bao wen.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 9, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 10, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 11, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 12, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 13, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 14, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 15, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 16, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 17, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 18, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 19, “ 'S':kai ji.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 20, “ 'C':mo shi qie huan.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 21, “ 'B':kai shi zhi xin.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 22, “ 'Q':qu xiao dang qian gong zuo zhuang tai.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 23, “ 'X':tui chu xi tong.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
PC_DispStr(0, 24, “
<-PRESS 'ESC' TO QUIT->
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);}
五.運(yùn)行界面:
(1)主界面:
(2)顯示北京時間:
(3)模式切換:
(4)倒計時:
(5)保溫執(zhí)行時間:
六.總結(jié):
本次實驗主要以老師所給的實驗事例為基礎(chǔ),并結(jié)合老師課堂講的內(nèi)容,理解編寫程序。做實驗本實驗前,先執(zhí)行了一下事例程序,以此了解borlandc的一些基本操作;然后就是看懂每個實驗的框架和主要部分;接著,將事例程序中的部分思想運(yùn)用到本次實驗中,其中以顯示界面的思想運(yùn)用的最多;除此以外,在模式切換上花了最大的精力,最終的解決方法是以變量l作為一個計數(shù)值,并運(yùn)用switch語句在選擇的模式上畫上“@”,同時還得注意在未選擇的模式上畫上空格來“擦除”之前畫上的@;在查詢按鍵上,同樣運(yùn)用switch語句......這次實驗收獲不少,不僅對之前學(xué)的C語言有了更進(jìn)一步的鞏固,而且還強(qiáng)化了ucos里面的多任務(wù)的一些認(rèn)識;同時,以前對DOS界面很陌生,但本次實驗使用的正是DOS界面,通過幾天的經(jīng)歷,對DOS中的編譯、“help”等各個方面有了更深入的認(rèn)識,不再害怕使用DOS了。
對本課程有很大的興趣,在以后的課余時間里我會不斷學(xué)習(xí)這些知識。
第二篇:計算機(jī)實時操作系統(tǒng)的改善措施
《計算機(jī)實時操作系統(tǒng)的改善措施》
摘要:
實時系統(tǒng)在工業(yè)、商業(yè)和軍事等領(lǐng)域都有非常廣泛的用途,并且已經(jīng)有很多實際的應(yīng)用。一般來說,實時系統(tǒng)通常是比較復(fù)雜的,因為它必須處理很多并發(fā)事件的輸入數(shù)據(jù)流,這些事件的到來次序和幾率通常是不可預(yù)測的,而且還要求系統(tǒng)必須在事先設(shè)定好的時限內(nèi)做出相應(yīng)的響應(yīng)。因此,實時操作系統(tǒng)的實時性是第一要求,需要調(diào)度一切可利用的資源完成實時任務(wù)。這就要求我們設(shè)計好實時操作系統(tǒng),了解實時操作系統(tǒng)的改善措施對我們非常重要。
關(guān)鍵字:實時操作系統(tǒng);特點(diǎn);實現(xiàn)技術(shù);改善措施。
一、計算機(jī)實時操作系統(tǒng)的概念
實時操作系統(tǒng)(RTOS)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實時任務(wù)協(xié)調(diào)一致運(yùn)行的操作系統(tǒng)。因而,提供及時響應(yīng)和高可靠性是其主要特點(diǎn)。實時操作系統(tǒng)有硬實時和軟實時之分,硬實時要求在規(guī)定的時間內(nèi)必須完成操作,這是在操作系統(tǒng)設(shè)計時保證的;軟實時則只要按照任務(wù)的優(yōu)先級,盡可能快地完成操作即可。我們通常使用的操作系統(tǒng)在經(jīng)過一定改變之后就可以變成實時操作系統(tǒng)。
二、實時操作系統(tǒng)的特點(diǎn)
1、高精度計時系統(tǒng)
計時精度是影響實時性的一個重要因素。在實時應(yīng)用系統(tǒng)中,經(jīng)常需要精確確定實時地操作某個設(shè)備或執(zhí)行某個任務(wù),或精確的計算一個時間函數(shù)。這些不僅依賴于一些硬件提供的時鐘精度,也依賴于實時操作系統(tǒng)實現(xiàn)的高精度計時功能。
2、多級中斷機(jī)制
一個實時應(yīng)用系統(tǒng)通常需要處理多種外部信息或事件,但處理的緊迫程度有輕重緩急之分。有的必須立即作出反應(yīng),有的則可以延后處理。因此,需要建立多級中斷嵌套處理機(jī)制,以確保對緊迫程度較高的實時事件進(jìn)行及時響應(yīng)和處理。
3、實時調(diào)度機(jī)制
實時操作系統(tǒng)不僅要及時響應(yīng)實時事件中斷,同時也要及時調(diào)度運(yùn)行實時任務(wù)。但是,處理機(jī)調(diào)度并不能隨心所欲的進(jìn)行,因為涉及到兩個進(jìn)程之間的切換,只能在確?!鞍踩袚Q”的時間點(diǎn)上進(jìn)行,實時調(diào)度機(jī)制包括兩個方面,一是在調(diào)度策略和算法上保證優(yōu)先調(diào)度實時任務(wù);二是建立更多“安全切換”時間點(diǎn),保證及時調(diào)度實時任務(wù)。
三、實時性能主要實現(xiàn)技術(shù)
實時操作系統(tǒng)的實時性是第一要求,需要調(diào)度一切可利用的資源完成實時任務(wù)。根據(jù)響應(yīng)時間在微秒、毫秒和秒級的不同,可分為強(qiáng)實時、準(zhǔn)實時和弱實時三種。強(qiáng)實時系統(tǒng)必須是對即時的事件作出反應(yīng),絕對不能錯過事件處理時限。例如測控領(lǐng)域就是要求強(qiáng)或接近強(qiáng)實時系統(tǒng)。在機(jī)頂盒、PDA、信息家電等應(yīng)用領(lǐng)域,系統(tǒng)負(fù)荷較重的時候,允許發(fā)生錯過時限的情況而且不會造成太大的危害,準(zhǔn)和弱實時系統(tǒng)就可滿足應(yīng)用。一個強(qiáng)實時的操作系統(tǒng)通常使用以下技術(shù):
1、占先式內(nèi)核
當(dāng)系統(tǒng)時間響應(yīng)很重要時,要使用占先式內(nèi)核。當(dāng)前最高優(yōu)先級的任務(wù)一旦就緒,總能立即得到CPU 的控制權(quán),而CPU 的控制權(quán)是可知的。使用占先式內(nèi)核使得任務(wù)級響應(yīng)時間得以最優(yōu)化。
2、調(diào)度策略分析
任務(wù)調(diào)度策略是直接影響實時性能的因素。強(qiáng)實時系統(tǒng)和準(zhǔn)實時系統(tǒng)的實現(xiàn)區(qū)別主要在選擇調(diào)度算法上。選擇基于優(yōu)先級調(diào)度的算法足以滿足準(zhǔn)實時系統(tǒng)的要求,而 且可以提供高速的響應(yīng)和大的系統(tǒng)吞吐率。當(dāng)兩個或兩個以上任務(wù)有同樣優(yōu)先級,通常用時間片輪轉(zhuǎn)法進(jìn)行調(diào)度。對硬實時系統(tǒng)而言,需要使用的算法就應(yīng)該是調(diào)度 方式簡單,反應(yīng)速度快的實時調(diào)度算法了。盡管調(diào)度算法多種多樣,但大多由單一比率調(diào)度算法(RMS)和最早期限優(yōu)先算法(EDF)變化而來。前者主要用于 靜態(tài)周期任務(wù)的調(diào)度,后者主要用于動態(tài)調(diào)度,在不同的系統(tǒng)狀態(tài)下兩種算法各有優(yōu)劣。在商業(yè)產(chǎn)品中采用的實際策略常常是各種因素的折中。
3、任務(wù)優(yōu)先級分配
每個任務(wù)都有其優(yōu)先級。任務(wù)越重要,賦予的優(yōu)先級應(yīng)越高。應(yīng)用程序執(zhí)行過程中諸任務(wù)優(yōu)先級不變,則稱之為靜態(tài)優(yōu)先級。在靜態(tài)優(yōu)先級系統(tǒng)中,諸任務(wù)以及它們的時間約束在程序編譯時是已知的。反之,應(yīng)用程序執(zhí)行過程中,任務(wù)的優(yōu)先級是可變的,則稱之為動態(tài)優(yōu)先級。
4、時間的可確定性
強(qiáng)實時操作系統(tǒng)的函數(shù)調(diào)用與服務(wù)的執(zhí)行時間應(yīng)具有可確定性。系統(tǒng)服務(wù)的執(zhí)行時間不依賴于應(yīng)用程序任務(wù)的多少。系統(tǒng)完成某個確定任務(wù)的時間是可預(yù)測的。
四、實時操作系統(tǒng)中遇到的問題
1、優(yōu)先級反轉(zhuǎn)
這是實時系統(tǒng)中出現(xiàn)得最多的問題。優(yōu)先級反轉(zhuǎn)是指一個任務(wù)等待比它優(yōu)先級低的任務(wù)釋放資源而被阻塞,如果這時有中等優(yōu)先級的就緒任務(wù),阻塞會進(jìn)一步惡化。它嚴(yán)重影響了實時任務(wù)的完成。
2、任務(wù)執(zhí)行時間的抖動
各種實時內(nèi)核都有將任務(wù)延時若干個時鐘節(jié)拍的功能。優(yōu)先級的不同、延時請求發(fā)生的時間、發(fā)出延時請求的任務(wù)自身的運(yùn)行延遲,都會造成被延時任務(wù)執(zhí)行時間不同程度的提前或滯后,稱之為任務(wù)執(zhí)行時間的抖動。
3、任務(wù)劃分
程序在CPU 中是以任務(wù)的方式在運(yùn)行,所以我們要將系統(tǒng)的處理框圖轉(zhuǎn)化為多任務(wù)流程圖,對處理進(jìn)行任務(wù)劃分。任務(wù)劃分存在這樣一對矛盾:如果任務(wù)太多,必然增加系統(tǒng)任 務(wù)切換的開銷;如果任務(wù)太少,系統(tǒng)的并行度就降低了,實時性就比較差。
五、實時操作系統(tǒng)改善措施
跟據(jù)上述討論的實時操作系統(tǒng)中遇到的問題我們提出相應(yīng)的改善措施,如下所示:
1、對于優(yōu)先級反轉(zhuǎn)的改善措施
為防止發(fā)生優(yōu)先級反轉(zhuǎn),一些商業(yè)內(nèi)核(如VxWorks)使用了優(yōu)先級繼承技術(shù),當(dāng)優(yōu)先級反轉(zhuǎn)發(fā)生時,優(yōu)先級較低的任務(wù)被暫時地提高它的優(yōu)先級,使得該任務(wù)能盡快執(zhí)行,釋放出優(yōu)先級較高的任務(wù)所需要的資源。但它也不能完全避免優(yōu)先級反轉(zhuǎn),只能稱其減輕了優(yōu)先級反轉(zhuǎn)的程度,減輕了優(yōu)先級反轉(zhuǎn)對實時任務(wù)完成的影響。
優(yōu)先權(quán)極限是另一種解決方案,系統(tǒng)把每一個臨界資源與1個極限優(yōu)先權(quán)相聯(lián)系,這個極限優(yōu)先權(quán)等于系統(tǒng)此時最高優(yōu)先權(quán)加1。當(dāng)這個任務(wù)退出臨界區(qū)后,系統(tǒng)立即把它的優(yōu)先權(quán)恢復(fù)正常,從而保證系統(tǒng)不會出現(xiàn)優(yōu)先權(quán)反轉(zhuǎn)的情況。采用這種方案的另一個有利之處,是僅僅通過改變某個臨界資源的優(yōu)先級就可以使多個任務(wù)共享這個臨界資源。
2、對于任務(wù)時間抖動的改善措施 可能的解決方案有:
a.增加微處理器的時鐘頻和時鐘節(jié)拍的頻率; b.重新安排任務(wù)的優(yōu)先級; c.避免使用浮點(diǎn)運(yùn)算等。
強(qiáng)實時系統(tǒng)中,我們必須綜合考慮,充分利用各種手段,盡量減少任務(wù)執(zhí)行時間的抖動。
3、對于任務(wù)劃分的改善措施
在任務(wù)劃分時要遵循H.Gomma 原則: a. I/O原則:不同的外設(shè)執(zhí)行不同任務(wù);
b. 優(yōu)先級原則:不同優(yōu)先級處理不同的任務(wù); c. 大量運(yùn)算:歸為一個任務(wù); d. 功能耦合:歸為一個任務(wù); e. 偶然耦合:歸為一個任務(wù);
f. 頻率組合:對于周期時間,不同任務(wù)處理不同的頻率。
如果我們在具體分析一個系統(tǒng)的時候發(fā)生原則沖突的話,則要為每一個原則針對具體的系統(tǒng)設(shè)定“權(quán)重”,必要的時候可以通過計算“權(quán)重”來最終確定如何去劃分任務(wù)。
第三篇:uc-OS實時操作系統(tǒng)的應(yīng)用和學(xué)習(xí)心得
uc/OS實時操作系統(tǒng)的應(yīng)用和學(xué)習(xí)心得
這是小弟我最近的研究成果,跟大家交流一下。目前正在研究嵌入式實時軟件系統(tǒng)設(shè)計方法,有興趣的高手交流一下。這里給大家簡單剖析一下uCOS吧,希望對大家能有所幫助。不足之處多多指教,有問題可以討論。一.uC/OS-II的移植
移植uC/OS對目標(biāo)處理器有一定要求,這個可以參照<>一書中第8章的內(nèi)容.整個嵌入式系統(tǒng)分為兩大層:硬件層和軟件層.這里主要研究軟件層的架構(gòu).軟件層主要分為四個部分:實時操作系統(tǒng)內(nèi)核,與處理器相關(guān)部分,與應(yīng)用相關(guān)部分,用戶的應(yīng)用系統(tǒng).l 實時操作系統(tǒng)內(nèi)核
實時操作系統(tǒng)對系統(tǒng)資源進(jìn)行管理。主要包括任務(wù)分配和調(diào)度、系統(tǒng)時鐘服務(wù)、內(nèi)存管理、消息機(jī)制、異常處理等等。uC/OS所有系統(tǒng)服務(wù)均由內(nèi)核提供。內(nèi)核將應(yīng)用系統(tǒng)和底層硬件結(jié)合成一個完整的實時系統(tǒng)。
移植的時候內(nèi)核是不變的,開發(fā)者根據(jù)自己應(yīng)用系統(tǒng)的需要來選擇實時操作系統(tǒng)內(nèi)核,開發(fā)者不能對內(nèi)核隨意訪問,只能使用內(nèi)核提供的功能服務(wù)來開發(fā)自己的應(yīng)用系統(tǒng)。內(nèi)核確定,那么所提供的系統(tǒng)管理能力,系統(tǒng)服務(wù)也就得到了限定。開發(fā)者只能在規(guī)定的范圍內(nèi)對系統(tǒng)作些改動.2 與處理器相關(guān)的代碼
這是移植中最關(guān)鍵的部分.內(nèi)核將應(yīng)用系統(tǒng)和底層硬件有機(jī)的結(jié)合成一個實時系統(tǒng),要使同一個內(nèi)核能適用于不同的硬件體系,就需要在內(nèi)核和硬件之間有一個中間層,這就是與處理器相關(guān)的代碼.處理器不同,這部分代碼也不同.我們在移植時需要自己處理這部分代碼,可以自己編寫,也可以直接使用已經(jīng)成功移植的代碼.在uC/OS中這一部分代碼分成三個文件:OS_CPU.H, OS_CPU_A.ASM, OS_CPU_C.C 1)OS_CPU.H 包括了用#define定義的與處理器相關(guān)的常量,宏和類型定義.具體來講有系統(tǒng)數(shù)據(jù)類型定義,棧增長方向定義,關(guān)中斷和開中斷定義,系統(tǒng)軟中斷的定義等等.2)OS_CPU_A.ASM 這部分需要對處理器的寄存器進(jìn)行操作,所以必須用匯編語言來編寫.包括四個子函數(shù):OSStartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR().OSStartHighRdy()在多任務(wù)系統(tǒng)啟動函數(shù)OSStart()中調(diào)用.完成的功能是:設(shè)置系統(tǒng)運(yùn)行標(biāo)志位OSRunning = TRUE;將就緒表中最高優(yōu)先級任務(wù)的棧指針Load到SP中,并強(qiáng)制中斷返回.這樣就緒的最高優(yōu)先級任務(wù)就如同從中斷里返回到運(yùn)行態(tài)一樣,使得整個系統(tǒng)得以運(yùn)轉(zhuǎn).OSCtxSw()在任務(wù)級任務(wù)切換函數(shù)中調(diào)用的.任務(wù)級切換是通過SWI或者TRAP人為制造的中斷來實現(xiàn)的.ISR的向量地址必須指向OSCtxSw().這一中斷完成的功能:保存任務(wù)的環(huán)境變量(主要是寄存器的值,通過入棧來實現(xiàn)),將當(dāng)前SP存入任務(wù)TCB中,載入就緒最高優(yōu)先級任務(wù)的SP,恢復(fù)就緒最高優(yōu)先級任務(wù)的環(huán)境變量,中斷返回.這樣就完成了任務(wù)級的切換.OSIntCtxSw()在退出中斷服務(wù)函數(shù)OSIntExit()中調(diào)用,實現(xiàn)中斷級任務(wù)切換.由于是在中斷里調(diào)用,所以處理器的寄存器入棧工作已經(jīng)做完,就不用作這部分工作了.具體完成的任務(wù):調(diào)整棧指針(因為調(diào)用函數(shù)會使任務(wù)棧結(jié)構(gòu)與系統(tǒng)任務(wù)切換時堆棧標(biāo)準(zhǔn)結(jié)構(gòu)不一致),保存當(dāng)前任務(wù)SP,載入就緒最高優(yōu)先級任務(wù)的SP,恢復(fù)就緒最高優(yōu)先級任務(wù)的環(huán)境變量,中斷返回.這樣就完成了中斷級任務(wù)切換.OSTickISR()系統(tǒng)時鐘節(jié)拍中斷服務(wù)函數(shù),這是一個周期性中斷,為內(nèi)核提供時鐘節(jié)拍.頻率越高系統(tǒng)負(fù)荷越重.其周期的大小決定了內(nèi)核所能給應(yīng)用系統(tǒng)提供的最小時間間隔服務(wù).一般只限于ms級(跟MCU有關(guān)),對于要求更加苛刻的任務(wù)需要用戶自己建立中斷來解決.該函數(shù)具體內(nèi)容:保存寄存器(如果硬件自動完成就可以省略),調(diào)用OSIntEnter(),調(diào)用OSTimeTick(),調(diào)用OSIntExit(),恢復(fù)寄存器,中斷返回.3)OS_CPU_C.C UC/OS中共定義了6個函數(shù)在該文件中.但是最重要的是OSTaskStkInit().其他都是對系統(tǒng)內(nèi)核的擴(kuò)展時用的.OSTaskStkInit()是在用戶建立任務(wù)時系統(tǒng)內(nèi)部自己調(diào)用的,對用戶任務(wù)的堆棧進(jìn)行初始化.使建立好的進(jìn)入就緒態(tài)任務(wù)的堆棧與系統(tǒng)發(fā)生中斷并且將環(huán)境變量保存完畢時的棧結(jié)構(gòu)一致.這樣就可以用中斷返回指令使就緒的任務(wù)運(yùn)行起來.具體的入棧方式要根據(jù)不同mcu而定.需要參考用戶使用的mcu說明書.同時還要考慮mcu的棧生成方式.這需要根據(jù)具體問題來分析,在此不做過多論述.3 與應(yīng)用相關(guān)的代碼
這一部分是用戶根據(jù)自己的應(yīng)用系統(tǒng)來定制合適的內(nèi)核服務(wù)功能.包括兩個文件:OS_CFG.H, INCLUDES.H.OS_CFG.H來配置內(nèi)核,用戶根據(jù)需要對內(nèi)核進(jìn)行定制,留下需要的部分,去掉不需要的部分,設(shè)置系統(tǒng)的基本情況.比如系統(tǒng)可提供的最大任務(wù)數(shù)量,是否定制郵箱服務(wù),是否需要系統(tǒng)提供任務(wù)掛起功能,是否提供任務(wù)優(yōu)先級動態(tài)改變功能等等.INCLUDES.H系統(tǒng)頭文件,整個實時系統(tǒng)程序所需要的文件,包括了內(nèi)核和用戶的頭文件.4 用戶應(yīng)用系統(tǒng)
這是整個實時系統(tǒng)的最高層,用戶通過利用實時操作系統(tǒng)提供的服務(wù)來開發(fā)自己的具體程序.二.用戶應(yīng)用系統(tǒng)編寫的模式
kernel提供給用戶一些功能函數(shù),使得用戶的系統(tǒng)建立更加方便,但是kernel內(nèi)部不會處理用戶的工作,對于整個系統(tǒng)的具體應(yīng)用工作還得需要用戶自己去考慮,如何利用好這些功能服務(wù)函數(shù)就成為一個比較重要的問題.1.main函數(shù)的結(jié)構(gòu) void main(void){ 初始化系統(tǒng)的硬件;OSInit();任務(wù)的建立,消息機(jī)制的建立;OSStart();} 這里需要的是在OSStart()執(zhí)行之前不得啟動中斷,硬件系統(tǒng)還不能工作.必須先讓軟件系統(tǒng)進(jìn)入工作狀態(tài)后才行.2.中斷的結(jié)構(gòu) ISR: { 保存處理器寄存器的值;調(diào)用OSIntEnter();執(zhí)行用戶的工作;調(diào)用OSIntExit();恢復(fù)處理器寄存器的值;RTI;} 用戶的中斷形式和以前一樣,沒有什么大的變化,僅僅是在原來用戶ISR的基礎(chǔ)上在固定的位置加了兩個函數(shù):OSIntEnter(), OSIntExit().3.各個任務(wù)的結(jié)構(gòu) void YourTask(void){ for(;;){ 用戶代碼 調(diào)用的系統(tǒng)服務(wù) } } 在任務(wù)啟動函數(shù)執(zhí)行完后,系統(tǒng)會切換到最高優(yōu)先級的任務(wù)去執(zhí)行,此時,可以將系統(tǒng)硬件部分的啟動放在該任務(wù)的最前邊,僅僅是啟動時執(zhí)行一次,主要是啟動系統(tǒng)的節(jié)拍中斷,或者一些必須在多任務(wù)系統(tǒng)調(diào)度后才能初始化的部分,使系統(tǒng)的真正開始工作,達(dá)到軟件硬件的基本同步.Void HighestPrioTask(void){ OSStartHardware();For(;;){ 用戶代碼 調(diào)用的系統(tǒng)服務(wù) } } 用戶可以按照這些格式去編寫自己的任務(wù),建立自己的應(yīng)用系統(tǒng).
第四篇:嵌入式Linux實時操作系統(tǒng)習(xí)題總結(jié)
第1章
1.嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計算機(jī)硬件系統(tǒng)之中。嵌入式系統(tǒng)一般有3個主要的組成部分:硬件、實時操作系統(tǒng)以及應(yīng)用軟件。
2.嵌入式系統(tǒng)的三要素是嵌入、專用、計算機(jī);即以應(yīng)用為中心、以計算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機(jī)系統(tǒng)。
3.目前國際較為知名的有:VxWorks、NeutrinoRTOS、Nucleus Plus、OS/
9、VRTX、LynuxOS,RTLinux、BlueCat RT等。
4.嵌入式系統(tǒng)一般由硬件層、中間層、軟件層和功能層組成。其作用分別如下:
(1)硬件層 :由嵌入式微處理器、外圍電路和外設(shè)組成。操作系統(tǒng)和應(yīng)用程序都可以固化在ROM或者Flash中。為方便使用,有的模塊在此基礎(chǔ)上增加了LCD、鍵盤、USB接口,以及其他一些功能的擴(kuò)展電路。
(2)中間層 :硬件層與軟件層之間為中間層,其作用將系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動程序與硬件無關(guān);
(3)軟件層 :主要是操作系統(tǒng),有的還包括文件系統(tǒng)、圖形用戶接口和網(wǎng)絡(luò)系統(tǒng)等。操作系統(tǒng)是一個標(biāo)準(zhǔn)的內(nèi)核,將中斷、I/O、定時器等資源都封裝起來,以方便用戶使用。(4)功能層 :由基于操作系統(tǒng)開發(fā)的應(yīng)用程序組成,用來完成對被控對象的控制功能。5.非占先式調(diào)度法也稱作合作型多任務(wù)(cooperative multitasking),各個任務(wù)彼此合作共享一個CPU。中斷服務(wù)可以使一個高優(yōu)先級的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原來被中斷了的那個任務(wù),直到該任務(wù)主動放棄CPU的使用權(quán)時,那個高優(yōu)先級的任務(wù)才能獲得CPU的使用權(quán)。當(dāng)系統(tǒng)響應(yīng)時間很重要時,要使用占先式(preemptive)內(nèi)核。最高優(yōu)先級的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個運(yùn)行著的任務(wù)使一個比它優(yōu)先級高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了。6.在實時系統(tǒng)中,如果系統(tǒng)在指定的時間內(nèi)未能實現(xiàn)某個確定的任務(wù),會導(dǎo)致系統(tǒng)的全面失敗,這樣的系統(tǒng)被稱硬實時系統(tǒng)。在弱實時系統(tǒng)中,超時卻不會發(fā)生致命的錯誤。其實時性的要求比硬實時系統(tǒng)要差一些。
7.嵌入式系統(tǒng)的設(shè)計步驟及各部分的主要工作如下。(1)需求分析階段,羅列出用戶的需求;
(2)體系結(jié)構(gòu)設(shè)計階段,描述系統(tǒng)的功能如何實現(xiàn);
(3)詳細(xì)設(shè)計階段,進(jìn)行硬件系統(tǒng)與軟件系統(tǒng)的分類劃分,以決定哪些功能用硬件實現(xiàn),哪些用軟件實現(xiàn);
(4)系統(tǒng)集成,把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進(jìn)行調(diào)試,發(fā)現(xiàn)并改進(jìn)在設(shè)計過程中的錯誤;
(5)系統(tǒng)測試,對設(shè)計好的系統(tǒng)進(jìn)行測試,看其是否滿足給定的要求。8.Linux作為嵌入式操作系統(tǒng)的優(yōu)勢主要有以下幾點(diǎn):
(1)可應(yīng)用于多種硬件平臺。
(2)Linux的高度模塊化使添加部件非常容易。
(3)Linux是一個和Unix相似、以內(nèi)核為基礎(chǔ)的、具有完全的內(nèi)存訪問控制,支持大量硬件的一種通用操作系統(tǒng)。
(4)Linux可以隨意地配置,不需要任何的許可證或商家的合作關(guān)系。
(5)Linux帶有Unix用戶熟悉的完善的開發(fā)工具。其強(qiáng)大的語言編譯器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。9. Linux執(zhí)行進(jìn)程調(diào)度一般是在以下情況發(fā)生的:(1)正在執(zhí)行的進(jìn)程運(yùn)行完畢;
(2)正在執(zhí)行的進(jìn)程調(diào)用阻塞原語將自己阻塞起來進(jìn)入等待狀態(tài);(3)正在執(zhí)行的進(jìn)程調(diào)用了P原語操作,從而因資源不足而被阻塞;(4)執(zhí)行中的進(jìn)程提出I/O請求后被阻塞;(5)系統(tǒng)分配的時間片已經(jīng)用完;
(6)就緒隊列中的某個進(jìn)程的優(yōu)先級變得高于當(dāng)前運(yùn)行進(jìn)程的優(yōu)先級。
第4章
1、Linux 內(nèi)核的編譯菜單有好幾個版本,運(yùn)行:
(1)make config:進(jìn)入命令行,可以一行一行的配置,但使用不十分方便。
(2)make menuconfig:大多數(shù)開發(fā)人員使用的Linux 內(nèi)核編譯菜單,使用方便。
(3)make xconfig:在2.4.X 以及以前版本中xconfig 菜單是基于TCL/TK 的圖形庫的。
2、在完成內(nèi)核的裁減之后,內(nèi)核的編譯就只要執(zhí)行以下幾條命令: make clean
編譯內(nèi)核之前先把環(huán)境給清理干凈。make dep
編譯相關(guān)依賴文件 make zImage
創(chuàng)建內(nèi)核鏡像文件 make modules 創(chuàng)建內(nèi)核模塊。
make install
把相關(guān)文件拷貝到默認(rèn)的目錄。
3、此命令是裝載壓縮映像文件zImage到flash存儲器中,地址是kernel分區(qū),并采用xmodem傳輸協(xié)議。
4、此命令是設(shè)置網(wǎng)卡1的地址192.168.1.1,掩碼為255.255.255.0,不寫netmask參數(shù)則默認(rèn)為255.255.255.0。
5、此命令將nfs服務(wù)的共享目錄sharedir加載到/mnt/nfs。
6、此命令是裝載根文件系統(tǒng)root.cramfs到flash存儲器中,地址是根文件系統(tǒng)分區(qū),并采用xmodem傳輸協(xié)議。
7、這個命令的操作同時進(jìn)行了分區(qū)和格式化,0~128K存放vivi,128K~192K存放VIVI控制臺指令,192K~1216K存放kernel,1216K~4288K存放root,其余部分存放應(yīng)用程序。
第6章
1.使用虛擬地址尋址整個系統(tǒng)的主存和輔存的方式在現(xiàn)代操作系統(tǒng)中被稱為虛擬內(nèi)存。虛擬內(nèi)存的管理方法使系統(tǒng)既可以運(yùn)行體積比物理內(nèi)存還要大的應(yīng)用程序,也可以實現(xiàn)“按需調(diào)頁”策略,既滿足了程序的運(yùn)行速度,又節(jié)約了物理內(nèi)存空間。2.進(jìn)程內(nèi)存區(qū)域涉及到5種數(shù)據(jù)段,即:
①代碼段:代碼段是用來存放可執(zhí)行文件的操作指令。
②數(shù)據(jù)段:數(shù)據(jù)段用來存放可執(zhí)行文件中已初始化全局變量。③BSS段:BSS段包含了程序中未初始化的全局變量。④堆(heap):用于存放進(jìn)程運(yùn)行中被動態(tài)分配的內(nèi)存段,它的大小并不固定,可動態(tài)擴(kuò)張或縮減。
⑤棧:棧是用戶存放程序臨時創(chuàng)建的局部變量。3.在Linux系統(tǒng)中,內(nèi)核在最高級執(zhí)行,也稱為“系統(tǒng)態(tài)”,在這一級任何操作都可以執(zhí)行。而應(yīng)用程序則執(zhí)行在最低級,即所謂的“用戶態(tài)”。在這一級處理器禁止對硬件的直接訪問和對內(nèi)存的未授權(quán)訪問。模塊是在所謂的“內(nèi)核空間”中運(yùn)行的,而應(yīng)用程序則是在“用戶空間”中運(yùn)行的。它們分別引用不同的內(nèi)存映射,也就是程序代碼使用不同的“地址空間”。4.共享內(nèi)存區(qū)域是被多個進(jìn)程共享的一部分物理內(nèi)存。如果多個進(jìn)程都把該內(nèi)存區(qū)域映射到自己的虛擬地址空間,則這些進(jìn)程就都可以直接訪問該共享內(nèi)存區(qū)域,從而可以通過該區(qū)域進(jìn)行通信。共享內(nèi)存是進(jìn)程間共享數(shù)據(jù)的一種最快的方法,一個進(jìn)程向共享內(nèi)存區(qū)域?qū)懭肓藬?shù)據(jù),共享這個內(nèi)存區(qū)域的所有進(jìn)程就可以立刻看到其中的內(nèi)容。5.內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進(jìn)程(swapd)定期由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進(jìn)程調(diào)度的唯一原因。當(dāng)一個進(jìn)程存取的內(nèi)存映射被換出時,內(nèi)存管理向文件系統(tǒng)發(fā)出請求,同時,掛起當(dāng)前正在運(yùn)行的進(jìn)程。
第9章
1.參考答案:
Mutex互斥量,用于操作某個臨界資源時對該資源上鎖,以實現(xiàn)互斥地對獨(dú)占資源的使用。Semophore信號燈,信號燈內(nèi)有一計數(shù)器,可以用于對多個同類資源的分配。
Condition條件變量,條件變量用于等待信號。當(dāng)一個線程需要等待某個信號時,就可到條件變量上等待,當(dāng)信號具備時,系統(tǒng)會喚醒該線程繼續(xù)運(yùn)行。2.參考答案:
本地:共享內(nèi)存+信號量,適合于大量數(shù)據(jù)傳輸。Linux支持系統(tǒng)V和POSIX的共享內(nèi)存和信號量。(5分)
遠(yuǎn)程:Socket+應(yīng)用協(xié)議。適合于跨網(wǎng)絡(luò)的(大量)數(shù)據(jù)傳輸。Linux支持BSD的socket。應(yīng)用層協(xié)議需要自行設(shè)計。(5分)
3.答案要點(diǎn):程序是編譯后形成的可執(zhí)行代碼,是靜止的。進(jìn)程是程序的一次執(zhí)行,是活動的。線程是進(jìn)程的可執(zhí)行單元,同一進(jìn)程的不同線程共享進(jìn)程的資源和地址空間。4.兩種實現(xiàn)方法,一種是繼承Thread,另外一種是實現(xiàn)接口Runnable。
同步的實現(xiàn)方法有兩種,分別是synchronized, wait與notify。用synchronized可以對一段代碼、一個對象及一個方法進(jìn)行加鎖。用wait與notify可以使對象處于等待及喚醒方式導(dǎo)致同步,因為每個對象都直接或間接的繼承了Object類。
5、什么是BootLoader?主要有幾種工作模式及主要功能是什么? 答:
Bootloader就是操作系統(tǒng)內(nèi)核運(yùn)行的一段小程序,完成進(jìn)行初始化系統(tǒng)硬件設(shè)置的任務(wù),(2分)
分為啟動加載模式和下載模式。(1啟動加載模式
啟動加載(Boot laoding)模式是指 Bootloader 從目標(biāo)機(jī)上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個過程并沒有用戶的介入。(2分)(2)下載模式
在下載模式下,目標(biāo)機(jī)上的 Bootloader 將先通過串口連接或網(wǎng)絡(luò)連接等通信手段從宿主機(jī)下載文件。(2分)
6、簡述Bootloader有何作用?
答案要點(diǎn):(1)首先,bootloader是在特定硬件平臺運(yùn)行的程序,嚴(yán)重依賴于硬件平臺,需要移植;(2)是系統(tǒng)上電之后,第一個運(yùn)行的程序,系統(tǒng)在上電或復(fù)位時通常都從地址 0x0 處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的 Boot Loader 程序;(3)bootloader程序的設(shè)計目標(biāo)是啟動嵌入式操作系統(tǒng),嵌入式操作系統(tǒng)的啟動需要一定的條件,這些條件由bootloader來滿足;(4)Bootloader一般具有對存儲器和網(wǎng)絡(luò)接口操作的功能;如擦除、讀寫Flash,通過USB、串口下載文件等
第五篇:嵌入式實時操作系統(tǒng) 項目開發(fā)總結(jié)報告
項目開發(fā)總結(jié)報告
分 類:軟件項目計劃 使用者:E-fanciers
Version: 1.0
項 目 承 擔(dān) 隊伍:煙臺大學(xué)
計算機(jī)學(xué)院 E-fanciers小組撰 寫 人(簽名): 許超 于歌
完 成 日 期: 2009-7-16 本文檔使用小組: E-fanciers小組
評審負(fù)責(zé)人(簽名): 孝瑞
評 審 日 期: 2009-7-19
目 錄
一、引言.............................................3
1.1編寫目的.......................................3 1.2項目背景.......................................3 1.3定義...........................................3 1.4參考資料:.....................................3
二、開發(fā)結(jié)果........................錯誤!未定義書簽。
2.1產(chǎn)品..........................錯誤!未定義書簽。2.2主要功能......................錯誤!未定義書簽。2.3所用工時.......................................4 2.3所用機(jī)時.......................................4 2.3進(jìn)度...........................................4
三、評價............................................4
3.1生產(chǎn)率評價.....................................4 3.2技術(shù)方案評價...................................4 3.3產(chǎn)品質(zhì)量評價...................................4
四、經(jīng)驗與教訓(xùn).......................................4
一.引言
1.編寫目的(闡明編寫總結(jié)報告的目的,指明讀者對象。)
詳細(xì)陳述項目開發(fā)過程,對項目開發(fā)做最后的總結(jié)完善,說明項目開發(fā)過程中遇到的難題及解決方案。
2.項目背景(說明項目的來源、委托單位、開發(fā)單位及主管部門。)
隨著微電子技術(shù)、計算機(jī)技術(shù)和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,嵌入式系統(tǒng)已廣泛應(yīng)用在各個領(lǐng)域,包括消費(fèi)電子、汽車電子、網(wǎng)絡(luò)通信、工業(yè)設(shè)備、航空航天和國防軍事等。隨著嵌入式技術(shù)的發(fā)展,工業(yè)領(lǐng)域也一改過去傳統(tǒng)的單片機(jī)應(yīng)用模式,逐漸將一些新嵌入式技術(shù)引入到系統(tǒng)中。特別是作為軟件基礎(chǔ)的嵌入式操作系統(tǒng)已廣泛為業(yè)界所接受,借以提高系統(tǒng)的開發(fā)效率和運(yùn)行效率。是否采用嵌入式操作系統(tǒng),已成為工業(yè)設(shè)備品質(zhì)優(yōu)劣的標(biāo)志之一。
當(dāng)今的嵌入式操作系統(tǒng)領(lǐng)域呈現(xiàn)百家爭鳴的狀態(tài)。據(jù)最近的調(diào)查數(shù)據(jù)顯示,嵌入式操作系統(tǒng)有數(shù)十種之多的。這種多樣性存在是必然的,是由嵌入式系統(tǒng)的定制性所決定的,是針對各個領(lǐng)域和行業(yè)的不同需求的應(yīng)對。也就是說,各個嵌入式操作系統(tǒng)都有自己的應(yīng)用領(lǐng)域,針對不同的應(yīng)用沒有絕對的優(yōu)劣之分,不會出現(xiàn)一種操作系統(tǒng)壟斷的局面。自主開發(fā)嵌入式操作系統(tǒng)絕對不是多余的,也是是對這種多樣性的自然順應(yīng),應(yīng)該可擁有自己的用武之地。有些國內(nèi)嵌入式廠商將希望寄托在Linux之上,以為它可以幫助解決所面臨的版稅和安全等問題。但事實并非完全如此,至少在嵌入式系統(tǒng)領(lǐng)域。首先,Linux還是泊來貨,國人并未掌握其核心技術(shù)和進(jìn)程,也并未解決對外依賴的問題。其次,Linux是為桌面系統(tǒng)而設(shè)計的,并不能很好地滿足嵌入式系統(tǒng)高效性和靈活性的要求;再次,Linux的一統(tǒng)也違背了嵌入式系統(tǒng)應(yīng)用靈活定制的本質(zhì)特性。
3.定義(列出報告中用到的專門術(shù)語定義和縮寫詞的原意。)
int taskInit(void);
/*創(chuàng)建一個任務(wù), 返回: 返回任務(wù)編號tid, >0: 成功, 其他: 失敗.*/ /*name: 任務(wù)名稱, entryPtr : 任務(wù)函數(shù)入口, stack_size: 任務(wù)棧大小, priority: 任務(wù)優(yōu)先級*/ int taskCreate(char *name, void *entryPtr, int stack_size, int priority);/*啟動一個任務(wù), 讓taskCreat創(chuàng)建的任務(wù)參加調(diào)度*/ int taskStart(unsigned char tid);/*tid: 任務(wù)編號, 由taskCreate返回*/ int taskPriorityGet(unsigned char tid);int taskPrioritySet(unsigned char tid, int newPriority);/*獲取和設(shè)置任務(wù)優(yōu)先級, 用于動態(tài)調(diào)整*/ int taskSuspend(unsigned char tid);/*將任務(wù)掛起, 該任務(wù)退出調(diào)度*/ int taskDelete(unsigned char tid);/*將任務(wù)刪除 該任務(wù)退出調(diào)度且回收任務(wù)分配的資源*/ int semCreate(void);/*互斥信號量創(chuàng)建, 返回信號量標(biāo)識sid, <0: 失敗*/ int semTake(int sid);int semGive(int sid);/*互斥信號量獲取和釋放*/ int taskSleep(int ticks);/*任務(wù)睡眠(非忙等), 由任務(wù)自己調(diào)用, 主動阻塞一段時間.時間單位為tick, 即10ms*/ 4.參考資料(列出這些資料的作者、標(biāo)題、編號、發(fā)表日期、出版單位或資料來源,可包括:(1)項目開發(fā)計劃;(2)需求規(guī)格說明書;(3)概要設(shè)計說明書;(4)詳細(xì)設(shè)計說明書;(5)用戶操作手冊;(6)測試計劃;(7)測試分析報告(8)本報告引用的其他資料、采用的開發(fā)標(biāo)準(zhǔn)或開發(fā)規(guī)范。)(1)軟件項目計劃(2)需求規(guī)格說明(3)軟件編寫向?qū)?/p>
(4)國家軟件開發(fā)文檔標(biāo)準(zhǔn)模板
二.開發(fā)結(jié)果
1.產(chǎn)品(可包括:(1)列出各部分的程序名稱、源程序行數(shù)(包括注釋行)或目標(biāo)程序字節(jié)數(shù)及程序總計數(shù)量、存儲形式;產(chǎn)品文檔名稱等。)
2.主要功能及性能 基本功能
1.基于參考硬件平臺,建立硬件抽象層,完成基本硬件初始化,建立時鐘中斷; 2.在硬件抽象層基礎(chǔ)上,建立多任務(wù)操作系統(tǒng)環(huán)境; 3.任務(wù)調(diào)度采用同級時間片輪詢機(jī)制;
4.實現(xiàn)任務(wù)間基本通訊機(jī)制:互斥信號量(共享內(nèi)存); 5.實現(xiàn)基本的時鐘管理機(jī)制:任務(wù)睡眠阻塞;
6.實現(xiàn)一個RS232串口驅(qū)動?;诖隍?qū)動實現(xiàn)一個命令行Shell(用一個獨(dú)立的任務(wù)實現(xiàn)),可在超級終端顯示信息和執(zhí)行命令。
擴(kuò)展功能
7.任務(wù)區(qū)分優(yōu)先級,在同級輪詢調(diào)度基礎(chǔ)上添加優(yōu)先級調(diào)度機(jī)制; 8.不同優(yōu)先級任務(wù)之間實現(xiàn)搶占調(diào)度;
9.在搶占調(diào)度的基礎(chǔ)上實現(xiàn)優(yōu)先級逆轉(zhuǎn)保護(hù),避免邏輯死鎖問題; 10.將代碼移植到另一個硬件平臺上運(yùn)行,驗證代碼移植性。3.所用工時(按人員的不同層次分別計時。)
編碼成員工時:60小時/周,共約400小時;
編寫文檔成員:共約60小時。
4.所用機(jī)時
5小時/天,共約300小時的機(jī)時。
5.進(jìn)度(給出計劃進(jìn)度與實際進(jìn)度的對比。)
根據(jù)敏捷開發(fā)方法的指導(dǎo),每天查漏補(bǔ)缺,實際進(jìn)度基本和計劃進(jìn)度一致。三.評價
1.生產(chǎn)率評價(如平均每人每周源程序行數(shù)、文檔的字?jǐn)?shù)等。)
源程序:200行/周
文檔:1500字/周
2.技術(shù)方案評價
嚴(yán)格遵循開發(fā)流程,運(yùn)用科學(xué)開發(fā)方法。
3.產(chǎn)品質(zhì)量評價
按照大賽要求完成了應(yīng)有功能的基礎(chǔ)上有所添加自己小組的特色,譬如,設(shè)置相應(yīng)的出錯處理機(jī)制,為加強(qiáng)該系統(tǒng)的安全性與穩(wěn)定性也做了相應(yīng)的措施,總體來說,我們小組開發(fā)的嵌入式實時操作系統(tǒng)功能良好,穩(wěn)定性強(qiáng)。
四.經(jīng)驗與教訓(xùn)
經(jīng)過近兩個月的對嵌入式實時操作系統(tǒng)的開發(fā),經(jīng)驗學(xué)到了不少,當(dāng)然也得到了很多教訓(xùn),因為小組的不注意,導(dǎo)致2138開發(fā)板沒法繼續(xù)工作,有的時候會很耽誤時間,有的時候進(jìn)度報告拖后一點(diǎn)才寫,也因此導(dǎo)致過進(jìn)度不明了,不過,大多數(shù)時候,我們小組成員都認(rèn)真對待大賽,努力想把自己小組的作品做的更完美,最后終于成功交付任務(wù),完成大賽。