What is dynamic memory?
Global variables use 1952 bytes (95%) of dynamic memory, leaving 96 bytes for local variables. Maximum is 2048 bytes. Low memory available, stability problems may occur.


You have assigned 1952 bytes of RAM to global variables. Those are declared outside of function scopes, or inside function scopes with the static keyword.  

The remaining 96 bytes is all you have for heap and stack (dynamic memory). Which is not much.   

Heap is generally not used in embedded systems due to the lack of memory management to prevent memory fragmentation.  

Stack however is always used.
When you call a function, the return address is put on stack, the arguments are put on stack, and all local variables of that function are put on the stack. Then you call the next function. And the next.
And an interrupt can be called anytime as well. Causing all processor (R0,R1..) registers to be put on stack to save the current state and prepare for execution of the interrupt service routine.

Stack is important. 96 bytes is not much. See if you can get more, or be really aware with what you are doing.

When you run out of stack, you have a big problem.