亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于VxWorks的消息控制軟件設(shè)計(jì)方法

        2022-05-30 08:23:03楊帆
        關(guān)鍵詞:句柄信號(hào)量調(diào)用

        楊帆

        關(guān)鍵詞 消息控制軟件 軟件架構(gòu)設(shè)計(jì)

        VxWorks 操作系統(tǒng)以其高實(shí)時(shí)性和友好的用戶開(kāi)發(fā)環(huán)境被廣泛應(yīng)用于各種消息控制軟件中[1] 。但是,在設(shè)計(jì)消息控制軟件時(shí),經(jīng)常會(huì)出現(xiàn)各模塊之間互相調(diào)用復(fù)雜、軟件結(jié)構(gòu)設(shè)計(jì)過(guò)于隨意的情況。這會(huì)使軟件的可讀性、可靠性較差,并且造成了軟件在維護(hù)階段成本太大、無(wú)法快速?gòu)?fù)用、復(fù)用時(shí)具有隱患的問(wèn)題。本文針對(duì)這類(lèi)軟件,結(jié)合VxWorks 操作系統(tǒng)的互斥資源訪問(wèn)和實(shí)時(shí)性的特點(diǎn),分析了軟件設(shè)計(jì)中遇到的種種缺點(diǎn)和不足,提出了鏈路信息控制軟件的新的設(shè)計(jì)方法。

        1設(shè)計(jì)消息控制軟件存在的問(wèn)題

        對(duì)于消息控制軟件來(lái)說(shuō),基本都應(yīng)該包含以下模塊:RS422 串口、RS232 串口、以太網(wǎng)口等硬件接口的收發(fā)模塊,以及消息編碼解碼模塊、鏈路消息監(jiān)控過(guò)濾模塊、鏈路消息分析的算法模塊、硬件自檢和配置文件讀取模塊等。這些模塊可以支撐一個(gè)比較基礎(chǔ)的消息控制功能的軟件。

        在設(shè)計(jì)消息控制軟件時(shí)需要考慮模塊之間的通信和相互調(diào)用的問(wèn)題[2] 。在傳統(tǒng)C 語(yǔ)言程序中,如果一個(gè)模塊的功能函數(shù)要使用其他模塊的函數(shù),最簡(jiǎn)單的方式是直接調(diào)用。但是,這會(huì)使得模塊之間過(guò)分相互依賴(lài),導(dǎo)致緊耦合,不利于軟件的模塊化設(shè)計(jì)。由于模塊間的相互調(diào)用,使得這些模塊無(wú)法復(fù)用到新的程序中,造成有新需求時(shí)需要對(duì)這些模塊進(jìn)行重新開(kāi)發(fā),無(wú)法做到在原來(lái)基礎(chǔ)上進(jìn)行擴(kuò)展。

        在消息控制軟件中經(jīng)常會(huì)處理一些任務(wù),如在固定周期時(shí)間內(nèi)重復(fù)處理多次業(yè)務(wù);延遲n 秒后,若未收到回執(zhí)應(yīng)答,則周期時(shí)間內(nèi)處理重復(fù)n 次的業(yè)務(wù)模型。一方面,在VxWorks 操作系統(tǒng)中,我們可以使用看門(mén)狗或者全局信號(hào)量的方式來(lái)處理定時(shí)觸發(fā)的任務(wù)。但是,在看門(mén)狗中執(zhí)行的函數(shù)本質(zhì)是在中斷上進(jìn)行執(zhí)行的,存在無(wú)法嵌套等約束條件,并且在部分硬件系統(tǒng)中無(wú)法完整支持。另一方面,利用全局信號(hào)量的方式則存在代碼不統(tǒng)一和可讀性差的問(wèn)題,無(wú)法滿足高內(nèi)聚低耦合的設(shè)計(jì)需求。通常在一些成熟的面向?qū)ο笳Z(yǔ)言的框架中,會(huì)提供setTimer()、onTimer()相關(guān)接口,使用接口回調(diào)函數(shù)的方式去重復(fù)處理業(yè)務(wù)。VxWorks 操作系統(tǒng)一般使用C 語(yǔ)言進(jìn)行開(kāi)發(fā),支持延遲若干秒后周期處理業(yè)務(wù)的模塊[3] 。另外,還需要考慮線程之間通信使用全局變量的問(wèn)題。盡管VxWorks 操作系統(tǒng)推薦了一些通信手段,但在一些C語(yǔ)言程序中經(jīng)常會(huì)出現(xiàn)沒(méi)有保護(hù)的全局變量直接進(jìn)行線程通信的情況,十分不利于線程的安全,造成大量的隱患,本文設(shè)計(jì)了一個(gè)軟件模塊來(lái)定制全局變量的訪問(wèn)改變。

        2消息控制軟件設(shè)計(jì)

        2.1消息控制軟件的模塊架構(gòu)

        在以往的消息控制軟件中雖然也有鏈路監(jiān)控、消息編解碼、消息過(guò)濾等模塊,但是模塊和模塊之間是相互調(diào)用的。我們需要設(shè)計(jì)一個(gè)中介模塊來(lái)統(tǒng)一調(diào)度各個(gè)模塊的對(duì)外接口。此外,我們還需要在每個(gè)模塊中增加一個(gè)接口層,在分析每一個(gè)模塊對(duì)外有哪些接口后,將這些接口以句柄的方式統(tǒng)一起來(lái),作為對(duì)外的接口層。

        以消息過(guò)濾模塊為例,過(guò)濾模塊的接口層聲明的示意代碼如下:

        消息過(guò)濾接口是在原來(lái)消息過(guò)濾的代碼中添加一個(gè)新的接口層。在消息過(guò)濾接口模塊的聲明中,首先需要聲明消息過(guò)濾模塊中函數(shù)的id———可以以宏定義的形式聲明,也可以用枚舉量的形式聲明。此外,還需要聲明一個(gè)send_msg_to_filter_function 的句柄,其作用是接收所有從中介模塊發(fā)過(guò)來(lái)的消息,并根據(jù)function_id 選擇過(guò)濾模塊中正確的執(zhí)行函數(shù)。將原有對(duì)外傳送消息的函數(shù)統(tǒng)一在send_msg_to_filter_function 句柄中,好處是可以不用過(guò)多暴露本模塊的接口,做到統(tǒng)一管理。另外,還需要將send_msg_to_filter_function 句柄放在中介模塊存儲(chǔ)中,具體存儲(chǔ)在中介模塊的句柄集合中,據(jù)此中介模塊的句柄集合包含了所有模塊的對(duì)外句柄,使得其他模塊調(diào)用消息過(guò)濾模塊時(shí),都需要通過(guò)中介模塊。

        在中介模塊中,需要聲明一個(gè)mediator _recv _handler_list 的數(shù)組。這是一個(gè)存放其他所有模塊接口句柄的集合。中介模塊還需要聲明一個(gè)關(guān)于包含相關(guān)模塊的枚舉量,其可以定義每一個(gè)模塊值。send_msg_to_function 是中介模塊對(duì)外的接口。當(dāng)一個(gè)模塊需要調(diào)用過(guò)濾模塊中的函數(shù)時(shí),只需要調(diào)用中介模塊的send_msg_to_function 并填寫(xiě)好Msg 結(jié)構(gòu)體。send_msg_to_function 函數(shù)檢查mediator_recv_handler_list是否存在過(guò)濾接口模塊接口層的句柄,如果存在,則調(diào)用消息過(guò)濾模塊接口層的句柄,否則返回調(diào)用失敗的錯(cuò)誤值?;诖?,在其他模塊調(diào)用消息過(guò)濾模塊中的函數(shù)時(shí),都需要通過(guò)中介模塊。調(diào)用模塊可以不關(guān)心過(guò)濾模塊是否有相關(guān)函數(shù)(如果沒(méi)有也不會(huì)編譯報(bào)錯(cuò)),消息過(guò)濾模塊不需要關(guān)注是哪個(gè)模塊調(diào)用了自己。做到了模塊之間的松耦合,使得模塊之間獨(dú)立存在、自由組合。通過(guò)在消息過(guò)濾模塊中分出接口層,做到模塊內(nèi)部的高內(nèi)聚。

        2.2定時(shí)器的封裝

        封裝的定時(shí)器主要是由節(jié)拍器、訂閱器、訂閱者三個(gè)部分組成。節(jié)拍器根據(jù)CPU 指令周期,每秒鐘向訂閱器發(fā)送信號(hào)量。訂閱器收到信號(hào)量后,每秒循環(huán)遍歷訂閱器中定義的結(jié)構(gòu)體鏈表,檢查鏈表中注冊(cè)的訂閱者是否符合觸發(fā)條件。如果符合觸發(fā)條件,則開(kāi)啟線程執(zhí)行訂閱者所注冊(cè)的update 事件,并在訂閱器結(jié)構(gòu)體鏈表中注銷(xiāo)訂閱者。訂閱者需要定義具體的update 事件,其指的是滿足具體條件后需要執(zhí)行的函數(shù)。訂閱者需要在訂閱器中注冊(cè),注冊(cè)在訂閱器的鏈表內(nèi)。

        訂閱者的結(jié)構(gòu)體中聲明了需要延遲多少秒觸發(fā),觸發(fā)幾次,周期為多少秒,并且包含一個(gè)函數(shù)指針update,指向需要觸發(fā)的事件函數(shù)。

        2.3全局變量的使用

        重構(gòu)老代碼時(shí)通常會(huì)遇到全局變量的使用問(wèn)題。在無(wú)保護(hù)的情況下,頻繁在多線程任務(wù)下讀寫(xiě)全局變量是存在隱患的。此時(shí)可以將全局變量的讀寫(xiě)單獨(dú)放在一個(gè).c 文件中,其中的每一個(gè)全局變量的讀取都要在保護(hù)之中。方法是在讀取全局變量時(shí)使用get(),讀取全局變量時(shí)使用set(),使用set 和get 函數(shù)時(shí)加互斥信號(hào)量。

        VxWorks 操作系統(tǒng)提供了互斥信號(hào)量來(lái)解決任務(wù)之間存在的同步問(wèn)題。使用互斥信號(hào)量可以在訪問(wèn)修改全局變量時(shí)具有排他性,在初始化互斥信號(hào)量時(shí),將屬性設(shè)置為SEM_Q_FIFO,據(jù)此訪問(wèn)全局變量的請(qǐng)求就可以符合先來(lái)先得的順序。這可以避免線程之間調(diào)用時(shí)可能發(fā)生的問(wèn)題。

        3結(jié)束語(yǔ)

        好的軟件是可維護(hù)的、可擴(kuò)展的、可復(fù)用的,且靈活性強(qiáng)。可維護(hù)是指當(dāng)遇到新需求時(shí),只需要更改需要更改的部分,改動(dòng)量越小越好;可擴(kuò)展性是指新增功能時(shí),事先預(yù)留了接口,之前設(shè)計(jì)的接口是通用的;可復(fù)用是指一個(gè)新的模塊是可以一直使用的,不需要重新編制;靈活性是指模塊間可以任意調(diào)配使用,不需要打破原有軟件架構(gòu)去實(shí)現(xiàn)新的功能。但是,我們編制代碼時(shí)不一定完全符合以上特性,往往在開(kāi)發(fā)階段為了快速開(kāi)發(fā)新功能,不注意這些開(kāi)發(fā)原則,為代碼的二次開(kāi)發(fā)埋下了隱患。本文針對(duì)消息控制軟件,參考以前的代碼的一些編寫(xiě)弊端,提出了一種軟件設(shè)計(jì)方法,以便重構(gòu)代碼和設(shè)計(jì)新代碼,充分滿足高內(nèi)聚低耦合的特性。

        猜你喜歡
        句柄信號(hào)量調(diào)用
        基于STM32的mbedOS信號(hào)量調(diào)度機(jī)制剖析
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        Nucleus PLUS操作系統(tǒng)信號(hào)量機(jī)制的研究與測(cè)試
        高校圖書(shū)館持久標(biāo)識(shí)符應(yīng)用研究
        編譯程序語(yǔ)法分析句柄問(wèn)題分析與探討
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        MFC應(yīng)用程序多線程混合顯示界面方法研究
        μC/OS- -III對(duì)信號(hào)量的改進(jìn)
        Linux操作系統(tǒng)信號(hào)量機(jī)制的實(shí)時(shí)化改造
        中文无码日韩欧免费视频 | 国产精品无码aⅴ嫩草| 夜爽8888视频在线观看| 国产av一区二区三区丝袜| 黄页免费人成网址大全| 粗大猛烈进出高潮视频大全| 国产精品久久久久久久久岛| 最新国产在线精品91尤物| 长腿校花无力呻吟娇喘的视频| 91华人在线| 午夜视频在线观看日本| 国产乱人无码伦av在线a | 国产女主播视频一区二区三区| 亚洲国产精品一区二区成人av| 国产精品亚洲欧美大片在线看| 欧美日韩色| 国产精品久久熟女吞精| 超碰青青草手机在线免费观看| 三级全黄裸体| 亚洲av伊人久久综合密臀性色 | 又硬又粗又大一区二区三区视频| 无码专区无码专区视频网址| 99久久婷婷国产精品网| 先锋五月婷婷丁香草草| 久久精品国产一区二区电影| 水蜜桃视频在线观看免费18| 白浆国产精品一区二区| 亚洲国产另类精品| 欧美刺激午夜性久久久久久久| 国产午夜三级精品久久久| 成人麻豆日韩在无码视频| 日韩av高清无码| 久久久亚洲精品免费视频| 黄片小视频免费观看完整版| 日韩成人无码| 国产亚洲第一精品| 男女打扑克视频在线看| 久久久国产打桩机| 国产在视频线精品视频www666| 久久狠狠髙潮曰十八女人| 国产猛男猛女超爽免费视频|