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

基于VxWorks的消息控制軟件設計方法

2022-04-29 16:02:41楊帆
計算機應用文摘 2022年13期
關鍵詞:設計

楊帆

關鍵詞 消息控制軟件 軟件架構設計

VxWorks 操作系統以其高實時性和友好的用戶開發環境被廣泛應用于各種消息控制軟件中[1] 。但是,在設計消息控制軟件時,經常會出現各模塊之間互相調用復雜、軟件結構設計過于隨意的情況。這會使軟件的可讀性、可靠性較差,并且造成了軟件在維護階段成本太大、無法快速復用、復用時具有隱患的問題。本文針對這類軟件,結合VxWorks 操作系統的互斥資源訪問和實時性的特點,分析了軟件設計中遇到的種種缺點和不足,提出了鏈路信息控制軟件的新的設計方法。

1設計消息控制軟件存在的問題

對于消息控制軟件來說,基本都應該包含以下模塊:RS422 串口、RS232 串口、以太網口等硬件接口的收發模塊,以及消息編碼解碼模塊、鏈路消息監控過濾模塊、鏈路消息分析的算法模塊、硬件自檢和配置文件讀取模塊等。這些模塊可以支撐一個比較基礎的消息控制功能的軟件。

在設計消息控制軟件時需要考慮模塊之間的通信和相互調用的問題[2] 。在傳統C 語言程序中,如果一個模塊的功能函數要使用其他模塊的函數,最簡單的方式是直接調用。但是,這會使得模塊之間過分相互依賴,導致緊耦合,不利于軟件的模塊化設計。由于模塊間的相互調用,使得這些模塊無法復用到新的程序中,造成有新需求時需要對這些模塊進行重新開發,無法做到在原來基礎上進行擴展。

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

2消息控制軟件設計

2.1消息控制軟件的模塊架構

在以往的消息控制軟件中雖然也有鏈路監控、消息編解碼、消息過濾等模塊,但是模塊和模塊之間是相互調用的。我們需要設計一個中介模塊來統一調度各個模塊的對外接口。此外,我們還需要在每個模塊中增加一個接口層,在分析每一個模塊對外有哪些接口后,將這些接口以句柄的方式統一起來,作為對外的接口層。

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

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

在中介模塊中,需要聲明一個mediator _recv _handler_list 的數組。這是一個存放其他所有模塊接口句柄的集合。中介模塊還需要聲明一個關于包含相關模塊的枚舉量,其可以定義每一個模塊值。send_msg_to_function 是中介模塊對外的接口。當一個模塊需要調用過濾模塊中的函數時,只需要調用中介模塊的send_msg_to_function 并填寫好Msg 結構體。send_msg_to_function 函數檢查mediator_recv_handler_list是否存在過濾接口模塊接口層的句柄,如果存在,則調用消息過濾模塊接口層的句柄,否則返回調用失敗的錯誤值。基于此,在其他模塊調用消息過濾模塊中的函數時,都需要通過中介模塊。調用模塊可以不關心過濾模塊是否有相關函數(如果沒有也不會編譯報錯),消息過濾模塊不需要關注是哪個模塊調用了自己。做到了模塊之間的松耦合,使得模塊之間獨立存在、自由組合。通過在消息過濾模塊中分出接口層,做到模塊內部的高內聚。

2.2定時器的封裝

封裝的定時器主要是由節拍器、訂閱器、訂閱者三個部分組成。節拍器根據CPU 指令周期,每秒鐘向訂閱器發送信號量。訂閱器收到信號量后,每秒循環遍歷訂閱器中定義的結構體鏈表,檢查鏈表中注冊的訂閱者是否符合觸發條件。如果符合觸發條件,則開啟線程執行訂閱者所注冊的update 事件,并在訂閱器結構體鏈表中注銷訂閱者。訂閱者需要定義具體的update 事件,其指的是滿足具體條件后需要執行的函數。訂閱者需要在訂閱器中注冊,注冊在訂閱器的鏈表內。

