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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 124

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ инструмСнт ΠžΠ‘Π Π’ β€” использованиС Ρ‚Π°ΠΊΠΈΡ… абстрактных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ записи, списки с указатСлями ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠžΠ±ΡΡƒΠ΄ΠΈΠΌ ΠΈΡ… Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅. Π­Ρ‚ΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСскоС распрСдСлСниС памяти RAM. Π“Π΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π·ΡΡ‚ΡŒ RAM для этих Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…? Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 512 Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΊ для абстрактных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ для стСка ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с «зависаниСм» структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ стСка ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ катастрофичСскому сбою систСмы. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ это любой Ρ†Π΅Π½ΠΎΠΉ. Π’ ΠΈΠ΄Π΅Π°Π»Π΅, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ RAM Π² ΠΊΠ°Ρ€Ρ‚Π΅ памяти B32. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ физичСски ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ эту ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΡ‚ памяти RAM Π½Π° ΠΏΠ»Π°Ρ‚Π΅ B32. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ Π½Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ пространства RAM для стСка ΠΈ динамичСской памяти. Но это Π½Π΅ всСгда Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Если ΠΆΠ΅ ΠΈ стСк ΠΈ динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ постоянно находятся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ пространствС памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ происходит ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ 68HC12 Π½Π΅ обСспСчиваСт автоматичСского контроля этой ситуации ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΅Π΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ систСмы Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π²Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.7.1 ΠΌΡ‹ ΡƒΠΆΠ΅ обсуТдали систСму памяти, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ Π½Π° ΠΏΠ»Π°Ρ‚Π΅ B32. На рис. 8.2 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ схСмноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ систСмы, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство RAM. ΠΠ°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ознакомится с ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ памяти Ρƒ Pack ΠΈ Barrett [2002, Ch. 8]. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ схСмноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½Π΅ обсуТдая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ памяти, элСктричСской связи с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйса ΠΈ синхронизации. Π₯отя всС ΠΎΠ½ΠΈ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½Ρ‹, Π½ΠΎ ΠΏΡ€ΠΈ обсуТдСнии динамичСского распрСдСлСния памяти, Π±Π΅Π· ΠΈΡ… рассмотрСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ.

Рис. 8.2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ внСшнСй памяти ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ


ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ этого Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ пространства RAM, обСспСчим ΠΈΡ… ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ расчСт. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ 16 Кб для статичСской ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти (SRAM) Π² ΠΊΠ°Ρ€Ρ‚Π΅ памяти B32 EVB. РазмСстим эту ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ячСйках ΠΎΡ‚ $4000 Π΄ΠΎ $7FFF. Если Π±Ρ‹ это ΡƒΠ΄Π°Π»ΠΎΡΡŒ, Ρ‚ΠΎ всС, ΠΊ Ρ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ доступ Π½Π° участкС памяти β€” это 32 ΠšΠ±Γ—8 SRAM. Если ΠΌΡ‹ Π·Π°Π·Π΅ΠΌΠ»ΠΈΠΌ ΡΡ‚Π°Ρ€ΡˆΡƒΡŽ линию адрСса этой памяти A[14], Ρ‚ΠΎ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ 16 Кб Ρ‡ΠΈΠΏΠ° памяти Π±ΡƒΠ΄ΡƒΡ‚ нСдоступны. Как ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 4, PORTA обСспСчиваСт ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ линию Π΄Π°Π½Π½Ρ‹Ρ… D[7:0], ΠΈ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ разряды адрСса A[15:8] Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ МК. PORTB обСспСчиваСт младшиС разряды адрСса A[7:0]. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π΄Ρ€Π΅ΡΠ½ΡƒΡŽ линию A[15:14] со схСмой И-НЕ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π½ΠΈΠ·ΠΊΠΈΠΉ сигнал для SRAM памяти Ρ‡ΠΈΠΏΠ°.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ памяти являСтся использованиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° HCS12 с большСй Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ RAM. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ доступным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ, описанным Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… 1.3, 1.4 ΠΈ 4.8. Π­Ρ‚ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя RAM объСмом ΠΎΡ‚ 4 Π΄ΠΎ 12 Кб.

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ нашСго обсуТдСния, относящСгося ΠΊ динамичСскому Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти, рассмотрим Π΅Ρ‰Π΅ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, воспользовавшись рис. 8.2.

