Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 21

Автор Монк Π‘Π°ΠΉΠΌΠΎΠ½

Когда происходит Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² области памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ стСком, выдСляСтся Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΡƒΠΆΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΎΠ·Π°Ρ‚ΠΎΡ€ для Π»Π΅Π΄Π΅Π½Ρ†ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Pezβ„’, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒ Π»Π΅Π΄Π΅Π½Ρ†Ρ‹ ΠΈ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… свСрху (рис. 6.3). Под Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ Β«Π²Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΒ» понимаСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π° стСк, Π° ΠΏΠΎΠ΄ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ Β«Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΒ» β€” ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ со стСка.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вызываСтся функция, создаСтся ΠΊΠ°Π΄Ρ€ стСка. ΠšΠ°Π΄Ρ€ стСка β€” это нСбольшой объСм памяти, Π³Π΄Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ стСк пуст, Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° скСтч Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (ΠΏΡƒΡΡ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ функция А), Π½Π° стСкС выдСляСтся пространство ΠΏΠΎΠ΄ ΠΊΠ°Π΄Ρ€. Если функция А Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘), Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Π΄Ρ€ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² стСкС Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π΄Π²Π΅ записи. Когда функция Π‘ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Π΅Π΅ ΠΊΠ°Π΄Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ со стСка. Π—Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ функция А, Π΅Π΅ ΠΊΠ°Π΄Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ со стСка. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ находятся Π² ΠΊΠ°Π΄Ρ€Π΅ стСка, ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами - _46.jpg

Рис. 6.3. Π‘Ρ‚Π΅ΠΊ

Под стСк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ объСм Ρ†Π΅Π½Π½ΠΎΠΉ памяти, ΠΈ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° стСкС находятся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Ρ…-Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ². Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ сами сСбя ΠΈΠ»ΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° исчСрпаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ для стСка.

НапримСр, матСматичСская функция вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ всСх Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ числу, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π³ΠΎ. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа 6 Ρ€Π°Π²Π΅Π½ 6 Ρ… 5 Ρ… 4 Ρ… 3 Ρ… 2 Ρ… 1 = 720.

РСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° опрСдСляСтся Ρ‚Π°ΠΊ.

β€’ Если n = 0, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа n Ρ€Π°Π²Π΅Π½ 1.

β€’ Π˜Π½Π°Ρ‡Π΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа n Ρ€Π°Π²Π΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ n Π½Π° Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» (n – 1).

Π”Π°Π»Π΅Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° рСализация этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° языкС Arduino C:

long factorial(long n)

{

Β Β if (n == 0)

Β Β {

Β Β Β Β return 1;

Β Β }

Β Β else

Β Β {

Β Β Β Β return n* factorial(n β€” 1);

Β Β }

}

ΠŸΠΎΠ»Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Ρ‹ чисСл ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² скСтчС sketch_06_02_factorial. Π›ΡŽΠ΄ΠΈ с матСматичСским складом ΡƒΠΌΠ° находят Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ вСсьма искусной. Но ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π° стСка Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π²Π½Π° числу, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся Π½Π°ΠΉΡ‚ΠΈ. БовсСм Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ factorial:

long factorial(long n)

