新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于DeltaOS的系統(tǒng)軟件設(shè)計(jì)

基于DeltaOS的系統(tǒng)軟件設(shè)計(jì)

作者: 時(shí)間:2011-08-18 來(lái)源:網(wǎng)絡(luò) 收藏
3 可靠性保證和可擴(kuò)展性的提高

本文引用地址:http://m.butianyuan.cn/article/150332.htm

  對(duì)于任何來(lái)說(shuō),可靠性都是至關(guān)重要的。的可靠性在任務(wù)內(nèi)是容易做到,通常問(wèn)題都是出在任務(wù)間的接口之上。接口也關(guān)系到可擴(kuò)展性能。在多任務(wù)操作中,任務(wù)間的接口是通過(guò)同步和通信機(jī)制來(lái)實(shí)現(xiàn)的,因此同步和通信機(jī)制必須認(rèn)真選取。

  DeltaCORE提供了消息隊(duì)列(message queue)、信號(hào)量(semaphore)、異步信號(hào)(signal)、事件(event)這四種通信和同步機(jī)制。其中,消息隊(duì)列和事件機(jī)制可以同時(shí)實(shí)現(xiàn)通信和同步,信號(hào)量機(jī)制可以實(shí)現(xiàn)同步和互斥,異步信號(hào)(又叫軟中斷機(jī)制)可以實(shí)現(xiàn)同步。

  為了滿(mǎn)足通信和同步的需要,可以采用兩種方案:第一種方案是信號(hào)量等同步機(jī)制實(shí)現(xiàn)同步,用全局?jǐn)?shù)組或其他的共享數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)各任務(wù)間的通信,如圖5;另一種是采用消息隊(duì)列來(lái)同時(shí)實(shí)現(xiàn)通信和同步,如圖6。

  

  對(duì)比兩種方案,各有優(yōu)缺點(diǎn):方案一實(shí)時(shí)性強(qiáng),但存在可重入性問(wèn)題;方案二實(shí)現(xiàn)簡(jiǎn)單而且可靠,但是消息隊(duì)列機(jī)制通信的實(shí)時(shí)性相對(duì)較弱。本中出站信息的突發(fā)性強(qiáng),如果采用方案一,則可能導(dǎo)致第二個(gè)通道的數(shù)據(jù)失效或者第一個(gè)通道的數(shù)據(jù)被覆蓋;如果采用方案二雖然數(shù)據(jù)的處理延時(shí)稍大,但是數(shù)據(jù)能夠完整存儲(chǔ)到消息隊(duì)列中不被損壞。此外,利用消息隊(duì)列為任務(wù)提供唯一的入口,能簡(jiǎn)化接口和方便功能擴(kuò)展。因此,本文采用消息隊(duì)列方案,其實(shí)現(xiàn)方法如下:

  每個(gè)任務(wù)都對(duì)應(yīng)一個(gè)消息隊(duì)列,任務(wù)只處理與之相對(duì)應(yīng)的消息隊(duì)列中的消息。對(duì)于發(fā)送方(task1),當(dāng)它需要將發(fā)送緩沖區(qū)buffer中的數(shù)據(jù)交給task2處理時(shí),只須將buffer中的數(shù)據(jù)發(fā)送到與task2對(duì)應(yīng)的消息隊(duì)列Q2中就行了。

  ret = delta_message_queue_send ( Queue_id[ 2 ], buffer, size );

  其中Queue_id[2]為消息隊(duì)列Q2的ID,size為消息大小(單位字節(jié))。

  對(duì)于接收方(task2),將接收消息函數(shù)的等待時(shí)間參數(shù)設(shè)為永久等待,達(dá)到當(dāng)消息隊(duì)列為空時(shí)阻塞任務(wù)的目的。task2的代碼如下:

  delta_task task1()

  {

  delta_status_code ret;

  …… // 定義其他局部變量

  while(1)

  {

  ret = delta_message_queue_receive(

  Queue_id[ 2 ], /*消息隊(duì)列ID*/

  RecBuff, /*指向接收緩沖區(qū)的指針*/

  size,/*接收消息的尺寸(單位字節(jié))*/

  DELTA_DEFAULT_OPTIONS, /*屬性集*/

  DELTA_NO_TIMEOUT /*等待時(shí)間*/

  );

  …… //完成task1功能的代碼

  }

  }

  通過(guò)這種方式,任務(wù)與任務(wù)之間、任務(wù)與中斷之間的通信和同步都得以實(shí)現(xiàn)。任務(wù)的狀態(tài)轉(zhuǎn)換如圖7:

  

  4 致命錯(cuò)誤的防止和解決

  通常異常是由兩種情況引起的:一種是數(shù)組越界或使用指針不當(dāng);另一種是任務(wù)棧溢出。為避免以上情況發(fā)生,數(shù)組和任務(wù)棧的大小必須設(shè)置恰當(dāng),修改數(shù)組元素的時(shí)候要保證下標(biāo)是在合法范圍內(nèi)的,使用指針要特別小心。不過(guò),提供了異常處理機(jī)制,用戶(hù)可以編寫(xiě)自己的擴(kuò)展例程,當(dāng)出現(xiàn)致命錯(cuò)誤的時(shí)候?qū)嵭幸欢ǖ耐炀却胧?,比如?fù)位程序整個(gè)系統(tǒng)軟件或者重新起動(dòng)指定任務(wù)。

  是一個(gè)強(qiáng)實(shí)時(shí)性的操作系統(tǒng),通過(guò)優(yōu)化任務(wù)劃分、有效的利用中斷機(jī)制滿(mǎn)足了系統(tǒng)的強(qiáng)實(shí)時(shí)要求。利用本文提出的通信和同步方案,實(shí)現(xiàn)了任務(wù)的標(biāo)準(zhǔn)化接口,方便地進(jìn)行了多次功能擴(kuò)展,并且顯示了它可靠性強(qiáng)的優(yōu)點(diǎn)。


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