Предупреждение о нехватке памяти основано на фиксированном количестве фактического скетча?
На данный момент мой скетч для 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 байтов) и/или вычислить некоторый ожидаемый размер стека (несколько сотен байтов по крайней мере).
Или это просто (очень) безопасное фиксированное или процентное значение?
@Michel Keijzers, 👍-1
Обсуждение1 ответ
Лучший ответ:
Я провел несколько тестов и нашел ответ.
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 % памяти.
- Стандартное отклонение и дисперсия массива чисел
- Как я могу загрузить скетч удаленно из удаленного места на arduino, который питается от батареи
- Каким был бы лучший способ динамического "изменения" экземпляров относительно динамической памяти?
- Портирование «дальнего» доступа к флэш-памяти с Arduino Mega на Due
- Обновите атрибут класса с помощью attachInterrupt
- Проблема с переменной char* malloc/free. Пустое содержимое в переменной получателя после использования free
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
1273 = 8192 - 6919. Никаких догадок со стороны IDE нет., @Edgar Bonet
Я имею в виду, почему он уже выдает предупреждение, когда у меня еще осталось 1273 байта? Это похоже на «очень безопасное» значение., @Michel Keijzers