<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

模塊化管理和設計

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

  31. //統計層數
  32. layer_count,
  33. layer_last=layer_count-1,
  34. }Layer;

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

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

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



關(guān)鍵詞: 模塊化程序設計設計

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>