Skip to content

Instantly share code, notes, and snippets.

@blalor
Created February 9, 2011 19:51
Show Gist options
  • Select an option

  • Save blalor/819142 to your computer and use it in GitHub Desktop.

Select an option

Save blalor/819142 to your computer and use it in GitHub Desktop.
attempts to determine the total amount of flash in a given device
#!/bin/bash
set -e
MCU="$1"
cat <<-'EOF' > foo.c
#include <avr/pgmspace.h>
unsigned char mydata[64][16] PROGMEM =
{
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x11,0x12,0x13,0x14,0x15,0x16},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x11,0x12,0x13,0x14,0x15,0x16},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x11,0x12,0x13,0x14,0x15,0x16},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x11,0x12,0x13,0x14,0x15,0x16},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x11,0x12,0x13,0x14,0x15,0x16},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x11,0x12,0x13,0x14,0x15,0x16},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x11,0x12,0x13,0x14,0x15,0x16},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x11,0x12,0x13,0x14,0x15,0x16},
};
int main(int argc, char** argv) {
int i;
char x;
// totally invalid code; need to keep the compiler from optimizing away the data!
for (i = 0; i < 64; i++) {
x = mydata[i];
}
return 0;
}
EOF
avr-gcc -c -g -w -ffunction-sections -fdata-sections -mmcu=${MCU} foo.c -ofoo.o
avr-gcc -Wl,--gc-sections -mmcu=${MCU} -ofoo.elf foo.o
avr-size --mcu=${MCU} --format=avr foo.elf | sed -e 's#[()%]##g' | awk '/^Program:/ {print (($2*100) / $4)/1024}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment