從本週起,有空將陸陸續續發表一些程式壓縮技巧,通常 PC 上執行的程式比較沒有大小限制的問題,不過這對單晶片程式設計很重要,尤其是低價或是簡易功能的商品,多是選用小型 MCU,ROM size <= 64 kB,以前曾設計過 4 kB 微波爐控制器還含有食譜的火力表,因此寸土寸金的程式空間要擠下那麼多功能,再再考驗程式設計師的智慧與功力。
言歸正傳,程式壓縮技巧百百種,只要掌握基本原則,編譯後程式碼自然縮減許多,本文先點出一個簡單但很容易忽略的方法,那就是把常數、變數位址重新整理調整。
Arduino 例子如下:
修改前,程式使用 3378 bytes
=============================================言歸正傳,程式壓縮技巧百百種,只要掌握基本原則,編譯後程式碼自然縮減許多,本文先點出一個簡單但很容易忽略的方法,那就是把常數、變數位址重新整理調整。
Arduino 例子如下:
修改前,程式使用 3378 bytes
enum { ONE = 1, TWO, THREE }; char num; String ID; void setup() { Serial.begin(9600); num = ONE; ID = "A0"; ID[1] = '0' + num; Serial.println(ID); // print A1} void loop() { }
修改後,程式使用 3376 bytes
enum { ONE, // = 0 TWO, THREE }; char num; String ID; void setup() { Serial.begin(9600); num = ONE; ID = "A0"; ID[1] = '1' + num; Serial.println(ID); // print A1}void loop() { }
這個例子讓讀者了解,電腦系統計數是以零為起始,配合習慣程式碼比較小,這雖然只壓出一點點空間,不過在危急時聚沙成塔,能救命的手段都是有用的。
沒有留言:
張貼留言