<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于DeltaOS的系統軟件設計

基于DeltaOS的系統軟件設計

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

本文引用地址:http://dyxdggzs.com/article/150332.htm

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

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

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

  

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

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

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

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

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

  delta_task task1()

  {

  delta_status_code ret;

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

  while(1)

  {

  ret = delta_message_queue_receive(

  Queue_id[ 2 ], /*消息隊列ID*/

  RecBuff, /*指向接收緩沖區的指針*/

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

  DELTA_DEFAULT_OPTIONS, /*屬性集*/

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

  );

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

  }

  }

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

  

  4 致命錯誤的防止和解決

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

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


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

關(guān)鍵詞: 設計 軟件 系統 DeltaOS 基于

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>