Предупреждение о нехватке памяти основано на фиксированном количестве фактического скетча?

На данный момент мой скетч для Arduino Mega выглядит следующим образом:

Sketch uses 25020 bytes (9%) of program storage space. Maximum is 253952 bytes.
Global variables use 6919 bytes (84%) of dynamic memory, leaving 1273 bytes for
local variables. Maximum is 8192 bytes.

Low memory available, stability problems may occur.

Думаю, 1273 байта не так уж и мало для большинства скетчей, хотя мой довольно большой (несколько тысяч строк, а я примерно половину).

Мне было интересно, настолько ли умна IDE, чтобы статически анализировать мой код, чтобы увидеть, каково мое динамическое хранилище (около 600 байтов) и/или вычислить некоторый ожидаемый размер стека (несколько сотен байтов по крайней мере).

Или это просто (очень) безопасное фиксированное или процентное значение?

, 👍-1

Обсуждение

1273 = 8192 - 6919. Никаких догадок со стороны IDE нет., @Edgar Bonet

Я имею в виду, почему он уже выдает предупреждение, когда у меня еще осталось 1273 байта? Это похоже на «очень безопасное» значение., @Michel Keijzers


1 ответ


Лучший ответ:

2

Я провел несколько тестов и нашел ответ.

char a[6135];

void setup() 
{
  a[0] = 0;
}

void loop() 
{
}

Этот скетч не выдает предупреждение:

Sketch uses 660 bytes (0%) of program storage space. Maximum is 253952 bytes.
Global variables use 6144 bytes (75%) of dynamic memory, leaving 2048 bytes for local variables. Maximum is 8192 bytes.

Если я увеличу массив на 1, я получу ошибку:

Sketch uses 660 bytes (0%) of program storage space. Maximum is 253952 bytes.
Global variables use 6145 bytes (75%) of dynamic memory, leaving 2047 bytes for local variables. Maximum is 8192 bytes.
Low memory available, stability problems may occur.

Вывод: ниже 2 КБ (2048 байт) свободного места отображается предупреждение.

Я провел такой же тест для Uno, и там отображается предупреждение, когда свободно менее 1536 байт.

Оба процента составляют 75 %, поэтому конечный вывод состоит в том, что значение основано на 75 % памяти.

,