Ve von Neumann yapısına sahip ARM (veya hatta x86) MCU/CPU, adres alanı birleşik ve süreklidir, kod belleği/RAM/CPU kayıtları ve hatta PC video belleğinin tümü tek tip olarak adreslenir. Sadece' farklı işlevlere sahip bellek farklı adres bloklarını işgal eder ve kendi işlerini yaparlar.
Tamam,'s MCS-51'e geri dönsün.
Program belleği için iki kısım vardır: çip üstü ve çip dışı. Çip üstü program belleği veya çip dışı program belleği ne olursa olsun, adresleri paylaşılır. Çip üzerinde 4k ROM varsa, adres 0x0000-0x0FFF'dir ve 0x1000-0xFFFF, harici ROM'un adres alanıdır. Harici ROM'un 0x0000-0x0FFF kısmının kullanılıp kullanılmadığı, mikrodenetleyicinin EA pininin seviye değerine bağlıdır. EA=1 olduğunda, dahili ROM'un bu kısmı kullanılır ve harici ROM'un bu kısmı boşa harcanır ve kullanılmaz; EA=0 olduğunda, harici ROM'un bu kısmı kullanılır ve dahili ROM boşa harcanır ve kullanılmaz. KOD segmentinden veri okumak için birleştirilmiş MOVC komutunu kullanın. Tek çipli mikro bilgisayar, MOVC talimatına, EA durumuna ve okunacak adres değerine göre hangi bellekten veri alınacağını otomatik olarak belirleyecektir.
Veri belleği için, dahili veri belleği (IDATA/RAM) ve harici veri belleği (XDATA) olmak üzere iki kısma ayrılır, ancak bu iki bellek, kod belleği gibi adres alanını paylaşmaz. Genel 8051 yongası, dahili RAM sadece 128B, 0x00-0x7F'den ve 0x80-0xFF'den SFR alanıdır (CPU çalışma kayıtları ve çeşitli çevresel kayıtlar burada). 8052 için, dahili RAM 256B'ye sahiptir, bu nedenle 0x80-0xFF, kullanılan yüksek 128B RAM'dir. Ama' bu bölüm SFR'ye ayrılmış değil mi?' SFR'ye adanmıştır, ancak SFR erişiminin yalnızca"doğrudan adresleme" (özel montaj talimatları kullanılarak uygulanır), fark buradadır. Yalnızca doğrudan adresleme ile erişilen adres SFR'dir, aksi takdirde normal RAM'dir. Genişletilmiş RAM'e (XDATA) gelince, adres de 0x0000-0xFFFF'dendir ve buradaki 0x0000, dahili RAM'in 0x00'ünden farklıdır ve iki boşluktan tamamen bağımsızdır. Erişim yöntemleri de farklıdır. MCS-51, XDATA alanını okumak ve yazmak için MOVX komutunu kullanır. Ayrıca, XDATA alanına erişim, DPTR kaydının yardımını gerektirir. Çünkü sonraki 16 bitlik XDATA adresini yalnızca DPTR tutabilir.
Böylece MCS-51, IDATA alanının en hızlı okuma ve yazma hızına ve en fazla erişim yöntemine sahiptir. XDATA alanına erişim hızı nispeten yavaştır. MCS-51 yığını önce IDATA alanında geliştirilmelidir ve IDATA alanında açılan yığın, yığın işaretçi kaydı SP tarafından kontrol edilebilir. Yığın gerçekten çok büyükse ve yalnızca XDATA alanında açılabilirse, CPU'nun SP kaydının ödünç alınması zor olacaktır ve yığın yapısını ve yığın işaretçisini yalnızca kendimiz oluşturabiliriz. Harici program alanı ve veri alanının her ikisi de 0-64K (0x0000-0xFFFF) olduğundan, aslında sorunlu/uygun yeniden yazma programları ve diğer nedenleri kaydedebilirim, harici KOD ve VERİ yeniden yazılabilir bir belleği paylaşabilir (çeşitli RAM'ler gibi) silinebilir ve yazılabilir). Örneğin sistemde 64K harici BELLEK vardır. Alt 32K, KOD'u kaydetmek için kullanılır ve mikro denetleyici bu 32K'da programı okuyabilir ve çalıştırabilir ve yüksek 32K, kullanıcı verileri için depolama yeri olarak kullanılır. Ancak şu anda, orijinal olarak tamamen bağımsız olan KOD ve VERİ alanı, donanım yongasında bir BELLEK paylaşıldığından, birbirlerini etkileyebilirler ve program programı kendi başına yeniden yazabilir. Örneğin, 0x0020 bir talimattır ve 0x0020'yi MOVX aracılığıyla yeniden yazarım, ardından 0x0020'yi okumak için MOVC'yi kullanırım ve veriler orijinalinden farklıdır.
Karışıklığın püf noktası, tek çipli mikrobilgisayarın depolama alanının, yapay olarak bölünmüş iki ayrı alandan oluşan mantıksal bir kavram olmasıdır. Donanım devresindeki MEMORY çipi gerçekte bir kavramdır. Tek çipli mikrobilgisayarın depolama alanı sonunda çip üzerinde devre düzeyinde uygulanacaktır, bu nedenle fiziksel devre bağlantısı nedeniyle mantıksal depolama alanı örtüşecektir. Ancak mantıksal düzeyde, bu iki boşluk hala tamamen bağımsızdır.
Ek: Çeşitli depolama alanı adlarının tanımı:
Veri: sabit olarak ön taraftaki 0x00-0x7f'lik 128 RAM'e atıfta bulunur, bunlar bir kayıt tarafından doğrudan okunabilir ve yazılabilir, en hızlı ve en küçük oluşturulan koddur.
Idata: sabit olarak, sadece farklı erişim yöntemleri nedeniyle, ilk 128'i verinin 128'i ile tamamen aynı olan ön taraftaki 0x00-0xff'lik 256 RAM'i ifade eder. idata'ya C'ye benzer bir işaretçi kullanılarak erişilir. Derlemedeki ifade: mov ACC,@Rx. (önemli değil ek: c'deki idata iyi bir işaretçi erişim etkisine sahiptir) xdata: harici genişletilmiş RAM, genellikle DPTR tarafından erişilen harici 0x0000-0xffff alanını ifade eder. pdata: harici genişletilmiş RAM'in alt 256 baytı, adres A0-A7'de göründüğünde okuma ve yazma, okuma ve yazma için movx ACC, @Rx kullanın. Bu oldukça özel ve C51'de bu hata var gibi görünüyor, daha az kullanılması önerilir. Ama onun avantajları da var. Spesifik kullanım bir ara problemdir, nasıl kullanılacağını bilmiyorum, bu yüzden' burada bahsetmedim.








