?? ——嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0062)http://www.21ic.com/new_info/news/files/news/2003103124839.asp -->
<HTML><HEAD><TITLE>——嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
FONT-SIZE: 12px
}
INPUT {
FONT-SIZE: 12px; font-fammily: verdana,宋體
}
A:link {
FONT-SIZE: 12px; COLOR: #0000ff; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:visited {
FONT-SIZE: 12px; COLOR: #660066; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:hover {
FONT-SIZE: 12px; COLOR: #ff0000; TEXT-DECORATION: underline
}
.unnamed1 {
FONT-SIZE: 12px; FONT-FAMILY: "Arial", "Helvetica", "sans-serif"
}
.white {
FONT-SIZE: 12px; COLOR: #ffffff; LINE-HEIGHT: 16px
}
.b:link {
FONT-SIZE: 12px; COLOR: #3366cc; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.b:visited {
FONT-SIZE: 12px; COLOR: #813f1b; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
.b:hover {
FONT-SIZE: 12px; COLOR: #ffa037; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.148xg {
FONT-SIZE: 14px; COLOR: #0000ff; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: underline
}
.128dt {
FONT-SIZE: 14px; COLOR: #9999cc; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.heigh150 {
LINE-HEIGHT: 150%
}
</STYLE>
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff leftMargin=0 topMargin=5>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
<TBODY>
<TR>
<TD align=middle width=168 height=80><IMG
src="——嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究.files/21ic.gif"></TD>
<TD width=472>
<SCRIPT language=javascript
src="——嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究.files/ads.htm"></SCRIPT>
</TD>
<TD height=80>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=b12 align=middle height=30><FONT
face="Arial, Helvetica, sans-serif" color=#000000>
<SCRIPT language=JavaScript
src="——嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究.files/date.js"></SCRIPT>
</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=1 width=768 align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width=766 align=left border=0>
<TBODY>
<TR bgColor=#d8d6ba>
<TD width=3 height=20></TD>
<DIV id=Position></DIV>
<TD width=378>
<FORM name=email
action=http://www.21icsearch.com/buzi/mail2/chkemail.asp method=post
target=_blank><B>電子工程周刊:</B> <INPUT class=main
style="BORDER-RIGHT: #0097cf 1px solid; BORDER-TOP: #0097cf 1px solid; BORDER-LEFT: #0097cf 1px solid; BORDER-BOTTOM: #0097cf 1px solid; BACKGROUND-COLOR: #ffffff"
maxLength=255 size=30 value=輸入您的Email name=email> <INPUT class=jbutton type=submit value=訂閱> </TD></FORM>
<DIV></DIV>
<DIV id=Time></DIV>
<DIV id=Image></DIV>
<DIV id=Title></DIV>
<TD width=418>
<MARQUEE onmouseover=this.scrollDelay=99000
onmouseout=this.scrollDelay=80 scrollAmount=2 scrollDelay=80
width="80%"><FONT color=#cc0000><IMG height=12
src="——嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究.files/xilan_arrow.gif"
width=16>每周自動(dòng)接收行業(yè)新聞,技術(shù)資料,設(shè)計(jì)文章</FONT></MARQUEE></TD>
<DIV></DIV>
<TD width=9></TD></TR></TBODY></TABLE>
<DIV></DIV>
<DIV id=Time></DIV>
<DIV id=Image></DIV>
<DIV id=Title><TD< td></DIV></TD></TR></TBODY></TABLE></TD></TR></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=617 height=2>
<TABLE cellSpacing=0 cellPadding=0 width=583 align=center border=0>
<TBODY>
<TR>
<TD align=middle height=31><FONT size=4><B>嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究
</B></FONT></TD></TR>
<TR>
<TD align=middle height=15>文章作者:崔樹林<BR>文章類型:設(shè)計(jì)應(yīng)用
文章加入時(shí)間:2003年10月31日2:48</TD></TR>
<TR>
<TD align=right><FONT color=#cc0000>文章出處:單片機(jī)及嵌入式系統(tǒng)應(yīng)用</FONT> </TD></TR>
<TR>
<TD height=15>
<HR width="100%" noShade SIZE=1>
</TD></TR>
<TR>
<TD height=15>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=530 align=center border=0>
<TBODY>
<TR>
<TD class=heigh150 height=15>
<DIV id=Content>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<B>摘要:</B></SPAN>嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)在軟件編程上有一定的相似性。這種相似的特性,使得我們可以將個(gè)別系統(tǒng)的編程經(jīng)驗(yàn)推廣到更多的系統(tǒng)上。本文就μC/OS-II內(nèi)核的任務(wù)管理和內(nèi)存管理進(jìn)行基本的介紹,并介紹一個(gè)通用的應(yīng)用軟件結(jié)構(gòu)。然后,與之相對應(yīng),提供兩個(gè)不同操作系統(tǒng)下的應(yīng)用實(shí)例。</P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<B>關(guān)鍵詞:</B></SPAN>嵌入式系統(tǒng) 多任務(wù) 編程</P>
<P style="TEXT-INDENT: 0px"><B>引言</B></P>
<P
style="TEXT-INDENT: 30px">嵌入式系統(tǒng)的面向應(yīng)用特性,使得大多數(shù)程序員沉陷于不同的應(yīng)用中。在進(jìn)入新的一輪開發(fā)后,往往只有一些簡單的經(jīng)驗(yàn)可供參考。為了加快應(yīng)用的開發(fā)進(jìn)度,有必要研究一種統(tǒng)一的應(yīng)用軟件結(jié)構(gòu),使開發(fā)人員能夠通過簡單模式套用,簡化大量系統(tǒng)研究方面的工作,以加快嵌入式開發(fā)人員對新系統(tǒng)的理解和使用。</P>
<P style="TEXT-INDENT: 30px">操作系統(tǒng)<FONT
face=Arial>μC/OS-II</FONT>和ECOS(Embedded Configurable
OS)是我在研發(fā)過程中使用過的兩個(gè)系統(tǒng)。這兩個(gè)源碼公開的系統(tǒng)是我們研究的基礎(chǔ)。開發(fā)平臺依次是PC機(jī)和EP7212開發(fā)板。</P>
<P style="TEXT-INDENT: 0px"><B>1 <FONT
face=Arial>μC/OS-II</FONT>內(nèi)核</B></P>
<P
style="TEXT-INDENT: 30px">對于一個(gè)嵌入式系統(tǒng)內(nèi)核,我們最關(guān)心的是:任務(wù)調(diào)度、內(nèi)存管理及時(shí)間特性等。這里,只介紹與多任務(wù)編程聯(lián)系最多的任務(wù)調(diào)度和內(nèi)存管理。</P>
<P style="TEXT-INDENT: 30px">1.1 任務(wù)調(diào)度</P>
<P
style="TEXT-INDENT: 30px">任務(wù)的狀態(tài)有休眠、就緒及運(yùn)行幾種。任務(wù)調(diào)度就是遵循一定的原則,使多個(gè)任務(wù)共同使用同一處理機(jī)的過程。這一過程主要是通過對任務(wù)控制塊(TCB)的管理來實(shí)現(xiàn)的。</P>
<P style="TEXT-INDENT: 30px">當(dāng)一個(gè)任務(wù)建立時(shí),<FONT
face=Arial>μC/OS-II</FONT>系統(tǒng)為其所對應(yīng)的OS_TCB賦值;當(dāng)任務(wù)的CPU使用權(quán)被剝奪時(shí),系統(tǒng)用OS_TCB來保存該任務(wù)的狀態(tài);當(dāng)任務(wù)重新得到CPU使用權(quán)時(shí),系統(tǒng)就可通過任務(wù)控制埠來使任務(wù)從被中斷處繼續(xù)執(zhí)行下去。</P>
<P style="TEXT-INDENT: 30px">在<FONT
face=Arial>μC/OS-II</FONT>中,TCB內(nèi)包含如下基本項(xiàng):</P>
<P
style="TEXT-INDENT: 30px">*OSTCBStkPtr是一個(gè)指向當(dāng)前任務(wù)棧頂?shù)闹羔槪ㄟ^允許每個(gè)任務(wù)擁有自己的棧來減小系統(tǒng)的內(nèi)存開銷;</P>
<P style="TEXT-INDENT: 30px">*OSTCBNextOSTCBPrev用于任務(wù)控制塊的雙重鏈接;</P>
<P style="TEXT-INDENT: 30px">*OSTCBDly用于任務(wù)延時(shí)或超時(shí)限制;</P>
<P style="TEXT-INDENT: 30px">*OSTCBStat任務(wù)的狀態(tài)字,0表示就緒態(tài);</P>
<P style="TEXT-INDENT: 30px">*OSTCBPrio任務(wù)的優(yōu)先級,值越小,優(yōu)先級越高。</P>
<P style="TEXT-INDENT: 30px">在<FONT
face=Arial>μC/OS-II</FONT>中,還有兩個(gè)與任務(wù)調(diào)度相關(guān)的結(jié)構(gòu)就緒表和估級判定表。就緒表中有兩個(gè)變量用來存放每個(gè)任務(wù)的就緒標(biāo)志。通過分組與優(yōu)先級表中的項(xiàng)實(shí)現(xiàn)一一對應(yīng),進(jìn)而確定進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)。</P>
<P style="TEXT-INDENT: 30px">任務(wù)調(diào)度算法原型:</P>
<P style="TEXT-INDENT: 30px">*關(guān)中斷;</P>
<P style="TEXT-INDENT: 30px">*取優(yōu)先級最高的就緒任務(wù);</P>
<P style="TEXT-INDENT: 30px">*若不是當(dāng)前任務(wù),則進(jìn)行任務(wù)切換;</P>
<P style="TEXT-INDENT: 30px">*開中斷。</P>
<P
style="TEXT-INDENT: 30px">任務(wù)切換中兩步完成:將被掛起的任務(wù)的微處理器寄存器堆入棧,然后,將較高優(yōu)先級的任務(wù)的寄存器值從棧中恢復(fù)到寄存器中。</P>
<P style="TEXT-INDENT: 30px">1.2 內(nèi)存管理</P>
<P
style="TEXT-INDENT: 30px">在嵌入式系統(tǒng)中,為了更高效地使用內(nèi)存,除了常規(guī)的malloc()和free()外,通常提供不同的內(nèi)存組織形式,以滿足特殊應(yīng)用的需求。<FONT
face=Arial>ΜC/OS-II</FONT>中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來管理,每個(gè)分區(qū)中包含整數(shù)大小相同的內(nèi)存塊。利用這種機(jī)制,<FONT
face=Arial>μC/OS-II</FONT>對malloc()和free()進(jìn)行改造,使得它們可分配和釋放固定大小的內(nèi)存塊,并且使這兩個(gè)函數(shù)的執(zhí)行時(shí)間也固定下來。</P>
<P
style="TEXT-INDENT: 30px">為了使用戶能得到需大小的內(nèi)存塊,在一個(gè)系統(tǒng)中可以多個(gè)內(nèi)存分區(qū),應(yīng)用程序可以從不同的內(nèi)存分區(qū)中取得不同大小的內(nèi)存塊。唯一要注意的是,不同的內(nèi)存塊在釋放時(shí)必須重新放回它以前所屬的內(nèi)存分區(qū)。采用上述的內(nèi)存管理算法,解決了內(nèi)存碎片的問題。</P>
<P style="TEXT-INDENT: 30px">為了跟蹤每一個(gè)內(nèi)存分區(qū),<FONT
face=Arial>μC/OS-II</FONT>使用了內(nèi)存控制塊的數(shù)據(jù)結(jié)構(gòu),主要有:</P>
<P style="TEXT-INDENT: 30px">OSMemAddr—指向內(nèi)存分區(qū)起始地址的指針;</P>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -