Why will it balloon my code?
If it doesn't inline my code then yes, there are 3 extra functions but they are small. They are just a call to another function. Smaller then having the main function three times in a slightly different way.
And if it does inline it all it does is replacing printBinWithLeading(Serial, RegInp) with printBinWithLeading(Serial, RegInp, 16) leaving only a single function to call.
And if I try my function agains a template:
template <typename T> void printBinWithLeading(Print &out, T n){
for(byte i = sizeof(n) * 8 - 1; i--;){
out.print(bitRead(n, i));
if(i == 0){
break;
}
}
}
Then it's 1720bytes for inline and 1792bytes for the template. Which I would expect because if effectively has the same function three times. And if I do call it 20 times on 20 different variables then 2482bytes for the inline and 2602bytes for the template...
So yeah, I want to learn but I can't see how it can balloon my code...
Whole test code:
byte myByte1 = 1;
unsigned int myInt1 = 111;
unsigned long myLong1 = 111111;
byte myByte2 = 2;
unsigned int myInt2 = 222;
unsigned long myLong2 = 222222;
byte myByte3 = 3;
unsigned int myInt3 = 333;
unsigned long myLong3 = 333333;
byte myByte4 = 4;
unsigned int myInt4 = 444;
unsigned long myLong4 = 444444;
byte myByte5 = 5;
unsigned int myInt5 = 555;
unsigned long myLong5 = 555555;
byte myByte6 = 6;
unsigned int myInt6 = 666;
unsigned long myLong6 = 666666;
byte myByte7 = 7;
unsigned int myInt7 = 777;
unsigned long myLong7 = 777777;
byte myByte8 = 8;
unsigned int myInt8 = 888;
unsigned long myLong8 = 888888;
byte myByte9 = 9;
unsigned int myInt9 = 999;
unsigned long myLong9 = 999999;
byte myByte10 = 10;
unsigned int myInt10 = 000;
unsigned long myLong10 = 000000;
byte myByte11 = 11;
unsigned int myInt11 = 111;
unsigned long myLong11 = 111111;
byte myByte12 = 12;
unsigned int myInt12 = 222;
unsigned long myLong12 = 222222;
byte myByte13 = 13;
unsigned int myInt13 = 333;
unsigned long myLong13 = 333333;
byte myByte14 = 14;
unsigned int myInt14 = 444;
unsigned long myLong14 = 444444;
byte myByte15 = 15;
unsigned int myInt15 = 555;
unsigned long myLong15 = 555555;
byte myByte16 = 16;
unsigned int myInt16 = 666;
unsigned long myLong16 = 666666;
byte myByte17 = 17;
unsigned int myInt17 = 777;
unsigned long myLong17 = 777777;
byte myByte18 = 18;
unsigned int myInt18 = 888;
unsigned long myLong18 = 888888;
byte myByte19 = 19;
unsigned int myInt19 = 999;
unsigned long myLong19 = 999999;
byte myByte20 = 20;
unsigned int myInt20 = 000;
unsigned long myLong20 = 000000;
void setup() {
Serial.begin(115200);
printBinWithLeading(Serial, myByte1);
Serial.println();
printBinWithLeading(Serial, myInt1);
Serial.println();
printBinWithLeading(Serial, myLong1);
Serial.println("\n");
printBinWithLeading(Serial, myByte2);
Serial.println();
printBinWithLeading(Serial, myInt2);
Serial.println();
printBinWithLeading(Serial, myLong2);
Serial.println("\n");
printBinWithLeading(Serial, myByte3);
Serial.println();
printBinWithLeading(Serial, myInt3);
Serial.println();
printBinWithLeading(Serial, myLong3);
Serial.println("\n");
printBinWithLeading(Serial, myByte4);
Serial.println();
printBinWithLeading(Serial, myInt4);
Serial.println();
printBinWithLeading(Serial, myLong4);
Serial.println("\n");
printBinWithLeading(Serial, myByte5);
Serial.println();
printBinWithLeading(Serial, myInt5);
Serial.println();
printBinWithLeading(Serial, myLong5);
Serial.println("\n");
printBinWithLeading(Serial, myByte6);
Serial.println();
printBinWithLeading(Serial, myInt6);
Serial.println();
printBinWithLeading(Serial, myLong6);
Serial.println("\n");
printBinWithLeading(Serial, myByte7);
Serial.println();
printBinWithLeading(Serial, myInt7);
Serial.println();
printBinWithLeading(Serial, myLong7);
Serial.println("\n");
printBinWithLeading(Serial, myByte8);
Serial.println();
printBinWithLeading(Serial, myInt8);
Serial.println();
printBinWithLeading(Serial, myLong8);
Serial.println("\n");
printBinWithLeading(Serial, myByte9);
Serial.println();
printBinWithLeading(Serial, myInt9);
Serial.println();
printBinWithLeading(Serial, myLong9);
Serial.println("\n");
printBinWithLeading(Serial, myByte10);
Serial.println();
printBinWithLeading(Serial, myInt10);
Serial.println();
printBinWithLeading(Serial, myLong10);
Serial.println("\n");
printBinWithLeading(Serial, myByte11);
Serial.println();
printBinWithLeading(Serial, myInt11);
Serial.println();
printBinWithLeading(Serial, myLong11);
Serial.println("\n");
printBinWithLeading(Serial, myByte12);
Serial.println();
printBinWithLeading(Serial, myInt12);
Serial.println();
printBinWithLeading(Serial, myLong12);
Serial.println("\n");
printBinWithLeading(Serial, myByte13);
Serial.println();
printBinWithLeading(Serial, myInt13);
Serial.println();
printBinWithLeading(Serial, myLong13);
Serial.println("\n");
printBinWithLeading(Serial, myByte14);
Serial.println();
printBinWithLeading(Serial, myInt14);
Serial.println();
printBinWithLeading(Serial, myLong14);
Serial.println("\n");
printBinWithLeading(Serial, myByte15);
Serial.println();
printBinWithLeading(Serial, myInt15);
Serial.println();
printBinWithLeading(Serial, myLong15);
Serial.println("\n");
printBinWithLeading(Serial, myByte16);
Serial.println();
printBinWithLeading(Serial, myInt16);
Serial.println();
printBinWithLeading(Serial, myLong16);
Serial.println("\n");
printBinWithLeading(Serial, myByte17);
Serial.println();
printBinWithLeading(Serial, myInt17);
Serial.println();
printBinWithLeading(Serial, myLong17);
Serial.println("\n");
printBinWithLeading(Serial, myByte18);
Serial.println();
printBinWithLeading(Serial, myInt18);
Serial.println();
printBinWithLeading(Serial, myLong18);
Serial.println("\n");
printBinWithLeading(Serial, myByte19);
Serial.println();
printBinWithLeading(Serial, myInt19);
Serial.println();
printBinWithLeading(Serial, myLong19);
Serial.println("\n");
printBinWithLeading(Serial, myByte20);
Serial.println();
printBinWithLeading(Serial, myInt20);
Serial.println();
printBinWithLeading(Serial, myLong20);
Serial.println("\n");
}
void loop() {
}
void printBinWithLeading(Print &out, unsigned long n, byte size){
for(byte i = size - 1; i--;){
out.print(bitRead(n, i));
if(i == 0){
break;
}
}
}
inline void printBinWithLeading(Print &out, unsigned long n){
printBinWithLeading(out, n, sizeof(n) * 8);
}
inline void printBinWithLeading(Print &out, unsigned int n){
printBinWithLeading(out, n, sizeof(n) * 8);
}
inline void printBinWithLeading(Print &out, byte n){
printBinWithLeading(out, n, sizeof(n) * 8);
}
/*
template <typename T> void printBinWithLeading(Print &out, T n){
for(byte i = sizeof(n) * 8 - 1; i--;){
out.print(bitRead(n, i));
if(i == 0){
break;
}
}
}*/