訂閱者的結構體中聲明了需要延遲多少秒觸發,觸發幾次,周期為多少秒,并且包含一個函數指針update,指向需要觸發的事件函數。

2.3全局變量的使用

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

VxWorks 操作系統提供了互斥信號量來解決任務之間存在的同步問題。使用互斥信號量可以在訪問修改全局變量時具有排他性,在初始化互斥信號量時,將屬性設置為SEM_Q_FIFO,據此訪問全局變量的請求就可以符合先來先得的順序。這可以避免線程之間調用時可能發生的問題。

3結束語

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

猜你喜歡
設計
二十四節氣在平面廣告設計中的應用
河北畫報(2020年8期)2020-10-27 02:54:06
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
基于PWM的伺服控制系統設計
電子制作(2019年19期)2019-11-23 08:41:36
基于89C52的32只三色LED搖搖棒設計
電子制作(2019年15期)2019-08-27 01:11:50
基于ICL8038的波形發生器仿真設計
電子制作(2019年7期)2019-04-25 13:18:16
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
從平面設計到“設計健康”
商周刊(2017年26期)2017-04-25 08:13:04
主站蜘蛛池模板: 亚洲VA中文字幕| 国产精品嫩草影院av| 亚洲五月激情网| 高清无码不卡视频| 欧美成人精品在线| 国产综合欧美| 久久www视频| 国产美女主播一级成人毛片| 亚洲开心婷婷中文字幕| 精品久久蜜桃| 福利姬国产精品一区在线| 99精品影院| 国产网站免费观看| 婷婷六月天激情| 国产在线观看人成激情视频| 欧美在线视频不卡第一页| 一级成人a毛片免费播放| 亚洲黄色网站视频| 五月激情综合网| 伊人91在线| 欧美亚洲国产精品第一页| 日本国产在线| 亚洲天堂成人| 久久国产拍爱| 91精品国产91久无码网站| 1024你懂的国产精品| 欧美日韩国产综合视频在线观看| 免费观看三级毛片| 亚洲日韩久久综合中文字幕| 91精品网站| 毛片卡一卡二| 制服丝袜一区| 国产原创演绎剧情有字幕的| 精品国产女同疯狂摩擦2| 999精品色在线观看| 黄色网站不卡无码| 亚洲AV无码乱码在线观看裸奔| 久久综合色88| 国产男女XX00免费观看| 日韩高清欧美| 国产精品女熟高潮视频| 超清无码熟妇人妻AV在线绿巨人| 久久久久无码精品国产免费| 国产在线无码av完整版在线观看| 在线欧美一区| 亚洲品质国产精品无码| 在线观看亚洲成人| 四虎精品国产永久在线观看| 国产精品久久久久无码网站| 亚洲最大情网站在线观看| 99久久精品免费看国产免费软件| 亚洲色偷偷偷鲁综合| 欧美亚洲另类在线观看| 韩日午夜在线资源一区二区| 少妇被粗大的猛烈进出免费视频| 久久国产精品波多野结衣| 国产精品所毛片视频| 亚洲精品第五页| 手机在线免费毛片| 国产成人AV男人的天堂| 亚洲最新地址| 素人激情视频福利| 欧美一区二区三区不卡免费| a级毛片毛片免费观看久潮| 国产精品13页| 国产精品亚洲精品爽爽| 国产熟睡乱子伦视频网站| 一本无码在线观看| 视频在线观看一区二区| 国产成人无码久久久久毛片| 成人一级免费视频| 精品久久久久久久久久久| 亚洲资源站av无码网址| 国产香蕉在线| 国产微拍一区二区三区四区| 亚洲欧美日韩综合二区三区| 久久情精品国产品免费| 欧美天堂在线| 亚洲第一区欧美国产综合 | 久久无码免费束人妻| 欧美成人综合视频| 国产精品久久自在自线观看|