基于構(gòu)件技術(shù)的嵌入式系統(tǒng)復(fù)用軟件設(shè)計(jì)
接口說(shuō)明:構(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í)自由配置。
本文引用地址:http://www.ex-cimer.com/article/83653.htm2.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ù)目超過(guò)原始構(gòu)件個(gè)數(shù)時(shí),必須通過(guò)擴(kuò)展構(gòu)件來(lái)擴(kuò)展系統(tǒng)構(gòu)件。擴(kuò)展構(gòu)件的接口定義如下:
接口說(shuō)明:為了方便擴(kuò)展構(gòu)件,該接口設(shè)計(jì)為比較靈活的方式。它僅指出了擴(kuò)展構(gòu)件的地址,而擴(kuò)展的構(gòu)件個(gè)數(shù)由組態(tài)集成結(jié)束標(biāo)識(shí)0來(lái)終結(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í)鐘和看門(mén)狗,以及返回組態(tài)序列起始地址等系統(tǒng)功能。接口參數(shù)僅有一個(gè)標(biāo)識(shí)該構(gòu)件的構(gòu)件號(hào)0。
2.3 系統(tǒng)任務(wù)類(lèi)軟件構(gòu)件的設(shè)計(jì)
任務(wù)創(chuàng)建構(gòu)件Task:一般的多任務(wù)操作系統(tǒng)運(yùn)行之前,系統(tǒng)必須至少建立一個(gè)任務(wù),一般是一個(gè)空閑任務(wù),其他任務(wù)可以在程序運(yùn)行的過(guò)程中創(chuàng)建。但在本支撐平臺(tái)的設(shè)計(jì)中,鑒于一個(gè)實(shí)際的嵌入式控制應(yīng)用程序的任務(wù)數(shù)事先是可以確定的,因而設(shè)計(jì)了任務(wù)創(chuàng)建構(gòu)件,可以利用該構(gòu)件在應(yīng)用程序的軟件集成過(guò)程中創(chuàng)建所需的任務(wù)。該構(gòu)件的組態(tài)集成接口定義如下:
設(shè)計(jì)說(shuō)明:每定義一個(gè)任務(wù)使用一次該構(gòu)件。任務(wù)號(hào)是外指針,用戶(hù)可見(jiàn),里面包含虛擬程序地址指針、任務(wù)優(yōu)先級(jí)等信息;系統(tǒng)為每個(gè)任務(wù)分配了堆棧空間,由于任務(wù)的不同,可能對(duì)系統(tǒng)資源的需求也不同,為了節(jié)省整個(gè)系統(tǒng)的內(nèi)存空間,用戶(hù)可以從組態(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ì)了兩類(lèi)堆棧,即系統(tǒng)堆棧和任務(wù)堆棧。因此在建立任務(wù)時(shí),要根據(jù)所處的系統(tǒng)狀態(tài),對(duì)每一個(gè)任務(wù)的任務(wù)堆棧進(jìn)行初始化設(shè)置[4]。
2.4 通信和同步管理類(lèi)軟件構(gòu)件的設(shè)計(jì)
任務(wù)間的通信有2種途徑:通過(guò)全程變量,或發(fā)消息給另一個(gè)任務(wù)。使用全程變量時(shí),必須保證每個(gè)任務(wù)或中斷服務(wù)程序獨(dú)享該變量。中斷服務(wù)中保證獨(dú)享的唯一辦法是關(guān)中斷。如果兩個(gè)任務(wù)共享某變量,各任務(wù)實(shí)現(xiàn)獨(dú)享該變量的辦法可以是關(guān)中斷再開(kāi)中斷,或使用信號(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è)表的填寫(xiě),向系統(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ù)切換。其接口定義如下:
接口說(shuō)明:信號(hào)量地址是外指針,用戶(hù)可見(jiàn),是信號(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ò)展。比如說(shuō)可以在支撐平臺(tái)添加郵箱或消息隊(duì)列構(gòu)件,采用哪種通信和同步方式主要根據(jù)系統(tǒng)的設(shè)計(jì)需要而定。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論