|
引 言
對嵌入式軟件构件平台而言,其支撐平台首先是一個嵌入式實時多任務操作系統,其次為整個軟件构件的設計提供開發工具和集成環境。在支撐平台的設計過程中,可以借鑒領域工程的思想,將整個嵌入式實時多任務操作系統設計成一個系統級的軟件构件庫。這樣不但實現了嵌入式操作系統的可裁剪性,而且由于從嵌入式操作系統到應用程序的設計都是基于离散化的軟件构件,因此方便了嵌入式控制應用軟件設計時的集成和調試。為了方便軟件构件的管理,可以將系統級和應用級的軟件构件庫綜合成一個功能完備的軟件构件庫。它包括從嵌入式控制系統的系統層、支撐層和應用層所需的一切軟件构件,因而具有功能的完整性。
1 嵌入式軟件构件平台的体系結构
嵌入式軟件构件平台的体系結构如圖1所示,它包括系統層、連接層(支撐層)和應用層3個部分。系統層屬于領域工程的范疇,它利用領域工程的分析方法對嵌入式控制系統進行分析、抽象和提煉,并分解成相應的系統類和應用類功能模塊。連接層是一個嵌入式軟件构件平台,它實現系統層和應用層之間的無縫連接,即提供軟件构件一個集成開發平台。應用層屬于應用工程的范疇,用戶根据實際的嵌入式控制系統的控制要求和目標,從軟件构件庫中選取所需軟件构件,經集成后生成實際的嵌入式控制應用程序。
2 嵌入式軟件构件平台的設計
該軟件构件平台是基于TMS320F2812 DSP芯片构建的一個构件化的嵌入式實時多任務操作系統。在設計時充分利用了平台体系結构所述的設計思想,程序的可讀性和裁剪性非常好。其特點是:
①設計了操作系統和系統兩個數据結构。為了方便支撐平台的設計和對系統資源的集中管理,設計了操作系統數据結构,該數据結构為平台設計者獨占,用戶沒有訪問該數据結构的權限;另外,為了便于用戶程序与操作系統之間的交互以及對系統資源的訪問、申請,設計了系統數据結构。該數据結构用戶是可見的,也是應用程序訪問操作系統的唯一途徑。
②配置了一個最小系統。其主要功能是當接到啟動指令后對指令進行确認并判斷啟動方式;然后,根据啟動方式完成微處理器的CPU寄存器和一些外圍寄存器的初始化,并且對操作系統和系統兩個數据結构進行初始賦值。但它不能實現任何的控制功能,完成初始化后就處于系統掃描狀態。
③系統設計的任務數小于或等于16(即一個字長),這樣一來任務的調度算法相對比較簡單,而且完全能夠滿足嵌入式實時控制系統應用的要求。每一個任務指定唯一的优先級,其任務优先級与任務標識一致,优先級越高的任務其优先級ID就越低。可供任務選擇的优先級ID范圍是0∼15,其中系統保留了最高和最低优先級任務。通信及系統同步采用了信號量方式(可以擴展),設計了P操作和V操作兩种軟件构件,對系統進行通信和同步管理;同時,設計了創建任務和任務開始兩個軟件构件,分別為任務的建立和結束提供系統管理。
④設計了任務調度、任務切換、任務上鎖、虛擬消息等軟件构件,實現系統對多任務的控制和管理。為了方便系統的任務切換,整個支撐平台系統設計了兩類堆棧——系統堆棧和任務堆棧。
2.1 构件接口軟件的設計
由于本构件裝配是采用語言組態的軟件构件集成方式,因此接口的定義類似于組態入口參數序列。它主要包含軟件构件標識信息、軟件构件注冊信息及軟件构件的配置信息。標識信息識別目前所用的是哪一個軟件构件,并給出了軟件构件的切入點(虛擬地址指針);注冊信息包含軟件构件向操作系統申請的系統服務和系統資源,操作系統在得到注冊信息后,為軟件构件提供相應的系統服務和分配所需的系統資源;配置信息包括軟件构件在不同的系統狀態下所需的參數信息,它可以以數据或地址的狀態給出。接口類軟件主要是完成應用程序与支撐平台的交互,起到一個系統接口界面的作用,方便了用戶對支撐平台的訪問。它包括錯誤觀察WatchErr()、參數注冊SysCom-pReg、獲取整型量*GetAddN()、獲取浮點數*GetAddF()、獲取結构体*GetAddS()、取開關量Sys_GetBit()、存開關量Sys_BitGetvalue()、浮點數上/下限限幅Sys_Fmaxmin()、整型量上/下限限幅Sys_Nmaxmin()等函數。
2.2 系統配置類軟件构件的設計
這類构件在系統軟件集成時最多只能使用一次,主要完成系統資源的配置以及一些系統功能的啟用,包括系統開始、系統結束、擴展、擴展內存等构件。
2.2.1 設計系統開始构件
一個嵌入式控制應用程序必須包括且僅包括一個系統開始构件,而且該构件位于軟件构件組態集成序列的末端。系統循環掃描一開始時,首先進入的便是該构件。該构件的功能是根据系統所處的系統狀態,對系統參數、程序空間進行配置。其接口定義如下:
接口說明:构件號是該构件的唯一標識和切入點(該构件入口虛擬程序地址指針);啟動選擇方式主要用于設定系統的啟動方式;缺省通信方式主要是從CAN、MORDBUS和工業以太网中選擇一种作為系統默認的通信方式;外部高速和低速時鐘頻率用于設置高速和低速外圍所需的時鐘頻率,即可以修改最小系統中的初始配置;系統口令主要保証系統的安全性,不允許隨意修改組態集成格式;系統型號和裝配日期給出了系統軟件集成的一些文本信息。設計者可以根据系統設計需要,在构件組態集成時自由配置。
2.2.2 設計擴展构件
由于系統設計時,在系統總配置表單中規定了最大的原始构件數小于或等于511,因此當系統构件數目超過原始构件個數時,必須通過擴展构件來擴展系統构件。擴展构件的接口定義如下:
接口說明:為了方便擴展构件,該接口設計為比較靈活的方式。它僅指出了擴展构件的地址,而擴展的构件個數由組態集成結束標識0來終結組態接口參數的設置。
2.2.3 設計擴展內存构件
在支撐平台的設計中,根据嵌入式控制應用程序的需要,將系統的整個內存空間划分為4大塊,每一塊有固定的長度和使用域。當應用程序對內存的需求超出設計范圍時,可以利用擴展內存构件對內存進行擴展。其接口定義如下:
2.2.4 設計系統結束构件
系統結束构件固定位于軟件組態集成序列的前端,即組態集成號為0。它在系統軟件构件組態集成完畢后、即將進入系統運行時啟用該构件,即處于系統循環的最后。它在系統工作狀態工作,執行返回軟件組態集成序列起始地址的功能。在系統初始化狀態時,完成標定數据和一般數据的獲取和保存,并執行啟動系統時鐘和看門狗,以及返回組態序列起始地址等系統功能。接口參數僅有一個標識該构件的构件號0。
2.3 系統任務類軟件构件的設計
任務創建构件Task:一般的多任務操作系統運行之前,系統必須至少建立一個任務,一般是一個空閑任務,其他任務可以在程序運行的過程中創建。但在本支撐平台的設計中,鑒于一個實際的嵌入式控制應用程序的任務數事先是可以确定的,因而設計了任務創建构件,可以利用該构件在應用程序的軟件集成過程中創建所需的任務。該构件的組態集成接口定義如下:
設計說明:每定義一個任務使用一次該构件。任務號是外指針,用戶可見,里面包含虛擬程序地址指針、任務优先級等信息;系統為每個任務分配了堆棧空間,由于任務的不同,可能對系統資源的需求也不同,為了節省整個系統的內存空間,用戶可以從組態集成接口直接指定任務堆棧的大小;為了跟蹤任務的運行時間和任務定時,在接口中設計了時間單位和時間長度2個參數,對任務的運行時間進行統計和定時計數。另外,為了方便任務切換,整個支撐平台設計了兩類堆棧,即系統堆棧和任務堆棧。因此在建立任務時,要根据所處的系統狀態,對每一個任務的任務堆棧進行初始化設置。
2.4 通信和同步管理類軟件构件的設計
任務間的通信有2种途徑:通過全程變量,或發消息給另一個任務。使用全程變量時,必須保証每個任務或中斷服務程序獨享該變量。中斷服務中保証獨享的唯一辦法是關中斷。如果兩個任務共享某變量,各任務實現獨享該變量的辦法可以是關中斷再開中斷,或使用信號量。在支撐平台的設計中,采用了信號量方式進行系統的通信和同步管理,包括P操作PSema和V操作VSema兩种軟件构件。
P操作軟件构件實現下列功能:在系統注冊狀態完成注冊表的填寫,向系統申請所需的系統資源;在系統參數初始化狀態完成信號量數据結构的初始化;在系統工作狀態,如果信號量大于零(即信號量可用),則信號量減1,否則表示信號量不可用,進行任務懸挂操作和任務切換。其接口定義如下:
接口說明:信號量地址是外指針,用戶可見,是信號量數据結构的入口點;信號量初值若設為1,則表示任務通信,若為0,則表示任務同步。
V操作軟件构件只在系統工作狀態下工作,与P操作軟件构件公用一個數据結构。它首先將信號量減1,然后判斷信號量是否大于零。若大于零,表示公共資源可用,則使所給定任務就緒,并進行任務調度和切換。其接口如下:
由于采用构件化的設計方式,系統通信和同步方式可以自由擴展。比如說可以在支撐平台添加郵箱或消息隊列构件,采用哪种通信和同步方式主要根据系統的設計需要而定。
3 集成開發環境
本課題組采用微型消息總線MMB嵌入式系統集成開發環境(MMBIDE)應用程序編程語言引入IEC611 31-3標准,將結构化語句(Structured Text)描述程序設計語言作為自身嵌入式系統應用軟件的編程語言。這主要是考慮到MMB嵌入式系統應用于工業控制領域,要求能夠自身可以完成較复雜的控制運算,同時要求語句清晰、易懂,具有編程任務高度壓縮化的表達格式。采用交叉開發方法,在Windows主机平台上開發与之連接的目標机。開發環境包括自己的可裁剪的微內核實時多任務操作系統,主机上的編譯、調試、查看等工具,以及串口、网絡与目標机的連接工具。其主要功能包括面向工業應用領域的應用程序基本框架、可重用的构件庫、源程序編譯器、組態下載用戶工具、參數下載用戶工具、參數實時監控界面等用于支撐應用程序開發的各類用戶工具,是用戶開發應用程序的重要基礎,強調知識成果的積累和重用,是平台開發模式思想的集中体現。
結 語
本軟件開發平台應用軟件构件技術主要解決下列問題:軟件构件的接口定義,提供軟件构件与系統以及軟件构件之間的交互机制,同時為軟件构件的設計和封裝提供依据。軟件构件的開發和集成,為軟件构件的設計和集成提供必要的開發工具。本文介紹了其中主要的系統級軟件构件的開發方法,為系統集成各种應用級軟件提供了總体框架,解決了控制系統應用軟件難維護、難繼承的問題,為控制類應用軟件的開發提供了依据。
|