基于構(gòu)件技術(shù)的嵌入式系統(tǒng)復(fù)用軟件設(shè)計(jì)
引 言
本文引用地址:http://www.ex-cimer.com/article/85346.htm對(duì)嵌入式軟件構(gòu)件平臺(tái)而言,其支撐平臺(tái)首先是一個(gè)嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng),其次為整個(gè)軟件構(gòu)件的設(shè)計(jì)提供開發(fā)工具和集成環(huán)境。在支撐平臺(tái)的設(shè)計(jì)過程中,可以借鑒領(lǐng)域工程的思想,將整個(gè)嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)設(shè)計(jì)成一個(gè)系統(tǒng)級(jí)的軟件構(gòu)件庫(kù)。這樣不但實(shí)現(xiàn)了嵌入式操作系統(tǒng)的可裁剪性,而且由于從嵌入式操作系統(tǒng)到應(yīng)用程序的設(shè)計(jì)都是基于離散化的軟件構(gòu)件,因此方便了嵌入式控制應(yīng)用軟件設(shè)計(jì)時(shí)的集成和調(diào)試。為了方便軟件構(gòu)件的管理,可以將系統(tǒng)級(jí)和應(yīng)用級(jí)的軟件構(gòu)件庫(kù)綜合成一個(gè)功能完備的軟件構(gòu)件庫(kù)。它包括從嵌入式控制系統(tǒng)的系統(tǒng)層、支撐層和應(yīng)用層所需的一切軟件構(gòu)件,因而具有功能的完整性。
1 嵌入式軟件構(gòu)件平臺(tái)的體系結(jié)構(gòu)
嵌入式軟件構(gòu)件平臺(tái)的體系結(jié)構(gòu)如圖1所示,它包括系統(tǒng)層、連接層(支撐層)和應(yīng)用層3個(gè)部分。系統(tǒng)層屬于領(lǐng)域工程的范疇,它利用領(lǐng)域工程的分析方法對(duì)嵌入式控制系統(tǒng)進(jìn)行分析、抽象和提煉,并分解成相應(yīng)的系統(tǒng)類和應(yīng)用類功能模塊。連接層是一個(gè)嵌入式軟件構(gòu)件平臺(tái),它實(shí)現(xiàn)系統(tǒng)層和應(yīng)用層之間的無縫連接,即提供軟件構(gòu)件一個(gè)集成開發(fā)平臺(tái)。應(yīng)用層屬于應(yīng)用工程的范疇,用戶根據(jù)實(shí)際的嵌入式控制系統(tǒng)的控制要求和目標(biāo),從軟件構(gòu)件庫(kù)中選取所需軟件構(gòu)件,經(jīng)集成后生成實(shí)際的嵌入式控制應(yīng)用程序。
2 嵌入式軟件構(gòu)件平臺(tái)的設(shè)計(jì)
該軟件構(gòu)件平臺(tái)是基于TMS320F2812 DSP芯片構(gòu)建的一個(gè)構(gòu)件化的嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)。在設(shè)計(jì)時(shí)充分利用了平臺(tái)體系結(jié)構(gòu)所述的設(shè)計(jì)思想,程序的可讀性和裁剪性非常好。其特點(diǎn)是:
?、僭O(shè)計(jì)了操作系統(tǒng)和系統(tǒng)兩個(gè)數(shù)據(jù)結(jié)構(gòu)。為了方便支撐平臺(tái)的設(shè)計(jì)和對(duì)系統(tǒng)資源的集中管理,設(shè)計(jì)了操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)為平臺(tái)設(shè)計(jì)者獨(dú)占,用戶沒有訪問該數(shù)據(jù)結(jié)構(gòu)的權(quán)限;另外,為了便于用戶程序與操作系統(tǒng)之間的交互以及對(duì)系統(tǒng)資源的訪問、申請(qǐng),設(shè)計(jì)了系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)用戶是可見的,也是應(yīng)用程序訪問操作系統(tǒng)的唯一途徑。
?、谂渲昧艘粋€(gè)最小系統(tǒng)。其主要功能是當(dāng)接到啟動(dòng)指令后對(duì)指令進(jìn)行確認(rèn)并判斷啟動(dòng)方式;然后,根據(jù)啟動(dòng)方式完成微處理器的CPU寄存器和一些外圍寄存器的初始化,并且對(duì)操作系統(tǒng)和系統(tǒng)兩個(gè)數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始賦值。但它不能實(shí)現(xiàn)任何的控制功能,完成初始化后就處于系統(tǒng)掃描狀態(tài)。
?、巯到y(tǒng)設(shè)計(jì)的任務(wù)數(shù)小于或等于16(即一個(gè)字長(zhǎng)),這樣一來任務(wù)的調(diào)度算法相對(duì)比較簡(jiǎn)單,而且完全能夠滿足嵌入式實(shí)時(shí)控制系統(tǒng)應(yīng)用的要求。每一個(gè)任務(wù)指定唯一的優(yōu)先級(jí),其任務(wù)優(yōu)先級(jí)與任務(wù)標(biāo)識(shí)一致,優(yōu)先級(jí)越高的任務(wù)其優(yōu)先級(jí)ID就越低??晒┤蝿?wù)選擇的優(yōu)先級(jí)ID范圍是0~15,其中系統(tǒng)保留了最高和最低優(yōu)先級(jí)任務(wù)。通信及系統(tǒng)同步采用了信號(hào)量方式(可以擴(kuò)展),設(shè)計(jì)了P操作和V操作兩種軟件構(gòu)件,對(duì)系統(tǒng)進(jìn)行通信和同步管理;同時(shí),設(shè)計(jì)了創(chuàng)建任務(wù)和任務(wù)開始兩個(gè)軟件構(gòu)件,分別為任務(wù)的建立和結(jié)束提供系統(tǒng)管理。
?、茉O(shè)計(jì)了任務(wù)調(diào)度、任務(wù)切換、任務(wù)上鎖、虛擬消息等軟件構(gòu)件,實(shí)現(xiàn)系統(tǒng)對(duì)多任務(wù)的控制和管理。為了方便系統(tǒng)的任務(wù)切換,整個(gè)支撐平臺(tái)系統(tǒng)設(shè)計(jì)了兩類堆棧——系統(tǒng)堆棧和任務(wù)堆棧。
2.1 構(gòu)件接口軟件的設(shè)計(jì)
由于本構(gòu)件裝配是采用語言組態(tài)的軟件構(gòu)件集成方式,因此接口的定義類似于組態(tài)入口參數(shù)序列。它主要包含軟件構(gòu)件標(biāo)識(shí)信息、軟件構(gòu)件注冊(cè)信息及軟件構(gòu)件的配置信息。標(biāo)識(shí)信息識(shí)別目前所用的是哪一個(gè)軟件構(gòu)件,并給出了軟件構(gòu)件的切入點(diǎn)(虛擬地址指針);注冊(cè)信息包含軟件構(gòu)件向操作系統(tǒng)申請(qǐng)的系統(tǒng)服務(wù)和系統(tǒng)資源,操作系統(tǒng)在得到注冊(cè)信息后,為軟件構(gòu)件提供相應(yīng)的系統(tǒng)服務(wù)和分配所需的系統(tǒng)資源;配置信息包括軟件構(gòu)件在不同的系統(tǒng)狀態(tài)下所需的參數(shù)信息,它可以以數(shù)據(jù)或地址的狀態(tài)給出。接口類軟件主要是完成應(yīng)用程序與支撐平臺(tái)的交互,起到一個(gè)系統(tǒng)接口界面的作用,方便了用戶對(duì)支撐平臺(tái)的訪問。它包括錯(cuò)誤觀察WatchErr()、參數(shù)注冊(cè)SysCom-pReg、獲取整型量*GetAddN()、獲取浮點(diǎn)數(shù)*GetAddF()、獲取結(jié)構(gòu)體*GetAddS()、取開關(guān)量Sys_GetBit()、存開關(guān)量Sys_BitGetvalue()、浮點(diǎn)數(shù)上/下限限幅Sys_Fmaxmin()、整型量上/下限限幅Sys_Nmaxmin()等函數(shù)。
2.2 系統(tǒng)配置類軟件構(gòu)件的設(shè)計(jì)
這類構(gòu)件在系統(tǒng)軟件集成時(shí)最多只能使用一次,主要完成系統(tǒng)資源的配置以及一些系統(tǒng)功能的啟用,包括系統(tǒng)開始、系統(tǒng)結(jié)束、擴(kuò)展、擴(kuò)展內(nèi)存等構(gòu)件。
2.2.1 設(shè)計(jì)系統(tǒng)開始構(gòu)件
一個(gè)嵌入式控制應(yīng)用程序必須包括且僅包括一個(gè)系統(tǒng)開始構(gòu)件,而且該構(gòu)件位于軟件構(gòu)件組態(tài)集成序列的末端。系統(tǒng)循環(huán)掃描一開始時(shí),首先進(jìn)入的便是該構(gòu)件。該構(gòu)件的功能是根據(jù)系統(tǒng)所處的系統(tǒng)狀態(tài),對(duì)系統(tǒng)參數(shù)、程序空間進(jìn)行配置。其接口定義如下:
接口說明:構(gòu)件號(hào)是該構(gòu)件的唯一標(biāo)識(shí)和切入點(diǎn)(該構(gòu)件入口虛擬程序地址指針);啟動(dòng)選擇方式主要用于設(shè)定系統(tǒng)的啟動(dòng)方式;缺省通信方式主要是從CAN、MORDBUS和工業(yè)以太網(wǎng)中選擇一種作為系統(tǒng)默認(rèn)的通信方式;外部高速和低速時(shí)鐘頻率用于設(shè)置高速和低速外圍所需的時(shí)鐘頻率,即可以修改最小系統(tǒng)中的初始配置;系統(tǒng)口令主要保證系統(tǒng)的安全性,不允許隨意修改組態(tài)集成格式;系統(tǒng)型號(hào)和裝配日期給出了系統(tǒng)軟件集成的一些文本信息。設(shè)計(jì)者可以根據(jù)系統(tǒng)設(shè)計(jì)需要,在構(gòu)件組態(tài)集成時(shí)自由配置。
2.2.2 設(shè)計(jì)擴(kuò)展構(gòu)件
由于系統(tǒng)設(shè)計(jì)時(shí),在系統(tǒng)總配置表單中規(guī)定了最大的原始構(gòu)件數(shù)小于或等于511,因此當(dāng)系統(tǒng)構(gòu)件數(shù)目超過原始構(gòu)件個(gè)數(shù)時(shí),必須通過擴(kuò)展構(gòu)件來擴(kuò)展系統(tǒng)構(gòu)件。擴(kuò)展構(gòu)件的接口定義如下:
接口說明:為了方便擴(kuò)展構(gòu)件,該接口設(shè)計(jì)為比較靈活的方式。它僅指出了擴(kuò)展構(gòu)件的地址,而擴(kuò)展的構(gòu)件個(gè)數(shù)由組態(tài)集成結(jié)束標(biāo)識(shí)0來終結(jié)組態(tài)接口參數(shù)的設(shè)置。
2.2.3 設(shè)計(jì)擴(kuò)展內(nèi)存構(gòu)件
在支撐平臺(tái)的設(shè)計(jì)中,根據(jù)嵌入式控制應(yīng)用程序的需要,將系統(tǒng)的整個(gè)內(nèi)存空間劃分為4大塊,每一塊有固定的長(zhǎng)度和使用域。當(dāng)應(yīng)用程序?qū)?nèi)存的需求超出設(shè)計(jì)范圍時(shí),可以利用擴(kuò)展內(nèi)存構(gòu)件對(duì)內(nèi)存進(jìn)行擴(kuò)展。其接口定義如下:
2.2.4 設(shè)計(jì)系統(tǒng)結(jié)束構(gòu)件
系統(tǒng)結(jié)束構(gòu)件固定位于軟件組態(tài)集成序列的前端,即組態(tài)集成號(hào)為0。它在系統(tǒng)軟件構(gòu)件組態(tài)集成完畢后、即將進(jìn)入系統(tǒng)運(yùn)行時(shí)啟用該構(gòu)件,即處于系統(tǒng)循環(huán)的最后。它在系統(tǒng)工作狀態(tài)工作,執(zhí)行返回軟件組態(tài)集成序列起始地址的功能。在系統(tǒng)初始化狀態(tài)時(shí),完成標(biāo)定數(shù)據(jù)和一般數(shù)據(jù)的獲取和保存,并執(zhí)行啟動(dòng)系統(tǒng)時(shí)鐘和看門狗,以及返回組態(tài)序列起始地址等系統(tǒng)功能。接口參數(shù)僅有一個(gè)標(biāo)識(shí)該構(gòu)件的構(gòu)件號(hào)0。
2.3 系統(tǒng)任務(wù)類軟件構(gòu)件的設(shè)計(jì)
任務(wù)創(chuàng)建構(gòu)件Task:一般的多任務(wù)操作系統(tǒng)運(yùn)行之前,系統(tǒng)必須至少建立一個(gè)任務(wù),一般是一個(gè)空閑任務(wù),其他任務(wù)可以在程序運(yùn)行的過程中創(chuàng)建。但在本支撐平臺(tái)的設(shè)計(jì)中,鑒于一個(gè)實(shí)際的嵌入式控制應(yīng)用程序的任務(wù)數(shù)事先是可以確定的,因而設(shè)計(jì)了任務(wù)創(chuàng)建構(gòu)件,可以利用該構(gòu)件在應(yīng)用程序的軟件集成過程中創(chuàng)建所需的任務(wù)。該構(gòu)件的組態(tài)集成接口定義如下:
設(shè)計(jì)說明:每定義一個(gè)任務(wù)使用一次該構(gòu)件。任務(wù)號(hào)是外指針,用戶可見,里面包含虛擬程序地址指針、任務(wù)優(yōu)先級(jí)等信息;系統(tǒng)為每個(gè)任務(wù)分配了堆??臻g,由于任務(wù)的不同,可能對(duì)系統(tǒng)資源的需求也不同,為了節(jié)省整個(gè)系統(tǒng)的內(nèi)存空間,用戶可以從組態(tài)集成接口直接指定任務(wù)堆棧的大??;為了跟蹤任務(wù)的運(yùn)行時(shí)間和任務(wù)定時(shí),在接口中設(shè)計(jì)了時(shí)間單位和時(shí)間長(zhǎng)度2個(gè)參數(shù),對(duì)任務(wù)的運(yùn)行時(shí)間進(jìn)行統(tǒng)計(jì)和定時(shí)計(jì)數(shù)。另外,為了方便任務(wù)切換,整個(gè)支撐平臺(tái)設(shè)計(jì)了兩類堆棧,即系統(tǒng)堆棧和任務(wù)堆棧。因此在建立任務(wù)時(shí),要根據(jù)所處的系統(tǒng)狀態(tài),對(duì)每一個(gè)任務(wù)的任務(wù)堆棧進(jìn)行初始化設(shè)置。
2.4 通信和同步管理類軟件構(gòu)件的設(shè)計(jì)
任務(wù)間的通信有2種途徑:通過全程變量,或發(fā)消息給另一個(gè)任務(wù)。使用全程變量時(shí),必須保證每個(gè)任務(wù)或中斷服務(wù)程序獨(dú)享該變量。中斷服務(wù)中保證獨(dú)享的唯一辦法是關(guān)中斷。如果兩個(gè)任務(wù)共享某變量,各任務(wù)實(shí)現(xiàn)獨(dú)享該變量的辦法可以是關(guān)中斷再開中斷,或使用信號(hào)量。在支撐平臺(tái)的設(shè)計(jì)中,采用了信號(hào)量方式進(jìn)行系統(tǒng)的通信和同步管理,包括P操作PSema和V操作VSema兩種軟件構(gòu)件。
P操作軟件構(gòu)件實(shí)現(xiàn)下列功能:在系統(tǒng)注冊(cè)狀態(tài)完成注冊(cè)表的填寫,向系統(tǒng)申請(qǐng)所需的系統(tǒng)資源;在系統(tǒng)參數(shù)初始化狀態(tài)完成信號(hào)量數(shù)據(jù)結(jié)構(gòu)的初始化;在系統(tǒng)工作狀態(tài),如果信號(hào)量大于零(即信號(hào)量可用),則信號(hào)量減1,否則表示信號(hào)量不可用,進(jìn)行任務(wù)懸掛操作和任務(wù)切換。其接口定義如下:
接口說明:信號(hào)量地址是外指針,用戶可見,是信號(hào)量數(shù)據(jù)結(jié)構(gòu)的入口點(diǎn);信號(hào)量初值若設(shè)為1,則表示任務(wù)通信,若為0,則表示任務(wù)同步。
V操作軟件構(gòu)件只在系統(tǒng)工作狀態(tài)下工作,與P操作軟件構(gòu)件公用一個(gè)數(shù)據(jù)結(jié)構(gòu)。它首先將信號(hào)量減1,然后判斷信號(hào)量是否大于零。若大于零,表示公共資源可用,則使所給定任務(wù)就緒,并進(jìn)行任務(wù)調(diào)度和切換。其接口如下:
由于采用構(gòu)件化的設(shè)計(jì)方式,系統(tǒng)通信和同步方式可以自由擴(kuò)展。比如說可以在支撐平臺(tái)添加郵箱或消息隊(duì)列構(gòu)件,采用哪種通信和同步方式主要根據(jù)系統(tǒng)的設(shè)計(jì)需要而定。
3 集成開發(fā)環(huán)境
本課題組采用微型消息總線MMB嵌入式系統(tǒng)集成開發(fā)環(huán)境(MMBIDE)應(yīng)用程序編程語言引入IEC611 31-3標(biāo)準(zhǔn),將結(jié)構(gòu)化語句(Structured Text)描述程序設(shè)計(jì)語言作為自身嵌入式系統(tǒng)應(yīng)用軟件的編程語言。這主要是考慮到MMB嵌入式系統(tǒng)應(yīng)用于工業(yè)控制領(lǐng)域,要求能夠自身可以完成較復(fù)雜的控制運(yùn)算,同時(shí)要求語句清晰、易懂,具有編程任務(wù)高度壓縮化的表達(dá)格式。采用交叉開發(fā)方法,在Windows主機(jī)平臺(tái)上開發(fā)與之連接的目標(biāo)機(jī)。開發(fā)環(huán)境包括自己的可裁剪的微內(nèi)核實(shí)時(shí)多任務(wù)操作系統(tǒng),主機(jī)上的編譯、調(diào)試、查看等工具,以及串口、網(wǎng)絡(luò)與目標(biāo)機(jī)的連接工具。其主要功能包括面向工業(yè)應(yīng)用領(lǐng)域的應(yīng)用程序基本框架、可重用的構(gòu)件庫(kù)、源程序編譯器、組態(tài)下載用戶工具、參數(shù)下載用戶工具、參數(shù)實(shí)時(shí)監(jiān)控界面等用于支撐應(yīng)用程序開發(fā)的各類用戶工具,是用戶開發(fā)應(yīng)用程序的重要基礎(chǔ),強(qiáng)調(diào)知識(shí)成果的積累和重用,是平臺(tái)開發(fā)模式思想的集中體現(xiàn)。
結(jié) 語
本軟件開發(fā)平臺(tái)應(yīng)用軟件構(gòu)件技術(shù)主要解決下列問題:軟件構(gòu)件的接口定義,提供軟件構(gòu)件與系統(tǒng)以及軟件構(gòu)件之間的交互機(jī)制,同時(shí)為軟件構(gòu)件的設(shè)計(jì)和封裝提供依據(jù)。軟件構(gòu)件的開發(fā)和集成,為軟件構(gòu)件的設(shè)計(jì)和集成提供必要的開發(fā)工具。本文介紹了其中主要的系統(tǒng)級(jí)軟件構(gòu)件的開發(fā)方法,為系統(tǒng)集成各種應(yīng)用級(jí)軟件提供了總體框架,解決了控制系統(tǒng)應(yīng)用軟件難維護(hù)、難繼承的問題,為控制類應(yīng)用軟件的開發(fā)提供了依據(jù)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論