色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

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

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

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

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

          本文引用地址:http://cafeforensic.com/article/201612/324501.htm

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



          評論


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

          關(guān)閉