999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2022-04-29 16:02:41楊帆
計(jì)算機(jī)應(yīng)用文摘 2022年13期
關(guān)鍵詞:設(shè)計(jì)

楊帆

關(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ì)這類軟件,結(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ò)分相互依賴,導(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)中,我們可以使用看門狗或者全局信號(hào)量的方式來(lái)處理定時(shí)觸發(fā)的任務(wù)。但是,在看門狗中執(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 并填寫好Msg 結(jié)構(gòu)體。send_msg_to_function 函數(shù)檢查mediator_recv_handler_list是否存在過(guò)濾接口模塊接口層的句柄,如果存在,則調(diào)用消息過(guò)濾模塊接口層的句柄,否則返回調(diào)用失敗的錯(cuò)誤值?;诖耍谄渌K調(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)體鏈表中注銷訂閱者。訂閱者需要定義具體的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ù)下讀寫全局變量是存在隱患的。此時(shí)可以將全局變量的讀寫單獨(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ì)消息控制軟件,參考以前的代碼的一些編寫弊端,提出了一種軟件設(shè)計(jì)方法,以便重構(gòu)代碼和設(shè)計(jì)新代碼,充分滿足高內(nèi)聚低耦合的特性。

猜你喜歡
設(shè)計(jì)
二十四節(jié)氣在平面廣告設(shè)計(jì)中的應(yīng)用
何為設(shè)計(jì)的守護(hù)之道?
《豐收的喜悅展示設(shè)計(jì)》
流行色(2020年1期)2020-04-28 11:16:38
基于PWM的伺服控制系統(tǒng)設(shè)計(jì)
電子制作(2019年19期)2019-11-23 08:41:36
基于89C52的32只三色LED搖搖棒設(shè)計(jì)
電子制作(2019年15期)2019-08-27 01:11:50
基于ICL8038的波形發(fā)生器仿真設(shè)計(jì)
電子制作(2019年7期)2019-04-25 13:18:16
瞞天過(guò)?!律O(shè)計(jì)萌到家
設(shè)計(jì)秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計(jì)叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
從平面設(shè)計(jì)到“設(shè)計(jì)健康”
商周刊(2017年26期)2017-04-25 08:13:04
主站蜘蛛池模板: 国产h视频在线观看视频| 99视频在线免费看| 激情网址在线观看| 亚洲色图另类| 亚洲妓女综合网995久久| 国产99视频免费精品是看6| 亚洲成年人片| 18禁高潮出水呻吟娇喘蜜芽| 三上悠亚在线精品二区| 色综合a怡红院怡红院首页| 欧美日韩成人在线观看| 午夜日b视频| 久久这里只精品国产99热8| 国产色图在线观看| 国产va免费精品观看| 成人午夜免费观看| 2021天堂在线亚洲精品专区| 2018日日摸夜夜添狠狠躁| 91欧美亚洲国产五月天| 国产精品区网红主播在线观看| 久久中文字幕不卡一二区| 亚洲 欧美 日韩综合一区| 2020最新国产精品视频| 99热这里只有精品5| 国产日韩欧美精品区性色| 少妇极品熟妇人妻专区视频| 亚洲—日韩aV在线| 国产欧美日韩精品综合在线| 亚洲黄网在线| 亚洲精品视频在线观看视频| av尤物免费在线观看| 亚洲欧美另类视频| 秋霞一区二区三区| 精品久久久久久中文字幕女 | 国产福利小视频高清在线观看| 欧美黑人欧美精品刺激| 精品无码一区二区在线观看| 91亚洲免费| 欧美a在线看| 亚洲一级色| 亚洲日韩精品综合在线一区二区 | 亚洲福利视频一区二区| www.精品国产| 天天综合天天综合| 成人va亚洲va欧美天堂| 丝袜高跟美脚国产1区| 亚洲天堂免费| 日韩在线播放欧美字幕| 国产h视频在线观看视频| 亚洲一区二区三区中文字幕5566| 国产免费精彩视频| 青青草一区二区免费精品| 国产免费精彩视频| 在线观看国产小视频| а∨天堂一区中文字幕| 亚洲国产精品国自产拍A| a天堂视频| 毛片免费高清免费| 国产凹凸一区在线观看视频| 日韩天堂视频| 国产凹凸一区在线观看视频| 色哟哟国产精品| 国产制服丝袜91在线| 亚洲午夜国产片在线观看| 国产成人一区在线播放| 亚洲国产精品成人久久综合影院| 免费一级无码在线网站| 久久免费观看视频| 真实国产精品vr专区| 亚洲第一福利视频导航| 黄片一区二区三区| 一本无码在线观看| 激情综合婷婷丁香五月尤物| 在线观看亚洲精品福利片| 久久精品最新免费国产成人| 亚洲高清免费在线观看| av天堂最新版在线| 国产农村妇女精品一二区| 日本免费一区视频| 国产无吗一区二区三区在线欢| 欧美日韩成人| 国产精品久久久精品三级|