新聞中心

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

        基于DeltaOS的系統軟件設計

        作者: 時間:2011-08-18 來源:網絡 收藏
        3 可靠性保證和可擴展性的提高

        本文引用地址:http://www.104case.com/article/150332.htm

          對于任何來說,可靠性都是至關重要的。的可靠性在任務內是容易做到,通常問題都是出在任務間的接口之上。接口也關系到可擴展性能。在多任務操作中,任務間的接口是通過同步和通信機制來實現的,因此同步和通信機制必須認真選取。

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

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

          

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

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

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

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

          對于接收方(task2),將接收消息函數的等待時間參數設為永久等待,達到當消息隊列為空時阻塞任務的目的。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 /*等待時間*/

          );

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

          }

          }

          通過這種方式,任務與任務之間、任務與中斷之間的通信和同步都得以實現。任務的狀態轉換如圖7:

          

          4 致命錯誤的防止和解決

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

          是一個強實時性的操作系統,通過優化任務劃分、有效的利用中斷機制滿足了系統的強實時要求。利用本文提出的通信和同步方案,實現了任務的標準化接口,方便地進行了多次功能擴展,并且顯示了它可靠性強的優點。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宽城| 汉沽区| 南溪县| 绥滨县| 沅陵县| 韶山市| 安龙县| 聊城市| 馆陶县| 阿克陶县| 长沙县| 兰溪市| 永寿县| 含山县| 万山特区| 德化县| 衡阳市| 石棉县| 金平| 尚志市| 徐州市| 七台河市| 南陵县| 长乐市| 上犹县| 鄱阳县| 赣榆县| 高阳县| 巴里| 都兰县| 资阳市| 无棣县| 阿城市| 尖扎县| 鄢陵县| 长武县| 肥西县| 四会市| 巴林左旗| 上思县| 淳化县|