<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 模塊化管理和設(shè)計(jì)

          模塊化管理和設(shè)計(jì)

          作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          現(xiàn)在的程序設(shè)計(jì)都希望模塊化,這樣不僅僅能夠?qū)崿F(xiàn)不同代碼的復(fù)用,提高開發(fā)速度,同時(shí)也減小了在維護(hù)過程中的難度。不同的模塊具有不同的功能。這樣也就方便了單獨(dú)操作。比如在C語言中函數(shù)的設(shè)計(jì)使得不同的開發(fā)人員可以協(xié)同合作,而不是從頭到尾一個(gè)過程。因此模塊化的設(shè)計(jì)是非常的必要的。只需要在前期規(guī)劃的過程中劃分好最基本的模塊就可以方便后期的設(shè)計(jì),當(dāng)然前期的劃分方式也直接決定后期開發(fā)的難度和速度。因此前期的分配過程是體現(xiàn)設(shè)計(jì)師能力的重點(diǎn)。
          在Linux中驅(qū)動(dòng)程序的添加和移除就是典型的模塊化操作,這樣也就方便了基本的操作。這樣通過模塊的注冊(cè)和注銷操作就能夠?qū)崿F(xiàn)模塊的添加。而且在Linux中模塊的注冊(cè)和釋放都是采用同樣的函數(shù)實(shí)現(xiàn)。因此我們可以想象在我們的模塊化設(shè)計(jì)中也可以采用類似的方式實(shí)現(xiàn)。也就是通過統(tǒng)一的注冊(cè)方式。但是具體的模塊操作采用回調(diào)函數(shù)的形式,這與linux驅(qū)動(dòng)中的file_operations結(jié)構(gòu)體具有異曲同工之妙,也就是通過一個(gè)結(jié)構(gòu)體實(shí)現(xiàn)不同的函數(shù)接口,而基本的實(shí)現(xiàn)過程需要我們?cè)谠O(shè)計(jì)驅(qū)動(dòng)的過程中進(jìn)行實(shí)現(xiàn),也就是采用函數(shù)指針的方式進(jìn)行調(diào)用,即實(shí)現(xiàn)回調(diào)。這樣我們就能實(shí)現(xiàn)不同模塊的具體操作。
          模塊的管理應(yīng)該包含兩個(gè)過程:注冊(cè)和注銷,同時(shí)注冊(cè)又包括初始化和啟動(dòng),注銷包括停止和撤銷操作。因此可以采用一個(gè)4種狀態(tài)的狀態(tài)圖表示。
          但是很多情況下的模塊化存在一定的依賴關(guān)系,這與我們?cè)趯慚akefile中的依賴一樣,需要?jiǎng)?chuàng)建一些其他的模塊才能創(chuàng)建當(dāng)前模塊。為了解決這種問題,我們通常對(duì)模塊進(jìn)行分層設(shè)計(jì)。也就是將存在一定依賴關(guān)系的模塊放在不同的層次上,通過逐層逐層的初始化方式進(jìn)行模塊初始化。這樣就能較好的解決依賴問題。但是有時(shí)候同層也會(huì)存在一定的依賴關(guān)系,這時(shí)我們可以采用分級(jí)的方式解決一定的依賴關(guān)系。因此我們可以將依賴關(guān)系最高的模塊放在最低的層次上,先進(jìn)行初始化,這樣方便其他的模塊對(duì)其進(jìn)行依賴。然后在對(duì)其他的層次初始化。
          在實(shí)際的開發(fā)中通常采用不同三層模式,即:平臺(tái)層(這層的模塊對(duì)象先初始化),框架層(第二初始化),應(yīng)用層(最后初始化)。同層的依賴關(guān)系也可以采用分級(jí)(本質(zhì)與分層是相同的)解決。
          但是在撤銷的過程中我們需要注意的是,撤銷的順序必須與初始化的順序相反,這也是依賴關(guān)系所導(dǎo)致的,只有先撤銷后初始化的模塊才不會(huì)破壞對(duì)其他模塊的影響。
          模塊的管理是模塊化設(shè)計(jì)中非常重要的一環(huán)節(jié),采用回調(diào)函數(shù)的方式能夠很好的解決不同模塊的初始化操作。因此通用的函數(shù)接口也是不斷總結(jié)和分析得到的。
          鏈表在模塊化管理中有很重要的作用,記得在Linux中鏈表中不存在內(nèi)容,只是兩個(gè)指針,但是通常將鏈表嵌入到模塊結(jié)構(gòu)體中就能實(shí)現(xiàn)不同模塊的級(jí)聯(lián)。
          分層的方式下可以采用鏈表將該層中所有的模塊對(duì)象關(guān)聯(lián)起來,也就是將一個(gè)簡(jiǎn)單的鏈表結(jié)構(gòu)體節(jié)點(diǎn)嵌入到模塊結(jié)構(gòu)體中,通常放在第一個(gè)元素的位置上,這樣就可以通過鏈表指向的地址表示模塊的地址(第一個(gè)元素的地址和結(jié)構(gòu)體的地址是相同的這一原理)。當(dāng)然也可以不放在第一個(gè)元素的位置上,這在 linux源碼中經(jīng)??砂l(fā)現(xiàn)。
          1. typedef struct list_node
          2. {
          3. struct list*prev;
          4. struct list*next;
          5. }list_node;

          6. typedef struct list
          7. {
          8. struct list*prev;
          9. struct list*next;
          10. intlist_count;
          11. }list;

          12. typedefstruct module_object
          13. {
          14. list_node _node;
          15. ....

          16. }module_object;
          模塊和層次的實(shí)現(xiàn)可以采用枚舉型結(jié)構(gòu)事先安排好所有的模塊和所需要的層次,但是最好在其中設(shè)置相應(yīng)的統(tǒng)計(jì)參數(shù),便于參數(shù)的檢查。
          比如:
          1. typedef enum
          2. {
          3. /*不同的模塊*/
          4. module0,
          5. module1,
          6. module2,
          7. ...
          8. moduleN-1,
          9. /*統(tǒng)計(jì)模塊的總數(shù)*/
          10. module_count,
          11. /*記錄最后的一個(gè)標(biāo)號(hào)*/
          12. module_last=module_count-1,
          13. }modules;

          14. typedef enum
          15. {
          16. //platform layer,平臺(tái)層分級(jí)
          17. PLayer0,
          18. PLayer1,
          19. ...
          20. PLayerM-1,
          21. //framework layer,框架層分級(jí)
          22. FLayer0,
          23. FLayer1,
          24. ...
          25. FLayerN-1,

          26. //application layer,應(yīng)用層分級(jí)
          27. ALayer0,
          28. ALayer1,
          29. ...
          30. ALayerT-1,

          31. //統(tǒng)計(jì)層數(shù)
          32. layer_count,
          33. layer_last=layer_count-1,
          34. }Layer;

          上面就能實(shí)現(xiàn)分層和模塊的管理,通過下標(biāo)就能訪問具體的層和具體的模塊。當(dāng)然這些都需要我們?cè)趯?shí)際的設(shè)計(jì)中首先規(guī)劃好所有的層次和模塊關(guān)系。

          本文引用地址:http://www.ex-cimer.com/article/201612/324501.htm

          其實(shí)反過來看看linux的模塊化管理真的是做的非常好,因此多去理解linux源碼對(duì)我們的軟件設(shè)計(jì)有很大的提高,重要的是思想。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();