{

Β Β long result = 1;

Β Β while (n > 0)

Β Β {

Β Β Β Β result = result * n;

Β Β Β Β n--;

Β Β }

Β Β return result;

}

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния удобочитаСмости этот ΠΊΠΎΠ΄, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, выглядит понятнСС, Π° ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ расходуСт мСньшС памяти ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС. Π’ΠΎΠΎΠ±Ρ‰Π΅ ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ рСкурсии ΠΈΠ»ΠΈ хотя Π±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ высокоэффСктивными рСкурсивными Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Quicksort (http://ru.wikipedia.org/wiki/Быстрая_сортировка), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ эффСктивно упорядочиваСт массив чисСл.

БохраняйтС строковыС константы Π²ΠΎ Ρ„Π»Π΅Ρˆ-памяти

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ строковыС константы, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠžΠ—Π£ ΠΈ Π²ΠΎ Ρ„Π»Π΅Ρˆ-памяти β€” ΠΎΠ΄ΠΈΠ½ экзСмпляр хранится Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ экзСмпляр создаСтся Π² ΠžΠ—Π£ Π²ΠΎ врСмя выполнСния скСтча:

Serial.println("Program Started");

Но Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅, строковая константа Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ Ρ„Π»Π΅Ρˆ-памяти:

Serial.println(F("Program Started"));

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ «ИспользованиС Ρ„Π»Π΅Ρˆ-памяти» Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ способами использования Ρ„Π»Π΅Ρˆ-памяти.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ заблуТдСния

МногиС Π·Π°Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ, полагая, Ρ‡Ρ‚ΠΎ использованиС Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… позволяСт ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ это Π½Π΅ Ρ‚Π°ΠΊ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сам заботится ΠΎΠ± этом ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² скомпилированный скСтч. Π”Ρ€ΡƒΠ³ΠΎΠ΅ распространСнноС Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ объСм потрСбляСмой Сю ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ.

НСкоторыС Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ организация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ мноТСства ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ скомпилированного ΠΊΠΎΠ΄Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ этого Π½Π΅ происходит, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ компилятор достаточно сообразитСлСн для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Ρ…ΠΎΠ΄Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡ… фактичСскими рСализациями. Π­Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄.

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ объСма свободной памяти

Π£Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ объСм ΠžΠ—Π£ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ скСтч Π²ΠΎ врСмя выполнСния, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MemoryFree, доступной ΠΏΠΎ адрСсу http://playground.arduino.cc/Code/AvailableMemory.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ совсСм Π½Π΅ слоТно: Π² Π½Π΅ΠΉ имССтся функция freeΒ­MeΒ­mory, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ число доступных Π±Π°ΠΉΡ‚ΠΎΠ². Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ скСтч ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΅ использованиС:

#include <MemoryFree.h>

void setup()

{

Β Β Serial.begin(115200);

}

void loop()

{

Β Β Serial.print("freeMemory()=");

Β Β Serial.println(freeMemory());

Β Β delay(1000);

}

Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ диагностикС Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ мнСнию, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΎΠΉ памяти. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ потрСблСния памяти.

УмСньшСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ объСма Ρ„Π»Π΅Ρˆ-памяти

По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ компиляции скСтча Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΎΠΊΠ½Π° Arduino IDE появится ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сообщСниС:

Π‘ΠΊΠ΅Ρ‚Ρ‡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 1344 Π±Π°ΠΉΡ‚ (4%) памяти устройства. ВсСго доступно 32 256 Π±Π°ΠΉΡ‚.

Π­Ρ‚Π° строка сообщаСт Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ объСм Ρ„Π»Π΅Ρˆ-памяти Π² Arduino, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ занят скСтчСм, благодаря Ρ‡Π΅ΠΌΡƒ Π²Ρ‹ всСгда Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, насколько Π±Π»ΠΈΠ·ΠΊΠΎ подошли ΠΊ ΠΏΡ€Π΅Π΄Π΅Π»Ρƒ Π² 32 ΠšΠ±Π°ΠΉΡ‚. Оказавшись Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ использования Ρ„Π»Π΅Ρˆ-памяти. Π’ этом Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ рассматриваСмыС Π΄Π°Π»Π΅Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ константы

МногиС, ΡΡ‚Π°Ρ€Π°ΡΡΡŒ Π΄Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ для этого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

int ledPin = 13;

Если Π²Ρ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ ledPin Π² процСссС выполнСния скСтча, Ρ‚ΠΎ вмСсто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ константу. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ слово const Π² Π½Π°Ρ‡Π°Π»ΠΎ объявлСния:

const int ledPin = 13;

Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ 2 Π±Π°ΠΉΡ‚Π° ΠžΠ—Π£ плюс 2 Π±Π°ΠΉΡ‚Π° Ρ„Π»Π΅Ρˆ-памяти ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ использовании константы. Для часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экономия ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… дСсятков Π±Π°ΠΉΡ‚ΠΎΠ².

Π£Π΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ трассировочныС Π²Ρ‹Π·ΠΎΠ²Ρ‹

Π’ процСссС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ скСтчСй для Arduino принято Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Serial.println, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ источники ошибок. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±Β­Π»ΡΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм Ρ„Π»Π΅Ρˆ-памяти. Π›ΡŽΠ±ΠΎΠ΅ использованиС Serial.println Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² скСтч ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 500 Π±Π°ΠΉΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΡƒΠ±Π΅Π΄ΠΈΠ²ΡˆΠΈΡΡŒ Π² Π±Π΅Π·ΡƒΠΏΡ€Π΅Ρ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ скСтча, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ всС Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠžΡ‚ΠΊΠ°ΠΆΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚ использования Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°

Π’ Π³Π»Π°Π²Π΅ 2 Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ нСпосрСдствСнно Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ ICSP Π½Π° ΠΏΠ»Π°Ρ‚Π΅ Arduino с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°.

БтатичСскоС ΠΈ динамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² памяти

Если Π²Ρ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΊΠ½ΠΈΠ³ΠΈ, ΠΈΠΌΠ΅Π΅Ρ‚Π΅ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… систСм Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Java ΠΈΠ»ΠΈ C#, Π²Π°ΠΌ навСрняка ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΠΎ врСмя выполнСния ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ сборщику мусора ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΈΠΌΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±Π΅Π· вашСго участия. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° микропроцСссорах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ всСго 2 ΠšΠ±Π°ΠΉΡ‚ памяти. Π’Π΅Π΄ΡŒ Π² Arduino просто Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ сборщика мусора, ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ΡΡ для Arduino, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ освобоТдСниС памяти Π²ΠΎ врСмя выполнСния Ρ€Π΅Π΄ΠΊΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹.