<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于構(gòu)件技術(shù)的嵌入式系統(tǒng)復(fù)用軟件設(shè)計

          基于構(gòu)件技術(shù)的嵌入式系統(tǒng)復(fù)用軟件設(shè)計

          作者:東北電力大學 楊勝春 曲朝陽 時間:2008-06-04 來源:單片機與嵌入式系統(tǒng)應(yīng)用 收藏

            引言

          本文引用地址:http://www.ex-cimer.com/article/83653.htm

            對而言,其支撐平臺首先是一個實時多任務(wù),其次為整個軟件構(gòu)件的設(shè)計提供開發(fā)工具和集成環(huán)境。在支撐平臺的設(shè)計過程中,可以借鑒領(lǐng)域工程的思想,將整個實時多任務(wù)設(shè)計成一個系統(tǒng)級的軟件構(gòu)件庫。這樣不但實現(xiàn)了嵌入式的可裁剪性,而且由于從嵌入式操作系統(tǒng)到應(yīng)用程序的設(shè)計都是基于離散化的軟件構(gòu)件,因此方便了嵌入式控制應(yīng)用軟件設(shè)計時的集成和調(diào)試。為了方便軟件構(gòu)件的管理,可以將系統(tǒng)級和應(yīng)用級的軟件構(gòu)件庫綜合成一個功能完備的軟件構(gòu)件庫。它包括從嵌入式控制系統(tǒng)的系統(tǒng)層、支撐層和應(yīng)用層所需的一切軟件構(gòu)件,因而具有功能的完整性[1]。

            1 嵌入式的體系結(jié)構(gòu)

            嵌入式的體系結(jié)構(gòu)如圖1所示,它包括系統(tǒng)層、連接層(支撐層)和應(yīng)用層3個部分。系統(tǒng)層屬于領(lǐng)域工程的范疇,它利用領(lǐng)域工程的分析方法對嵌入式控制系統(tǒng)進行分析、抽象和提煉,并分解成相應(yīng)的系統(tǒng)類和應(yīng)用類功能模塊。連接層是一個嵌入式軟件構(gòu)件平臺,它實現(xiàn)系統(tǒng)層和應(yīng)用層之間的無縫連接,即提供軟件構(gòu)件一個集成開發(fā)平臺。應(yīng)用層屬于應(yīng)用工程的范疇,用戶根據(jù)實際的嵌入式控制系統(tǒng)的控制要求和目標,從軟件構(gòu)件庫中選取所需軟件構(gòu)件,經(jīng)集成后生成實際的嵌入式控制應(yīng)用程序。

                 

                            圖1 嵌入式軟件構(gòu)件平臺的體系結(jié)構(gòu)

            2 嵌入式軟件構(gòu)件平臺的設(shè)計

            該軟件構(gòu)件平臺是基于TMS320F2812 芯片構(gòu)建的一個構(gòu)件化的嵌入式實時多任務(wù)操作系統(tǒng)。在設(shè)計時充分利用了平臺體系結(jié)構(gòu)所述的設(shè)計思想,程序的可讀性和裁剪性非常好。其特點是:

           ?、?設(shè)計了操作系統(tǒng)和系統(tǒng)兩個數(shù)據(jù)結(jié)構(gòu)。為了方便支撐平臺的設(shè)計和對系統(tǒng)資源的集中管理,設(shè)計了操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)為平臺設(shè)計者獨占,用戶沒有訪問該數(shù)據(jù)結(jié)構(gòu)的權(quán)限;另外,為了便于用戶程序與操作系統(tǒng)之間的交互以及對系統(tǒng)資源的訪問、申請,設(shè)計了系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)用戶是可見的,也是應(yīng)用程序訪問操作系統(tǒng)的唯一途徑。

           ?、?配置了一個最小系統(tǒng)。其主要功能是當接到啟動指令后對指令進行確認并判斷啟動方式;然后,根據(jù)啟動方式完成微處理器的CPU寄存器和一些外圍寄存器的初始化,并且對操作系統(tǒng)和系統(tǒng)兩個數(shù)據(jù)結(jié)構(gòu)進行初始賦值。但它不能實現(xiàn)任何的控制功能,完成初始化后就處于系統(tǒng)掃描狀態(tài)。

           ?、?系統(tǒng)設(shè)計的任務(wù)數(shù)小于或等于16(即一個字長),這樣一來任務(wù)的調(diào)度算法相對比較簡單,而且完全能夠滿足嵌入式實時控制系統(tǒng)應(yīng)用的要求。每一個任務(wù)指定唯一的優(yōu)先級,其任務(wù)優(yōu)先級與任務(wù)標識一致,優(yōu)先級越高的任務(wù)其優(yōu)先級ID就越低??晒┤蝿?wù)選擇的優(yōu)先級ID范圍是0~15,其中系統(tǒng)保留了最高和最低優(yōu)先級任務(wù)。通信及系統(tǒng)同步采用了信號量方式(可以擴展),設(shè)計了P操作和V操作兩種軟件構(gòu)件,對系統(tǒng)進行通信和同步管理;同時,設(shè)計了創(chuàng)建任務(wù)和任務(wù)開始兩個軟件構(gòu)件,分別為任務(wù)的建立和結(jié)束提供系統(tǒng)管理。

           ?、?設(shè)計了任務(wù)調(diào)度、任務(wù)切換、任務(wù)上鎖、虛擬消息等軟件構(gòu)件,實現(xiàn)系統(tǒng)對多任務(wù)的控制和管理。為了方便系統(tǒng)的任務(wù)切換,整個支撐平臺系統(tǒng)設(shè)計了兩類堆棧——系統(tǒng)堆棧和任務(wù)堆棧。

            2.1 構(gòu)件接口軟件的設(shè)計

            由于本構(gòu)件裝配是采用語言組態(tài)的軟件構(gòu)件集成方式,因此接口的定義類似于組態(tài)入口參數(shù)序列。它主要包含軟件構(gòu)件標識信息、軟件構(gòu)件注冊信息及軟件構(gòu)件的配置信息。標識信息識別目前所用的是哪一個軟件構(gòu)件,并給出了軟件構(gòu)件的切入點(虛擬地址指針);注冊信息包含軟件構(gòu)件向操作系統(tǒng)申請的系統(tǒng)服務(wù)和系統(tǒng)資源,操作系統(tǒng)在得到注冊信息后,為軟件構(gòu)件提供相應(yīng)的系統(tǒng)服務(wù)和分配所需的系統(tǒng)資源;配置信息包括軟件構(gòu)件在不同的系統(tǒng)狀態(tài)下所需的參數(shù)信息,它可以以數(shù)據(jù)或地址的狀態(tài)給出。接口類軟件主要是完成應(yīng)用程序與支撐平臺的交互,起到一個系統(tǒng)接口界面的作用,方便了用戶對支撐平臺的訪問。它包括錯誤觀察WatchErr()、參數(shù)注冊SysCompReg、獲取整型量*GetAddN()、獲取浮點數(shù)*GetAddF()、獲取結(jié)構(gòu)體*GetAddS()、取開關(guān)量Sys_GetBit()、存開關(guān)量Sys_BitGetvalue()、浮點數(shù)上/下限限幅Sys_Fmaxmin()、整型量上/下限限幅Sys_Nmaxmin()等函數(shù)。

            2.2 系統(tǒng)配置類軟件構(gòu)件的設(shè)計

            這類構(gòu)件在系統(tǒng)軟件集成時最多只能使用一次,主要完成系統(tǒng)資源的配置以及一些系統(tǒng)功能的啟用,包括系統(tǒng)開始、系統(tǒng)結(jié)束、擴展、擴展內(nèi)存等構(gòu)件。

            2.2.1 設(shè)計系統(tǒng)開始構(gòu)件

            一個嵌入式控制應(yīng)用程序必須包括且僅包括一個系統(tǒng)開始構(gòu)件,而且該構(gòu)件位于軟件構(gòu)件組態(tài)集成序列的末端。系統(tǒng)循環(huán)掃描一開始時,首先進入的便是該構(gòu)件。該構(gòu)件的功能是根據(jù)系統(tǒng)所處的系統(tǒng)狀態(tài),對系統(tǒng)參數(shù)、程序空間進行配置。其接口定義如下:

                 

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();