我工作的一些Arduino的代碼,並有下面的代碼:這些方法爲什麼使我的程序變得更大?
uint8_t world[24][2][3];
bool getDispPixel(uint8_t x, uint8_t y, uint8_t num)
{
static uint8_t rowByte = 0; // 0 means top 8, 1 means bottom 8
static uint8_t rowBit = 0;
if(y > 7)
{
rowByte = 1;
rowBit = x - 8;
}
else
{
rowByte = 0;
rowBit = x;
}
return (world[x][rowByte][num] & (1 << rowBit)) > 0;
}
void setDispPixel(uint8_t x, uint8_t y, uint8_t num, bool state)
{
static uint8_t rowByte = 0; // 0 means top 8, 1 means bottom 8
static uint8_t rowBit = 0;
if(y > 7)
{
rowByte = 1;
rowBit = x - 8;
}
else
{
rowByte = 0;
rowBit = x;
}
if(state)
world[x][rowByte][num] |= (1 << rowBit);
else
world[x][rowByte][num] &= ~(1 << rowBit);
}
什麼奇怪的是這些方法增加尺寸的一噸的計劃。即使只是其中的一部分。如果我僅從其中一種方法註釋掉以下部分,它會從程序大小中刪除2536個字節!
if(y > 7)
{
rowByte = 1;
rowBit = x - 8;
}
else
{
rowByte = 0;
rowBit = x;
}
這兩種方法都經常被調用,超過200次的組合。如果他們被標記爲內聯,我會相信它,但他們不是。任何想法可能會導致這一點?
更新:如果我完全註釋掉這些方法的內容,它會減小20k的大小!看起來每次調用該函數都會消耗94個字節。不知道爲什麼......
你在用什麼IDE?你能生成一個混合的彙編/源代碼清單嗎? – Greycon
普通Arduino IDE。不知道該怎麼做 –
你正在使用哪種操作系統? (對於可用的工具) –