課程費(fèi)用

5800.00 /人

課程時(shí)長(zhǎng)

2

成為教練

課程簡(jiǎn)介

本培訓(xùn)課由【60個(gè)技術(shù)+1套管理方法】組成
?分鐘級(jí)重構(gòu):必備日常局部重構(gòu)18技
?模塊重構(gòu):讓模塊維護(hù)不再痛苦24技
?架構(gòu)重構(gòu):多任務(wù)及通信優(yōu)化14技
?架構(gòu)重構(gòu):底層規(guī)范中層聰明12技
?架構(gòu)重構(gòu):4種需求變更的設(shè)計(jì)應(yīng)對(duì)
?成功架構(gòu)重構(gòu)的關(guān)鍵步驟與管理原則

目標(biāo)收益

培訓(xùn)對(duì)象

課程大綱

引論:讓重構(gòu)帶來實(shí)際價(jià)值 1.重構(gòu)理論基礎(chǔ):
Refactoring的歷史
Refactoring的本質(zhì)
代碼重構(gòu):Code Refactoring
模塊重構(gòu):Big Refactoring
架構(gòu)重構(gòu):Architectural Refactoring

2.C程序重構(gòu)管窺:
a)充分利用C語言:#define、#ifdef、static、union、……
代碼重構(gòu)實(shí)例:用static與注釋將一個(gè).c文件的常量、變量、函數(shù)完美層次化
b)解決痛點(diǎn)問題:全局變量太多、多任務(wù)執(zhí)行太亂
代碼重構(gòu)實(shí)例:按“采集-分析-執(zhí)行”組織battery.c/safe.c/led.c模塊間關(guān)系

3.本課內(nèi)容概覽:
60個(gè)技術(shù)+1套管理方法
分鐘級(jí)重構(gòu):必備日常局部重構(gòu)18技 4.從圈復(fù)雜度說起:
代碼難維護(hù)的原因
如何讓新手也能維護(hù)
C語言的9個(gè)執(zhí)行變向語句

5.C的日常局部重構(gòu):
技0--引入三元表達(dá)式
技0--引入else if結(jié)構(gòu)
技0--引入switch結(jié)構(gòu)
技1--特殊情況提前return
技2--提煉復(fù)合判斷函數(shù)
技3--提煉統(tǒng)一判斷函數(shù)
技4--提煉統(tǒng)一狀態(tài)轉(zhuǎn)換函數(shù)
技5--借助邏輯重組,消除很傻很正確的if泥團(tuán)
技6--借助數(shù)據(jù)結(jié)構(gòu),消除很傻很正確的if泥團(tuán)
技7--將if-else邏輯簡(jiǎn)化為init-if邏輯
技8--封裝global count var計(jì)數(shù)和判斷,提供event接口
技9--封裝global flag var的清零和判斷,提供event接口
……案例
……練習(xí)

6.多函數(shù)的優(yōu)化:提煉函數(shù)
技10--提煉局部變量加工函數(shù)
技11--提煉共用help私有函數(shù)
……案例
……練習(xí)

7.多函數(shù)的優(yōu)化:合并函數(shù)
技12--合并代碼重復(fù)的函數(shù),加參數(shù)
技13--合并骨架雷同的函數(shù),加參數(shù)
技14--合并#ifdef #else定義的多個(gè)函數(shù)
技15--數(shù)據(jù)不同算法相同,統(tǒng)一到宏或模板
技16--數(shù)據(jù)不同算法相同,統(tǒng)一到void*處理函數(shù)
……案例
……練習(xí)

8.多函數(shù)的優(yōu)化:便捷接口函數(shù)
技17-- #define便捷接口函數(shù)
技18--二次封裝便捷接口函數(shù)
……案例
……練習(xí)
模塊重構(gòu):讓模塊維護(hù)不再痛苦24技 9.《人月神話》說:沒有銀彈?
信息隱藏
沒有信息隱藏,模塊化就沒有意義

