.Metin
.Text segmenti gerçek kodu içerir ve mikrodenetleyiciler için Flash belleğe programlanır. Birden çok bitişik olmayan Flash bellek bloğu olduğunda birden fazla metin segmenti olabilir; örneğin, hafızanın en üstünde bulunan bir başlangıç vektörü ve kesme vektörleri ve 0'dan başlayan kod; veya bir önyükleme ve ana program için ayrı bölümler.
.bss ve .data
Bir işleve veya prosedüre harici olarak tahsis edilebilecek üç tür veri vardır; birincisi başlatılmamış veridir (başlangıçta 0 başlatılmış veriyi de içeren tarihsel olarak .bss olarak adlandırılır) ve ikincisi başlatılmıştır (bss dışı) veya .data. "Bss" ismi, tarihsel olarak, yaklaşık 60 yıl önce bir montajcıda kullanılan "Symbol tarafından Başlatılan Blok" kelimesinden gelir. Bu alanların her ikisi de RAM'de bulunur.
Bir program derlenirken değişkenler bu iki genel alandan birine tahsis edilecektir. Bağlantı aşamasında, tüm veri maddeleri bir araya toplanacaktır. Başlatılması gereken tüm değişkenler, başlangıç değerlerini tutmak için ayrılan program belleğinin bir bölümünü tutacaktır ve main () çağrılmadan hemen önce, değişkenler tipik olarak crt0 adlı bir modül tarafından başlatılacaktır. Bss bölümü aynı sıfır kodu ile tüm sıfırlara sıfırlanır.
Birkaç mikrodenetleyiciyle, RAM'in ilk sayfasına (ilk 256 konum, bazen sayfa 0 olarak adlandırılır) erişime izin veren daha kısa talimatlar vardır. Bu işlemciler için derleyici near
, oraya yerleştirilecek değişkenleri belirtmek gibi bir anahtar kelime saklayabilir. Benzer şekilde, yalnızca belirli alanlara bir işaretçi yazıcısı aracılığıyla başvurabilen (ek talimatlar gerektiren) mikrodenetleyiciler de vardır ve bu değişkenler belirlenir far
. Son olarak, bazı işlemciler bit bellek belleğinin bir bölümünü ele alabilir ve derleyicinin bunu (anahtar kelime gibi) belirtmek için bir yolu olur bit
.
Dolayısıyla, bu değişkenlerin toplandığı .nearbss ve .neardata vb. Gibi ek parçalar olabilir.
.rodata
Bir işlev veya yordamın dışındaki üçüncü veri türü, salt okunur olması ve program tarafından değiştirilememesi dışında, başlatılan değişkenlere benzer. C dilinde, bu değişkenler const
anahtar kelime kullanılarak belirtilir . Genellikle programın flash belleğinin bir parçası olarak kaydedilirler. Bazen bir .rodata (salt okunur veri) bölümünün bir parçası olarak tanımlanırlar. Harvard mimarisini kullanan mikrodenetleyicilerde , derleyici bu değişkenlere erişmek için özel talimatlar kullanmalıdır.
yığın ve yığın
Yığın ve yığının her ikisi de RAM'e yerleştirilir. İşlemcinin mimarisine bağlı olarak, yığın büyüyebilir veya küçülebilir. Büyürse, RAM'in altına yerleştirilir. Büyürse, RAM'in sonuna yerleştirilir. Öbek, değişkenlere tahsis edilmemiş kalan RAM'i kullanır ve yığının ters yönünü büyütür. Yığın ve yığının maksimum boyutu genellikle bağlayıcı parametreleri olarak belirtilebilir.
Yığına yerleştirilen değişkenler, bir işlev veya yordam içinde anahtar sözcük olmadan tanımlanan değişkenlerdir static
. Bir zamanlar otomatik değişkenler ( auto
anahtar kelime) olarak adlandırılıyorlardı , ancak bu anahtar kelimeye gerek yok. Tarihsel olarak, auto
C'den önce gelen B dilin bir parçası olduğu için var olur ve orada buna ihtiyaç vardı. İşlev parametreleri de yığına yerleştirilir.
RAM için tipik bir sayfa düzeni (özel sayfa 0 bölüm olmadığını varsayarak):
EEPROM, ROM ve NVRAM
Flash bellek gelmeden önce, programı depolamak ve verileri (.text ve .rodata segmentleri) depolamak için EEPROM (elektrikle silinebilir programlanabilir salt okunur bellek) kullanıldı. Şimdi, eğer varsa, sadece küçük bir miktar (örn. 2KB - 8KB bayt) EEPROM mevcuttur ve tipik olarak, çalıştırma sırasında açılmalarında tutulması gereken yapılandırma verilerini veya diğer küçük miktarda verileri depolamak için kullanılır. Çevrim. Bunlar programda değişkenler olarak bildirilmez, bunun yerine mikrodenetleyicide özel kayıtları kullanmak için yazılır. EEPROM ayrıca ayrı bir yongada da uygulanabilir ve bir SPI veya I²C veriyolu üzerinden erişilebilir.
ROM, fabrikada programlanması haricinde, Flash ile aynıdır (kullanıcı tarafından programlanamaz). Sadece çok yüksek hacimli cihazlar için kullanılır.
NVRAM (uçucu olmayan RAM), EEPROM'a bir alternatiftir ve genellikle harici bir IC olarak uygulanır. Batarya destekliyse, düzenli RAM kalıcı değildir; Bu durumda özel erişim yöntemlerine gerek yoktur.
Veriler Flash'a kaydedilebilse de, Flash belleğin sınırlı sayıda silme / program döngüsü vardır (1000 ila 10.000), bu nedenle bunun için tasarlanmamıştır. Aynı zamanda bir kerede silinmesi gereken bellek bloklarını gerektirir, bu yüzden sadece birkaç byte güncellemek sakıncalıdır. Kod ve salt okunur değişkenler için tasarlanmıştır.
EEPROM'un silme / program döngüleri (100.000 - 1.000.000) arasında çok daha yüksek sınırları vardır, bu nedenle bu amaç için çok daha iyidir. Mikrodenetleyicide EEPROM varsa ve yeterince büyükse, kalıcı olmayan verileri kaydetmek istediğiniz yerdir. Ancak, yazmadan önce ilk önce (genellikle 4KB) blokları silmeniz gerekir.
EEPROM yoksa veya çok küçükse, harici bir yonga gerekir. 32KB EEPROM sadece 66 ¢'dır ve 1.000.000 defa silinebilir / yazılabilir. Aynı sayıda silme / program işlemine sahip bir NVRAM çok daha pahalıdır (x10) NVRAM'lar genellikle okuma için EEPROM'lardan daha hızlıdır, ancak yazma için daha yavaştır. Bir seferde bir byte'a veya bloklar halinde yazılabilirler.
Bunların her ikisine de daha iyi bir alternatif, temel olarak sınırsız yazma döngüleri (100 trilyon) olan ve yazma gecikmeleri olmayan FRAM'dir (ferroelektrik RAM). NVRAM ile aynı fiyatta, 32KB için 5 dolar civarında.