背景
MRP 文件為匯編後的二進制壓縮包,直接載入內存運行。受限於早期嵌入式設備不足 480KB 的內存空間,必須極致壓縮代碼與數據體積。本文總結 14 條經驗法則,幫助開發者在編碼階段主動控制體積。
優化技巧清單
- 減少跨文件變量:外部變量會增加符號表與重定位信息,導致 MRP 膨脹。
- 避免大型/高頻宏函數:宏展開會產生重複機器碼,改為內聯函數或普通函數。
- 常量宏直接展開:如
COLOR2PIXEL565(0x00FFFFFF) 直接寫成 0xFFFF,消除運行時計算與符號開銷。
- 精減局部變量:將
mr_screenRectSt rect; mr_colourSt color; 等結構體變量封裝進繪圖函數內部,減少棧幀大小。
- 減少函數參數:同宏優化,參數傳遞會產生額外指令。
- 枚舉替代 #define 常量:
enum 不佔用數據段,調試時可見性更好。
- 顏色值用 UINT32 存儲:通過位操作提取 RGB,避免結構體對齊浪費。
- 宏函數保持極簡:僅用於極短邏輯,複雜邏輯改用函數。
- 布爾判斷用 == TRUE:某些編碼器對非零值優化不佳,顯式比較可生成更緊湊指令。
- 全局變量定義在代碼最少的文件:減少跨模塊引用開銷。
- 關聯 switch-case 改用 for/if:跳轉表可能大於條件分支代碼。
- 局部變量前置聲明:便於編譯器統一分配棧空間,避免多次調整 SP。
- 局部數組改 static:移至數據段,不佔用棧空間,且僅初始化一次。
- 單一職責函數:避免過多分支導致代碼膨脹,利於編譯器優化。
實踐建議
上述技巧需在實際項目中反覆體會,配合鏈接器 Map 文件分析各模塊體積佔比,針對性優化。切記:可讀性與可維護性同樣重要,不可為了極致體積犧牲架構清晰度。