How to tell which kind of memory I'm running out of on an Arduino Uno?

Hello, I am working on a project involving an Arduino Uno, a GPS logging shield, and an LCD screen. I think I am encountering memory issues, because each part of my program works individually, but when I try to run it all at once, the logging part breaks (specifically, when I include the library's for the LCD screen the logging stops working). I'm pretty sure that I'm running out of memory due to the large number of libraries I'm using, but before I explore solutions to this problem, I'm trying to figure out exactly what kind of memory I'm running out of.

I know that the Arduino Uno has 32 kB of flash memory, and 2 kB of SRAM. Is there any way to tell which of these (or both ) I am running low on? When I compile the program, it tells me that I'm using 83% of program storage space, and 91% of dynamic memory.

Thanks

What do you think this means?

When I compile the program, it tells me that I'm using 83% of program storage space, and 91% of dynamic memory.

Mark

program storage space = flash memory

dynamic memory = SRAM

You can not have an accurate estimate of dynamic memory because the real requirement it will change depending on what level of functions you are calling. That is a function that calls a function that calls a function and so on.

Ahh, I didn't realize that dynamic memory was the same as SRAM. that's probably the problem then.

Thanks!

It's rather confusing (to me) to see SRAM referred to as "dynamic memory". To me "dynamic RAM" is RAM that needs refreshing.

Yes well compiler output messages tend to be written by software people, and that is a hardware distinction.

Grumpy_Mike: Yes well compiler output messages tend to be written by software people, and that is a hardware distinction.

It's not even a compiler output message. It's an Arduino message. The Arduino developers don't seem particularly concerned about using the correct terminology.

It's not even a compiler output message. It's an Arduino message.

Same thing, it is written by a software person not a hardware one. Most of the Arduino is software don't expect them to be experts or even competent in hardware, the shift out tutorial shows you that, we have been trying to get that changed for about eight years now. https://www.arduino.cc/en/Tutorial/ShiftOut I did submit a whole lot of new diagrams and some edited words a few months back, but it is still as stupid as ever.

Grumpy_Mike: Same thing, it is written by a software person not a hardware one. Most of the Arduino is software don't expect them to be experts or even competent in hardware, the shift out tutorial shows you that, we have been trying to get that changed for about eight years now. https://www.arduino.cc/en/Tutorial/ShiftOut I did submit a whole lot of new diagrams and some edited words a few months back, but it is still as stupid as ever.

It's really not the same thing. Arduino is not a compiler. avr-g++ is the compiler. Granted, Arduino is written by non-hardware people who are not particularly competent.

Besides, it's even the wrong terminology from a software standpoint. "Dynamic memory" is generally used to mean memory that is dynamically allocated, and yet the free memory figure shown by Arduino can be used by either the stack (automatic variables, return addresses, etc) or the heap (dynamically-allocated memory).

christop: It's really not the same thing. Arduino is not a compiler. avr-g++ is the compiler. Granted, Arduino is written by non-hardware people who are not particularly competent.

Besides, it's even the wrong terminology from a software standpoint. "Dynamic memory" is generally used to mean memory that is dynamically allocated, and yet the free memory figure shown by Arduino can be used by either the stack (automatic variables, return addresses, etc) or the heap (dynamically-allocated memory).

or if you want an additional definition, dynamic ram memory, identifies memory chips that must be continually 'refreshed'. The memory array is configured in an X by Y matrix, and hundreds of times a second each of the X (rows) must be access to energize the memory cells, if this continuous cycling of the memory, all the information is lost. That is in contrast to Static Ram, memory that just needs to be powered up to retain it's content.

Chuck.

chucktodd: or if you want an additional definition, dynamic ram memory, identifies memory chips that must be continually 'refreshed'. The memory array is configured in an X by Y matrix, and hundreds of times a second each of the X (rows) must be access to energize the memory cells, if this continuous cycling of the memory, all the information is lost. That is in contrast to Static Ram, memory that just needs to be powered up to retain it's content.

Chuck.

Right, AWOL mentioned that definition already.