• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    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://www.czjhyjcfj.com/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)同步。

      為了滿足通信和同步的需要,可以采用兩種方案:第一種方案是信號(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ī)制滿足了系統(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)閉
    主站蜘蛛池模板: 始兴县| 右玉县| 会东县| 隆化县| 神农架林区| 阿坝县| 峡江县| 阜康市| 新安县| 金昌市| 定远县| 望奎县| 台江县| 渝中区| 兴仁县| 海口市| 肇源县| 金湖县| 新乐市| 太白县| 安溪县| 米脂县| 利川市| 安图县| 铜陵市| 佛山市| 黄大仙区| 合肥市| 南岸区| 阳新县| 观塘区| 永靖县| 清水县| 城口县| 隆回县| 图木舒克市| 溧水县| 宁海县| 雅安市| 鄄城县| 札达县|