Вопросы для самопровСрки

Вопрос: Какова Ρ†Π΅Π»ΡŒ примСнСния схСмы И-НЕ?

ΠžΡ‚Π²Π΅Ρ‚: Π›ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ элСмСнт И-НЕ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сигнал Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (CE) для SRAM памяти, ΠΊΠΎΠ³Π΄Π° A15 находится Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ , Π° A14 β€” Π½Π° высоком ΡƒΡ€ΠΎΠ²Π½Π΅.

Вопрос: ΠšΠ°ΠΊΠΎΠ²Π° Ρ†Π΅Π»ΡŒ примСнСния микросхСмы 74HC573?

ΠžΡ‚Π²Π΅Ρ‚: Π­Ρ‚Π° микросхСма дСйствуСт ΠΊΠ°ΠΊ Π·Π°Ρ‰Π΅Π»ΠΊΠ° ΠΏΡ€ΠΈ Π΄Π΅ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π»ΠΈΠ½ΠΈΠΉ адрСса/Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚Π° Π A.

Вопрос: Каков ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ адрСсов памяти RAM?

ΠžΡ‚Π²Π΅Ρ‚: ΠžΡ‚ $4000 Π΄ΠΎ $7FFF ΠΈΠ»ΠΈ 16 Кб RAM.

Вопрос: Каков Ρ€Π°Π·ΠΌΠ΅Ρ€ SRAM памяти?

ΠžΡ‚Π²Π΅Ρ‚: Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ составляСт 215 ΠΈΠ»ΠΈ 32К адрСсов с Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ адрСсС. Нам удаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΈΠΆΠ½ΠΈΠ΅ 16 Кб памяти.

Вопрос: ΠšΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Π° памяти послС ввСдСния этих Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² памяти.

ΠžΡ‚Π²Π΅Ρ‚: ΠšΠ°Ρ€Ρ‚Π° памяти ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° рис. 8.3.

$0000 $01FF РСгистры ЦП $0800 $0BFF 1 Кб RAM Β«Π½Π° Ρ‡ΠΈΠΏΠ΅Β»; β€’ Код/Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ($0800-$09FF); β€’ Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π° для D-Bug12 ($0A00-$0BFF)     $0D00 $0FFF 768 Π±Π°ΠΉΡ‚ EEPROM Β«Π½Π° Ρ‡ΠΈΠΏΠ΅Β»; β€’ Код/Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ     $8000 $FFFF FLASH EEPROM 32 Кб Β«Π½Π° Ρ‡ΠΈΠΏΠ΅Β»; β€’ ΠΊΠΎΠ΄ D-Bug12 ($8000–$F67F); β€’ ΠžΠ±Π»Π°ΡΡ‚ΡŒ, доступная ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ($F6C0–$F6FF); β€’ Настройка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ D–Bug12 ($F680-$F6BF); β€’ Код запуска D-Bug12 ($F700–$F77F); β€’ Π’Π°Π±Π»ΠΈΡ†Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° прСрывания ($F780–$F7FF); β€’ Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° ($F800–$FBFF); β€’ EEPROM Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° ($FC00–$FFBF); β€’ Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ сброса ΠΈ прСрывания ($FFC0–$FFFF)

Рис. 8.3. ΠšΠ°Ρ€Ρ‚Π° памяти B32, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ внСшнСй Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ RAM

8.3.2. ДинамичСскоС распрСдСлСниС памяти

