Компилятор Arduino показывает различное значение памяти sram

У меня есть этот код, который показывает доступную память sram

    int freeRam() 
{
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

void setup()
{
  Serial.begin(9600);
  Serial.println(freeRam());
}

void loop()
{
}

Компилятор arduino показывает другое значение.

  • компилятор arduino показывает 1856 байт и
  • Последовательный порт показывает 1850 байт

Каково правильное значение?

, 👍1

Обсуждение

вероятно , и то , и другое .., @jsotola

Принимали ли вы во внимание используемое пространство в стеке?, @the busybee


1 ответ


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

3

Оба варианта верны в зависимости от того, какое значение вас интересует. Компилятор сообщает вам размер глобальных переменных. Ваш код сообщает вам, сколько памяти свободно в любой момент времени. Для выполнения кода требуется память (чаще всего стек растет для размещения локальных переменных и "фрейма стека" с копией регистров процессора в нем каждый раз, когда вы вызываете функцию).

Другими словами, компилятор сообщает вам, сколько в вашем стакане, когда бармен протягивает его вам, но ваш код сообщает вам, сколько в нем, как только вы сделаете глоток.

,