Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

Arduino C++ Compilazione

From Aino Wiki

Jump to: navigation, search

Problematiche

Eccessivo uso di RAM

Per una adeguata conoscenza teorica della memoria qui
"Arduino compiling sketch Ram exceed the maximum allowed"

When your Arduino sketch exceeds the maximum allowed RAM (dynamic memory) during compilation, it means the program's variable storage requirements are larger than the physical SRAM on your board. This issue often prevents the program from running correctly or compiling at all.

The most effective solutions involve optimizing your code to reduce memory usage or using an Arduino board with more memory.

Methods to Reduce RAM Usage

  • Use the F() macro for static strings: String literals (text in double quotes, e.g., "Hello") are stored in RAM by default. Wrapping them in F() tells the compiler to store them in Flash program memory instead, saving valuable RAM.
    • Before: Serial.print("Hello Arduino World");
    • After:Serial.print(F("Hello Arduino World"));
  • Store constant data in PROGMEM: For large, constant data such as lookup tables, arrays, or images, use the PROGMEM keyword to store them in Flash memory instead of RAM.
  • Optimize variable usage:
    • Use the smallest data types possible for your variables (e.g., a byte instead of an int if the value is under 255).
Type Range Size
boolean da 0 a 1 1 byte
byte da 0 a 255 1 byte
int da -32,768 a 32,767 2 byte
float da -3.4028235E+38 a -3.4028235E+38 4 byte
    • Declare variables locally within functions whenever possible. This allows the memory to be freed when the function exits.
    • Minimize the use and size of large arrays.
  • Trim down libraries: Many libraries allocate large buffers or include features you might not need.
    • Check if you can use "reduced" versions of libraries, which some developers provide to save memory (e.g., some u-blox GNSS libraries have a reduced program memory option).
    • Consider using alternative, more lightweight libraries if available.
  • Avoid the String class (dynamically allocated strings): The String class can cause memory fragmentation and unpredictable crashes as it dynamically allocates and deallocates memory. Use C-style strings (char arrays) instead for more predictable memory management.

Hardware Solutions

If software optimization is not enough, consider moving to an Arduino board with more RAM and Flash memory:

  • Arduino Mega 2560: Offers significantly more memory than the Uno (8 KB SRAM vs. Uno's 2 KB).
  • ESP32/ESP8266 boards: These boards have much larger memories (e.g., ESP32 typically has 4 MB Flash and 520 KB SRAM).
  • Arduino Due: A more powerful option with 96 KB of SRAM.

By applying these methods, you can successfully manage your Arduino's memory and ensure your sketch compiles and runs without issues. For more detailed tips, the Arduino Help Center provides a comprehensive guide.

Etc

 

(Mappa e Link)


Tematiche avanzate | Arduino indice | Integrazioni tipiche | Arduino Progetti


C++ Info fondamentali | ESP32 indice | ESP8266 | Domotica | Dizionario Elettronica | Elettronica | Elettronica Appunti


Parole chiave:

Author Giuseppe AINO