aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoren M. Lang <lorenl@north-winds.org>2013-04-22 17:48:22 -0700
committerLoren M. Lang <lorenl@north-winds.org>2013-04-22 17:48:22 -0700
commite1da15aeb5e4a68d6468a2fe7153ed73bd3b8521 (patch)
treefbb780de759f605e8d296f54c279a64fba2ef9b9
parent890a3311ed1fee5344190a575bcd4ca213baff79 (diff)
Detect RAM usage and stop if full
This resolves issue #1356 and add the ability for the Arduino IDE to detect the amount of RAM allocated to a sketch and compare that to the available RAM on each board. If RAM is more than 90% full, it will fail on building since there is not enough free RAM for the heap and stack to use.
-rw-r--r--boards.txt22
-rw-r--r--platform.txt6
2 files changed, 26 insertions, 2 deletions
diff --git a/boards.txt b/boards.txt
index 6627cfa..7d740bd 100644
--- a/boards.txt
+++ b/boards.txt
@@ -8,6 +8,7 @@ uno.name=Arduino Uno
uno.upload.tool=avrdude
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
+uno.upload.maximum_data_size=2048
uno.upload.speed=115200
uno.bootloader.tool=avrdude
@@ -46,6 +47,7 @@ atmega328diecimila.build.variant=standard
atmega328diecimila.menu.cpu.atmega328=ATmega328
atmega328diecimila.menu.cpu.atmega328.upload.maximum_size=30720
+atmega328diecimila.menu.cpu.atmega328.upload.maximum_data_size=2048
atmega328diecimila.menu.cpu.atmega328.upload.speed=57600
atmega328diecimila.menu.cpu.atmega328.bootloader.high_fuses=0xDA
@@ -59,6 +61,7 @@ atmega328diecimila.menu.cpu.atmega328.build.mcu=atmega328p
atmega328diecimila.menu.cpu.atmega168=ATmega168
atmega328diecimila.menu.cpu.atmega168.upload.maximum_size=14336
+atmega328diecimila.menu.cpu.atmega168.upload.maximum_data_size=1024
atmega328diecimila.menu.cpu.atmega168.upload.speed=19200
atmega328diecimila.menu.cpu.atmega168.bootloader.high_fuses=0xdd
@@ -88,6 +91,7 @@ nano.build.variant=eightanaloginputs
nano.menu.cpu.atmega328=ATmega328
nano.menu.cpu.atmega328.upload.maximum_size=30720
+nano.menu.cpu.atmega328.upload.maximum_data_size=2048
nano.menu.cpu.atmega328.upload.speed=57600
nano.menu.cpu.atmega328.bootloader.low_fuses=0xFF
@@ -102,6 +106,7 @@ menu.cpu.nano.atmega328.build.mcu=atmega328p
nano.menu.cpu.atmega168=ATmega168
nano.menu.cpu.atmega168.upload.maximum_size=14336
+nano.menu.cpu.atmega168.upload.maximum_data_size=1024
nano.menu.cpu.atmega168.upload.speed=19200
nano.menu.cpu.atmega168.bootloader.low_fuses=0xff
@@ -165,6 +170,7 @@ leonardo.name=Arduino Leonardo
leonardo.upload.tool=avrdude
leonardo.upload.protocol=avr109
leonardo.upload.maximum_size=28672
+leonardo.upload.maximum_data_size=2560
leonardo.upload.speed=57600
leonardo.upload.disable_flushing=true
leonardo.upload.use_1200bps_touch=true
@@ -193,6 +199,7 @@ micro.name=Arduino Micro
micro.upload.tool=avrdude
micro.upload.protocol=avr109
micro.upload.maximum_size=28672
+micro.upload.maximum_data_size=2560
micro.upload.speed=57600
micro.upload.disable_flushing=true
micro.upload.use_1200bps_touch=true
@@ -221,6 +228,7 @@ esplora.name=Arduino Esplora
esplora.upload.tool=avrdude
esplora.upload.protocol=avr109
esplora.upload.maximum_size=28672
+esplora.upload.maximum_data_size=2560
esplora.upload.speed=57600
esplora.upload.disable_flushing=true
esplora.upload.use_1200bps_touch=true
@@ -265,6 +273,7 @@ mini.build.variant=eightanaloginputs
mini.menu.cpu.atmega328=ATmega328
mini.menu.cpu.atmega328.upload.maximum_size=28672
+mini.menu.cpu.atmega328.upload.maximum_data_size=2048
mini.menu.cpu.atmega328.upload.speed=115200
mini.menu.cpu.atmega328.bootloader.high_fuses=0xd8
@@ -278,6 +287,7 @@ mini.menu.cpu.atmega328.build.mcu=atmega328p
mini.menu.cpu.atmega168=ATmega168
mini.menu.cpu.atmega168.upload.maximum_size=14336
+mini.menu.cpu.atmega168.upload.maximum_data_size=1024
mini.menu.cpu.atmega168.upload.speed=19200
mini.menu.cpu.atmega168.bootloader.high_fuses=0xdd
@@ -293,6 +303,7 @@ ethernet.name=Arduino Ethernet
ethernet.upload.tool=avrdude
ethernet.upload.protocol=arduino
ethernet.upload.maximum_size=32256
+ethernet.upload.maximum_data_size=2048
ethernet.upload.speed=115200
ethernet.bootloader.tool=avrdude
@@ -316,6 +327,7 @@ fio.name=Arduino Fio
fio.upload.tool=avrdude
fio.upload.protocol=arduino
fio.upload.maximum_size=30720
+fio.upload.maximum_data_size=2048
fio.upload.speed=57600
fio.bootloader.tool=avrdude
@@ -355,6 +367,7 @@ bt.build.variant=eightanaloginputs
## -----------------------
bt.menu.cpu.atmega328=ATmega328
bt.menu.cpu.atmega328.upload.maximum_size=28672
+bt.menu.cpu.atmega328.upload.maximum_data_size=2048
bt.menu.cpu.atmega328.bootloader.high_fuses=0xd8
bt.menu.cpu.atmega328.bootloader.extended_fuses=0x05
@@ -366,6 +379,7 @@ bt.menu.cpu.atmega328.build.mcu=atmega328p
## -----------------------
bt.menu.cpu.atmega168=ATmega168
bt.menu.cpu.atmega168.upload.maximum_size=14336
+bt.menu.cpu.atmega168.upload.maximum_data_size=1024
bt.menu.cpu.atmega168.bootloader.high_fuses=0xdd
bt.menu.cpu.atmega168.bootloader.extended_fuses=0x00
@@ -380,6 +394,7 @@ LilyPadUSB.name=LilyPad Arduino USB
LilyPadUSB.upload.tool=avrdude
LilyPadUSB.upload.protocol=avr109
LilyPadUSB.upload.maximum_size=28672
+LilyPadUSB.upload.maximum_data_size=2560
LilyPadUSB.upload.speed=57600
LilyPadUSB.upload.disable_flushing=true
LilyPadUSB.upload.use_1200bps_touch=true
@@ -423,6 +438,7 @@ lilypad.build.variant=standard
lilypad.menu.cpu.atmega328=ATmega328
lilypad.menu.cpu.atmega328.upload.maximum_size=30720
+lilypad.menu.cpu.atmega328.upload.maximum_data_size=2048
lilypad.menu.cpu.atmega328.upload.speed=57600
lilypad.menu.cpu.atmega328.bootloader.low_fuses=0xFF
@@ -437,6 +453,7 @@ lilypad.menu.cpu.atmega328.build.mcu=atmega328p
lilypad.menu.cpu.atmega168=ATmega168
lilypad.menu.cpu.atmega168.upload.maximum_size=14336
+lilypad.menu.cpu.atmega168.upload.maximum_data_size=1024
lilypad.menu.cpu.atmega168.upload.speed=19200
lilypad.menu.cpu.atmega168.bootloader.low_fuses=0xe2
@@ -466,6 +483,7 @@ pro.build.variant=standard
pro.menu.cpu.16MHzatmega328=ATmega328 (5V, 16 MHz)
pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720
+pro.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.16MHzatmega328.upload.speed=57600
pro.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF
@@ -481,6 +499,7 @@ pro.menu.cpu.16MHzatmega328.build.f_cpu=16000000L
pro.menu.cpu.8MHzatmega328=ATmega328 (3.3V, 8 MHz)
pro.menu.cpu.8MHzatmega328.upload.maximum_size=30720
+pro.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.8MHzatmega328.upload.speed=57600
pro.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xFF
@@ -496,6 +515,7 @@ pro.menu.cpu.8MHzatmega328.build.f_cpu=8000000L
pro.menu.cpu.16MHzatmega168=ATmega168 (5V, 16 MHz)
pro.menu.cpu.16MHzatmega168.upload.maximum_size=14336
+pro.menu.cpu.16MHzatmega168.upload.maximum_data_size=1024
pro.menu.cpu.16MHzatmega168.upload.speed=19200
pro.menu.cpu.16MHzatmega168.bootloader.low_fuses=0xff
@@ -511,6 +531,7 @@ pro.menu.cpu.16MHzatmega168.build.f_cpu=16000000L
pro.menu.cpu.8MHzatmega168=ATmega168 (3.3V, 8 MHz)
pro.menu.cpu.8MHzatmega168.upload.maximum_size=14336
+pro.menu.cpu.8MHzatmega168.upload.maximum_data_size=1024
pro.menu.cpu.8MHzatmega168.upload.speed=19200
pro.menu.cpu.8MHzatmega168.bootloader.low_fuses=0xc6
@@ -544,6 +565,7 @@ atmegang.build.variant=standard
atmegang.menu.cpu.atmega168=ATmega168
atmegang.menu.cpu.atmega168.upload.maximum_size=14336
+atmegang.menu.cpu.atmega168.upload.maximum_data_size=1024
atmegang.menu.cpu.atmega168.bootloader.low_fuses=0xff
atmegang.menu.cpu.atmega168.bootloader.high_fuses=0xdd
diff --git a/platform.txt b/platform.txt
index 5fc2682..6bbe078 100644
--- a/platform.txt
+++ b/platform.txt
@@ -53,8 +53,10 @@ recipe.objcopy.eep.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.obj
recipe.objcopy.hex.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex"
## Compute size
-recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.hex"
-recipe.size.regex=Total\s+([0-9]+).*
+recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf"
+recipe.size.regex=^(?:\.text|\.data|\.bootloader)\s+([0-9]+).*
+recipe.size.regex.data=^(?:\.data|\.bss|\.noinit)\s+([0-9]+).*
+recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).*
# AVR Uploader/Programmers tools