10.信息隱藏!
技1--常量私有化
技2--變量static化
技3--函數(shù)static化
技4--.c文件的內(nèi)部結(jié)構(gòu)規(guī)范
技5--.c文件的文件命名規(guī)范

11.數(shù)據(jù)結(jié)構(gòu)
技6---引入結(jié)構(gòu)體,集中管理多個(gè)相關(guān)變量
技7---引入配置數(shù)組,集中管理配置型常量
技8---引入下標(biāo)常量,簡(jiǎn)化配置數(shù)組的使用
技9---引入union結(jié)構(gòu),支持多數(shù)據(jù)類型
技10--引入cmdBlock,集中管理多cmd var
技11--引入dataBlock,集中管理多state var
技12--將過大的globalStruct泥球拆分成dataBlock、cmdBlock
技13--優(yōu)化數(shù)據(jù)結(jié)構(gòu)來簡(jiǎn)化操作
……案例
……練習(xí)

12.接口暴露!
技14--接口函數(shù)moduleFunc()式命名
技15--任務(wù)函數(shù)的xxxx_xxxTask()式命名
技16--封裝global count var計(jì)數(shù)和判斷,提供event接口
技17--封裝global flag var的清零和判斷,提供event接口
技18--為event提供receive函數(shù)和peek函數(shù)
技19--#define便捷接口函數(shù)
技20--二次封裝便捷接口函數(shù)
技21--借便捷接口避免暴露bool型參數(shù)
……案例
……練習(xí)

13.性能第一波
技22--去除float運(yùn)算
技23--乘除運(yùn)算變移位運(yùn)算
技24--提供直接操作模塊內(nèi)部數(shù)據(jù)的指針
……案例
……練習(xí)
架構(gòu)重構(gòu):閱讀代碼的大技巧 14.如何閱讀嵌軟代碼,才能快速理解架構(gòu)、畫出架構(gòu)
……練習(xí)
技1:while(1)+ISR結(jié)構(gòu)的快速架構(gòu)理解
……練習(xí)
技2:OS下多任務(wù)結(jié)構(gòu)的快速架構(gòu)理解
……練習(xí)
技3:協(xié)議報(bào)文解析—調(diào)度—處理的快速架構(gòu)理解
架構(gòu)重構(gòu):多任務(wù)及通信優(yōu)化14技 15.嵌軟獨(dú)有的復(fù)雜性
運(yùn)行時(shí)的精細(xì)化控制
裸露的中斷、時(shí)鐘、時(shí)限、任務(wù)小而多
通盤分析多任務(wù)的必要性
建模練習(xí):任務(wù)分布圖、任務(wù)協(xié)作圖

16.任務(wù)模塊化
技1---按采集/分析/執(zhí)行分解任務(wù)
技2---[采集]--dataBlock-->[分析]--cmdBlock-->[執(zhí)行]模式
技3---顯式命名采集/分析/執(zhí)行任務(wù)函數(shù)(collect/analyse/action)
……案例
……練習(xí)

17.中斷處理
ISR與外界通信
技4---ISR拋出信號(hào)量
技5---ISR寫全局變量
時(shí)鐘中斷
技6---ISR負(fù)責(zé)計(jì)數(shù)+生成事件
技7---將處理分離到時(shí)間片任務(wù)
……案例
……練習(xí)

18.通信優(yōu)化
技8---隱藏任務(wù)+隊(duì)列,暴露同步接口函數(shù)
技9---將過大的globalStruct泥球拆分成dataBlock、cmdBlock
技10--顯式命名gxxDataBlock、gxxCmdBlock全局變量
……案例
……練習(xí)

19.性能第二波
硬實(shí)時(shí)
技11--由ISR處理緊急任務(wù)
控制執(zhí)行頻率
技12--變while(1)執(zhí)行為時(shí)間片執(zhí)行
處理OverLoad
技13--控制采樣率
技14--控制取樣率,拋棄部分采樣
……案例
……練習(xí)
架構(gòu)重構(gòu):“底層規(guī)范、中層聰明”12技 20.嵌軟分層規(guī)律
Layer就是一組Code Module
橫向分層
縱深封裝
技1—各層模塊文件名命名規(guī)范
技2—提煉通用Svc模塊
……案例
……練習(xí)

21.Drv等底層模塊
技3—將硬件相關(guān)代碼分離到Drv模塊
……案例
……練習(xí)

22.HAL與Svc層抽象:縱深封裝
技4—Hal模塊封裝Drv模塊
技5—Svc模塊封裝Hal與Drv模塊
技6—借函數(shù)指針結(jié)構(gòu)體支持底層可替換
……案例
……練習(xí)

23.HAL與Svc層抽象:狀態(tài)機(jī)
技7—統(tǒng)一的FSMCore作為高層event生成器
技8—提煉統(tǒng)一狀態(tài)轉(zhuǎn)換函數(shù)
技9—引入狀態(tài)機(jī)配置數(shù)組
……案例
……練習(xí)

24.HAL與Svc層抽象:協(xié)議子系統(tǒng)
技10--將粗糙的uint8_t[]報(bào)文結(jié)構(gòu)升級(jí)成struct
技11--將報(bào)文codec代碼從Drv模塊中分離出來 (協(xié)議模塊硬件無關(guān)/功能無關(guān))
技12--構(gòu)建管道-過濾器架構(gòu)
技13--Packet Adapter作為可插拔過濾器
……案例
……練習(xí)
架構(gòu)重構(gòu):4種需求變更的設(shè)計(jì)應(yīng)對(duì) 需求變更
A類:不同廠商的器件
B類:不同類型的器件
C類:不同網(wǎng)絡(luò)或協(xié)議
D類:不同功能或算法
……案例

A類應(yīng)對(duì)——drv.c 局部改變,接口不變
?實(shí)例分析

B類應(yīng)對(duì)——drv.c 改變,hal 不變
?實(shí)例分析

C類應(yīng)對(duì)——設(shè)計(jì)支持協(xié)議的新增與適配
?實(shí)例分析

D類應(yīng)對(duì)——自底向上,逐級(jí)優(yōu)化設(shè)計(jì)
?實(shí)例分析
成功架構(gòu)重構(gòu)的關(guān)鍵步驟與管理原則 本課程模塊大綱不公開

要不要文檔?
要不要預(yù)先設(shè)計(jì)?
代碼改改改過程中有沒有里程碑供風(fēng)險(xiǎn)評(píng)估?
全面重構(gòu)從哪一層開始?
……
引論:讓重構(gòu)帶來實(shí)際價(jià)值
1.重構(gòu)理論基礎(chǔ):
Refactoring的歷史
Refactoring的本質(zhì)
代碼重構(gòu):Code Refactoring
模塊重構(gòu):Big Refactoring
架構(gòu)重構(gòu):Architectural Refactoring

2.C程序重構(gòu)管窺:
a)充分利用C語言:#define、#ifdef、static、union、……
代碼重構(gòu)實(shí)例:用static與注釋將一個(gè).c文件的常量、變量、函數(shù)完美層次化
b)解決痛點(diǎn)問題:全局變量太多、多任務(wù)執(zhí)行太亂
代碼重構(gòu)實(shí)例:按“采集-分析-執(zhí)行”組織battery.c/safe.c/led.c模塊間關(guān)系

3.本課內(nèi)容概覽:
60個(gè)技術(shù)+1套管理方法
分鐘級(jí)重構(gòu):必備日常局部重構(gòu)18技
4.從圈復(fù)雜度說起:
代碼難維護(hù)的原因
如何讓新手也能維護(hù)
C語言的9個(gè)執(zhí)行變向語句

5.C的日常局部重構(gòu):
技0--引入三元表達(dá)式
技0--引入else if結(jié)構(gòu)
技0--引入switch結(jié)構(gòu)
技1--特殊情況提前return
技2--提煉復(fù)合判斷函數(shù)
技3--提煉統(tǒng)一判斷函數(shù)
技4--提煉統(tǒng)一狀態(tài)轉(zhuǎn)換函數(shù)
技5--借助邏輯重組,消除很傻很正確的if泥團(tuán)
技6--借助數(shù)據(jù)結(jié)構(gòu),消除很傻很正確的if泥團(tuán)
技7--將if-else邏輯簡(jiǎn)化為init-if邏輯
技8--封裝global count var計(jì)數(shù)和判斷,提供event接口
技9--封裝global flag var的清零和判斷,提供event接口
……案例
……練習(xí)

6.多函數(shù)的優(yōu)化:提煉函數(shù)
技10--提煉局部變量加工函數(shù)
技11--提煉共用help私有函數(shù)
……案例
……練習(xí)

7.多函數(shù)的優(yōu)化:合并函數(shù)
技12--合并代碼重復(fù)的函數(shù),加參數(shù)
技13--合并骨架雷同的函數(shù),加參數(shù)
技14--合并#ifdef #else定義的多個(gè)函數(shù)
技15--數(shù)據(jù)不同算法相同,統(tǒng)一到宏或模板
技16--數(shù)據(jù)不同算法相同,統(tǒng)一到void*處理函數(shù)
……案例
……練習(xí)

8.多函數(shù)的優(yōu)化:便捷接口函數(shù)
技17-- #define便捷接口函數(shù)
技18--二次封裝便捷接口函數(shù)
……案例
……練習(xí)
模塊重構(gòu):讓模塊維護(hù)不再痛苦24技
9.《人月神話》說:沒有銀彈?
信息隱藏
沒有信息隱藏,模塊化就沒有意義

10.信息隱藏!
技1--常量私有化
技2--變量static化
技3--函數(shù)static化
技4--.c文件的內(nèi)部結(jié)構(gòu)規(guī)范
技5--.c文件的文件命名規(guī)范

11.數(shù)據(jù)結(jié)構(gòu)
技6---引入結(jié)構(gòu)體,集中管理多個(gè)相關(guān)變量
技7---引入配置數(shù)組,集中管理配置型常量
技8---引入下標(biāo)常量,簡(jiǎn)化配置數(shù)組的使用
技9---引入union結(jié)構(gòu),支持多數(shù)據(jù)類型
技10--引入cmdBlock,集中管理多cmd var
技11--引入dataBlock,集中管理多state var
技12--將過大的globalStruct泥球拆分成dataBlock、cmdBlock
技13--優(yōu)化數(shù)據(jù)結(jié)構(gòu)來簡(jiǎn)化操作
……案例
……練習(xí)

12.接口暴露!
技14--接口函數(shù)moduleFunc()式命名
技15--任務(wù)函數(shù)的xxxx_xxxTask()式命名
技16--封裝global count var計(jì)數(shù)和判斷,提供event接口
技17--封裝global flag var的清零和判斷,提供event接口
技18--為event提供receive函數(shù)和peek函數(shù)
技19--#define便捷接口函數(shù)
技20--二次封裝便捷接口函數(shù)
技21--借便捷接口避免暴露bool型參數(shù)
……案例
……練習(xí)

13.性能第一波
技22--去除float運(yùn)算
技23--乘除運(yùn)算變移位運(yùn)算
技24--提供直接操作模塊內(nèi)部數(shù)據(jù)的指針
……案例
……練習(xí)
架構(gòu)重構(gòu):閱讀代碼的大技巧
14.如何閱讀嵌軟代碼,才能快速理解架構(gòu)、畫出架構(gòu)
……練習(xí)
技1:while(1)+ISR結(jié)構(gòu)的快速架構(gòu)理解
……練習(xí)
技2:OS下多任務(wù)結(jié)構(gòu)的快速架構(gòu)理解
……練習(xí)
技3:協(xié)議報(bào)文解析—調(diào)度—處理的快速架構(gòu)理解
架構(gòu)重構(gòu):多任務(wù)及通信優(yōu)化14技
15.嵌軟獨(dú)有的復(fù)雜性
運(yùn)行時(shí)的精細(xì)化控制
裸露的中斷、時(shí)鐘、時(shí)限、任務(wù)小而多
通盤分析多任務(wù)的必要性
建模練習(xí):任務(wù)分布圖、任務(wù)協(xié)作圖

16.任務(wù)模塊化
技1---按采集/分析/執(zhí)行分解任務(wù)
技2---[采集]--dataBlock-->[分析]--cmdBlock-->[執(zhí)行]模式
技3---顯式命名采集/分析/執(zhí)行任務(wù)函數(shù)(collect/analyse/action)
……案例
……練習(xí)

17.中斷處理
ISR與外界通信
技4---ISR拋出信號(hào)量
技5---ISR寫全局變量
時(shí)鐘中斷
技6---ISR負(fù)責(zé)計(jì)數(shù)+生成事件
技7---將處理分離到時(shí)間片任務(wù)
……案例
……練習(xí)

18.通信優(yōu)化
技8---隱藏任務(wù)+隊(duì)列,暴露同步接口函數(shù)
技9---將過大的globalStruct泥球拆分成dataBlock、cmdBlock
技10--顯式命名gxxDataBlock、gxxCmdBlock全局變量
……案例
……練習(xí)

19.性能第二波
硬實(shí)時(shí)
技11--由ISR處理緊急任務(wù)
控制執(zhí)行頻率
技12--變while(1)執(zhí)行為時(shí)間片執(zhí)行
處理OverLoad
技13--控制采樣率
技14--控制取樣率,拋棄部分采樣
……案例
……練習(xí)
架構(gòu)重構(gòu):“底層規(guī)范、中層聰明”12技
20.嵌軟分層規(guī)律
Layer就是一組Code Module
橫向分層
縱深封裝
技1—各層模塊文件名命名規(guī)范
技2—提煉通用Svc模塊
……案例
……練習(xí)

21.Drv等底層模塊
技3—將硬件相關(guān)代碼分離到Drv模塊
……案例
……練習(xí)

22.HAL與Svc層抽象:縱深封裝
技4—Hal模塊封裝Drv模塊
技5—Svc模塊封裝Hal與Drv模塊
技6—借函數(shù)指針結(jié)構(gòu)體支持底層可替換
……案例
……練習(xí)

23.HAL與Svc層抽象:狀態(tài)機(jī)
技7—統(tǒng)一的FSMCore作為高層event生成器
技8—提煉統(tǒng)一狀態(tài)轉(zhuǎn)換函數(shù)
技9—引入狀態(tài)機(jī)配置數(shù)組
……案例
……練習(xí)

24.HAL與Svc層抽象:協(xié)議子系統(tǒng)
技10--將粗糙的uint8_t[]報(bào)文結(jié)構(gòu)升級(jí)成struct
技11--將報(bào)文codec代碼從Drv模塊中分離出來 (協(xié)議模塊硬件無關(guān)/功能無關(guān))
技12--構(gòu)建管道-過濾器架構(gòu)
技13--Packet Adapter作為可插拔過濾器
……案例
……練習(xí)
架構(gòu)重構(gòu):4種需求變更的設(shè)計(jì)應(yīng)對(duì)
需求變更
A類:不同廠商的器件
B類:不同類型的器件
C類:不同網(wǎng)絡(luò)或協(xié)議
D類:不同功能或算法
……案例

A類應(yīng)對(duì)——drv.c 局部改變,接口不變
?實(shí)例分析

B類應(yīng)對(duì)——drv.c 改變,hal 不變
?實(shí)例分析

C類應(yīng)對(duì)——設(shè)計(jì)支持協(xié)議的新增與適配
?實(shí)例分析

D類應(yīng)對(duì)——自底向上,逐級(jí)優(yōu)化設(shè)計(jì)
?實(shí)例分析
成功架構(gòu)重構(gòu)的關(guān)鍵步驟與管理原則
本課程模塊大綱不公開

要不要文檔?
要不要預(yù)先設(shè)計(jì)?
代碼改改改過程中有沒有里程碑供風(fēng)險(xiǎn)評(píng)估?
全面重構(gòu)從哪一層開始?
……

活動(dòng)詳情

提交需求