從本週起,有空將陸陸續續發表一些程式壓縮技巧,通常 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()
{
}
這個例子讓讀者了解,電腦系統計數是以零為起始,配合習慣程式碼比較小,這雖然只壓出一點點空間,不過在危急時聚沙成塔,能救命的手段都是有用的。

沒有留言:
張貼留言