И ARM (или дори x 86) MCU / CPU със структура на фон Нойман, неговото адресно пространство е унифицирано и непрекъснато, регистрите на кодовата памет / RAM / CPU и дори компютърната видео памет са адресирани еднакво. Това е просто, че паметта с различни функции заема различни адресни блокове и те правят своите неща.
Добре, нека' се върнем към MCS-51.
За програмната памет има две части: on-chip и off-chip. И независимо от програмната памет на чипа или извън чипа, адресите им се споделят. Ако в чипа има 4k ROM, адресът е 0x0000-0x0FFF, а 0x1000-0xFFFF е адресното пространство на външния ROM. Дали се използва 0x0000-0x0FFF частта на външния ROM, това зависи от стойността на нивото на EA щифта на микроконтролера. Когато EA=1, тази част от вътрешния ROM се използва и тази част от външния ROM се губи и не се използва; когато EA=0, тази част от външния ROM се използва, а вътрешният ROM се губи и не се използва. За да прочетете данни от сегмента CODE, използвайте сглобената инструкция MOVC. Микрокомпютърът с един чип автоматично ще определи от коя памет да се извличат данни в съответствие с инструкцията на MOVC, състоянието на EA и стойността на адреса за четене
За паметта на данните тя е разделена на две части: вътрешна памет за данни (IDATA / RAM) и външна памет за данни (XDATA), но тези две памет не споделят адресното пространство като кодова памет. Общият чип 8051, вътрешната RAM е само 128B, от 0x00-0x7F, а от 0x80-0xFF е областта на SFR (тук са работните регистри на CPU и различни периферни регистри). За 8052, вътрешната RAM има 256B, така че 0x80-0xFF е използваните 128B RAM. Но не е ли' тази част посветена на SFR? Той е' посветен на SFR, но имайте предвид, че SFR достъпът може да използва само" директно адресиране" (изпълнено с помощта на специфични инструкции за сглобяване), разликата е тук. Само адресът, до който има достъп чрез директно адресиране, е SFR, в противен случай това е обикновена RAM. Що се отнася до разширената RAM (XDATA), адресът също е от 0x0000-0xFFFF, а 0x0000 тук е различен от 0x00 на вътрешната RAM и те са напълно независими от две интервали. Методите им за достъп също са различни. MCS-51 използва инструкция MOVX за четене и запис на XDATA област. Освен това достъпът до зоната XDATA изисква съдействието на регистъра DPTR. Тъй като само DPTR може да побере следващия 16-битов XDATA адрес.
Така че, MCS-51 има най-бързата скорост на четене и запис на IDATA областта и най-много методи за достъп. Скоростта на достъп до зоната XDATA е относително ниска. Първо стекът на MCS-51 трябва да бъде разработен в областта IDATA и стекът, отворен в областта IDATA, може да се контролира от регистъра на указателя на стека SP. Ако стекът е наистина твърде голям и може да бъде отворен само в областта XDATA, тогава SP регистърът на процесора ще бъде труден за заемане и можем само да изградим структурата на стека и указателя на стека. Тъй като външното програмно пространство и пространството за данни са едновременно 0-64K (0x0000-0xFFFF), тогава всъщност мога да спестя проблеми / удобни програми за пренаписване и други причини, външният CODE и DATA могат да споделят презаписваема памет (като различни What RAM can да бъдат изтрити и записваеми). Например системата има 64K външна ПАМЕТ. Долният 32K се използва за запазване на КОДА, а микроконтролерът може да чете и стартира програмата в този 32K, а по-високият 32K се използва като място за съхранение на потребителски данни. Но по това време първоначално напълно независимото пространство КОДИ И ДАННИ, тъй като на хардуерния чип се споделя МЕМОРИЯ, те могат да си влияят взаимно и програмата може да пренапише програмата сама. Например 0x0020 е инструкция и аз преписвам 0x0020 през MOVX, след което използвам MOVC, за да прочета 0x0020 и данните са различни от оригинала.
Същността на объркването е, че пространството за съхранение на едночиповия микрокомпютър е логична концепция, която представлява две отделни пространства, които са изкуствено разделени. Чипът MEMORY на хардуерната схема е концепция в действителност. Пространството за съхранение на едночиповия микрокомпютър в крайна сметка ще бъде внедрено в чипа на ниво верига, така че логическото пространство за съхранение ще се припокрива поради връзката на физическата верига. Но на логическо ниво тези две пространства все още са напълно независими.
Приложение: Определение на различни имена на място за съхранение:
Данни: фиксирано се отнасят до 128 RAM от 0x00-0x7f отпред, които могат да се четат и записват директно от регистър, най-бързият и най-малкият генериран код.
Idata: фиксирано се отнася до 256 RAM от 0x00-0xff отпред, от които първите 128 са абсолютно същите като 128 от данните, само поради различните методи за достъп. idata е достъпен с помощта на указател, подобен на C. Изявлението в сборката е: mov ACC, @ Rx. (не е важно допълнение: idata в c има добър ефект на достъп до показалеца) xdata: външна разширена RAM, обикновено се отнася до външното пространство 0x0000-0xffff, до което има достъп чрез DPTR. pdata: долните 256 байта на външната разширена RAM, четете и записвайте, когато адресът се появи на A0-A7, използвайте movx ACC, @Rx за четене и запис. Това е доста специално и изглежда C51 има тази грешка, препоръчително е да се използва по-малко. Но има и неговите предимства. Конкретното използване е междинен проблем, не знам' не знам как да го използвам, затова спечелих' не го споменавам тук.