Π’ компиляторС Π‘ для эффСктивного управлСния динамичСской ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ большоС число ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Когда ΠΏΠ°ΠΌΡΡ‚ΡŒ динамичСски распрСдСлСна для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² RAM, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти вас ΠΊ рСсурсам памяти для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ДинамичСскоС распрСдСлСниС памяти осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ распрСдСлСния памяти malloc(). Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° содСрТится Π² Ρ„Π°ΠΉΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° stdlib.h, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ любого Π‘ компилятора. Команда malloc() ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sizeof(). Π­Ρ‚Π° комбинация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡ€ΠΈ динамичСском распрСдСлСнии памяти. ΠžΠ±Ρ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° этой ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

Ptr = (variable_type)*malloc(sizeof(variable_type));

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΈ распрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ. Когда пСрСмСнная большС Π½Π΅ Π½ΡƒΠΆΠ½Π°, пространство памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для Π½Π΅Π΅, возвращаСтся систСмС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ free(). Π­Ρ‚ΠΎ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ способ динамичСского распрСдСлСния памяти. ΠœΡ‹ создаСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° Ρ…ΠΎΠ΄Ρƒ (Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ нуТдаСмся Π² Π½ΠΈΡ…, ΠΈ избавляСмся ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ распрСдСлСнии ΠΈ освобоТдСнии памяти, происходящСм Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° эффСктивная систСма управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ β€” это Ρ‡Π°ΡΡ‚ΡŒ памяти RAM, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для динамичСского распрСдСлСния памяти. Как ΠΌΡ‹ упомянули ΠΏΡ€Π΅ΠΆΠ΄Π΅, Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ стСк ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΡ‚Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… пространства RAM Π² нашСй ΠΊΠ°Ρ€Ρ‚Π΅ памяти, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ… для стСка, Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ β€” для динамичСской памяти. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ использованиС мСньшСго пространства для стСка ΠΈ большСго для динамичСской памяти. Π’ Π΄Π°Π½Π½ΠΎΠΌ компиляторС ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ настройки, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ адрСс Π½Π°Ρ‡Π°Π»Π° для стСка ΠΈ области динамичСской памяти.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² способ динамичСского распрСдСлСния памяти, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ структуры Π΄Π°Π½Π½Ρ‹Ρ… для использования Π² Π½Π°ΡˆΠΈΡ… ΠžΠ‘Π Π’. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠžΠ‘Π Π’: структур (ΠΈΠ»ΠΈ записСй), списков с указатСлями, ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ, ΠΈ ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ познакомимся с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· этих основных Ρ‚ΠΈΠΏΠΎΠ², ΠΌΡ‹ смоТСм ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΈΡ… Π² Π±ΠΎΠ»Π΅Π΅ слоТныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠžΠ‘Π Π’.

8.3.3. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠœΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΎΠ±Π·ΠΎΡ€ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π·Π°Ρ‚Π΅ΠΌ объСдиним ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠžΠ‘Π Π’.

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

Рис. 8.4. Π—Π°ΠΏΠΈΡΡŒ для автомобиля. Π—Π°ΠΏΠΈΡΡŒ содСрТит поля Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… описываСт Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ


ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² записи называСтся ΠΏΠΎΠ»Π΅ΠΌ. ΠœΡ‹ объявляСм запись ΠΈΠ»ΠΈ структуру, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

struct car {

 int year; /* Π³ΠΎΠ΄ производства* /

 char make[10]; /*BWM, Hummer, Saturn */

 char model[12]; /*ΠΊΡƒΠΏΠ΅, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹ΠΉ, SUV, ΠΏΠΈΠΊΠ°ΠΏ */

 char VIN[10]; /* комбинация Ρ†ΠΈΡ„Ρ€, Π±ΡƒΠΊΠ² */

 float mileage; /*показания счСтчика: ΠΎΡ‚ 0 Π΄ΠΎ 500,000+ */