Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Аппаратные возможности МК серии STC8H1Kxxx » Сколько памяти И типов памяти у STC8H1K08 ? )) RAM, IRAM, XRAM


Сколько памяти И типов памяти у STC8H1K08 ? )) RAM, IRAM, XRAM

Сообщений 1 страница 8 из 8

1

Казалось бы, странный вопрос :)
Но 8051 - вещь в себе

С памятью расширенной - XRAM - всё понятно: 1024 байта.
Dim X(1023) As Xram Byte 
пишу и читаю в цикле x() от 0 до 1023 - всё верно.

С RAM тоже относительно несложно: 128 байт, как у всех 8052 и иже с ними.

Но у STC есть еще 128 байт, которые в одном адресном поле, что и RAM, и находится выше RAM. Но вот доступ к ним через какие-то косвенные обращения, о коих я, не ведающий ASM для 8052, не ведаю.

Сделал опыт: в файле DAT этого МК указываю 256 байт: IRAM = 256

В программе пишу:
Dim Dat_w As Word , I As Word , Temp As Byte
Dim X(199) As Byte
' Итого резервирую 2+1+1+199  = 203 Байта
Если вместо 199 указываю больше - ошибка нехватки памяти! Делаю у переменной i тип Byte вместо Word (вместо 2х переменных резервируется 1) - могу сделать на 1 байт больше: 200

при попытке
For I = 0 To 199
  X(i) = I
Next

For I = 0 To 199
  Temp = X(i)
  Print I ; ":" ; Temp ; " ";
Next

получаю сбой программы и мусор в терминале
И пока вместо 199 не укажу 190 и менее - не работает.

Я так понимаю, даже если RAM=255, то 65 байт заняты чем-то типа стека и прочего?

STC8H-en.pdf
страница 217, Глава 7 Memory,
7.2.1 Internal RAM

Все 256 байт внутренней оперативной памяти можно разделить на две части: нижние 128 байт ОЗУ и верхние 128 байт ОЗУ. Нижние 128 байт памяти данных совместимы с традиционным микроконтроллером 8051, доступ к которому можно получить как с помощью прямой, так и косвенной адресации.
Верхние 128 байт ОЗУ (верхние 128 байт ОЗУ расширены в 8052) и регистры специальных функций, сокращенно SFR, занимают один и тот же блок адресов от 80H до FFH, но они являются физически отдельными объектами и доступны с помощью разные режимы адресации.
Доступ к верхним 128 байтам ОЗУ возможен только посредством косвенной адресации, доступ к области SFR возможен только посредством прямой адресации.

A total of 256 bytes of internal RAM can be divided into two parts: Lower 128 bytes of RAM and Upper 128 bytes of RAM. The Lower 128 bytes of data memory are compatible with the traditional 8051 microcontroller, which can be access by either Direct addressing or Indirect addressing.
The Upper 128 bytes of RAM (upper 128 bytes of RAM is extended in 8052)  and  special  function  registers,  SFRs  in  short,  occupy  the  same  block  of  addresses,  80H  to  FFH,  but  they  are physically  separate  entities  and  are  accessed  using  different  addressing  modes. 
Upper  128  bytes  of  RAM  can  only  be accessed by Indirect addressing, SFRs area can only be accessed by Direct addressing.

0

2

Александр Д. написал(а):

Все 256 байт внутренней оперативной памяти можно разделить на две части: нижние 128 байт ОЗУ и верхние 128 байт ОЗУ.
Нижние 128 байт памяти данных совместимы с традиционным микроконтроллером 8051, доступ к которому можно получить как с помощью прямой, так и косвенной адресации.
Верхние 128 байт ... но они являются физически отдельными объектами и доступны с помощью разные режимы адресации.
Доступ к верхним 128 байтам ОЗУ возможен только посредством косвенной адресации, доступ к области SFR возможен только посредством прямой адресации.

Если я правильно прочитал :blush: , то так и должно получаться...
Компилятор, по всей видимости, формирует код только для прямой адресации, что объясняет невозможность доступа к верхним байтам ОЗУ.
Вот и получается силами Bascom работать только с областью FFh - 30h (207 байт), дальше уже Ассм...

0

3

скорее всего - да
Но ассм очень не хочу. Очень хочется быстро переносить код между AVR и 8051 (пока всё получается)
Думаю, 128+1024 Байт хватит всем )))))

Доступ к XRAM имеет один недостаток: большой расход памяти программ Flash, т.е., много операций для работы с ней.

0

4

А какая необходимость лезть в эти области памяти, если предостаточно ОЗУ, досягаемой обычными средствами ? ;)
Это же не ATTiny13... ;)

0

5

памяти много не бывает
ДА и хочется понимать, что я делаю: применять только первые 128 байт Iram и не лезть выше, или как...

0

6

https://ru.wikibrief.org/wiki/Intel_MCS-51
см. Внутреннее ОЗУ

текст

Внутреннее ОЗУ (IRAM) имеет 8-битное адресное пространство с адресами от 0 до 0xFF. Доступ к IRAM от 0x00 до 0x7F можно получить напрямую, используя 8-битный абсолютный адрес, который является частью инструкции. В качестве альтернативы, доступ к IRAM можно получить косвенно: адрес загружается в R0 или R1, а доступ к памяти осуществляется с использованием синтаксиса @ R0 или @ R1.

Исходный 8051 имеет только 128 байтов IRAM. 8052 добавил IRAM от 0x80 до 0xFF, доступ к которому возможен только косвенно; прямой доступ к этому диапазону адресов идет к регистрам специальных функций. Большинство клонов 8051 также имеют полные 256 байтов IRAM.

32 байта из памяти 0x00–0x1F отображают 8 регистров R0 – R7. Одновременно используются восемь байтов; два бита слова состояния программы позволяют выбрать один из четырех возможных банков.

16 байтов (128 бит) в ячейках IRAM 0x20–0x2F имеют битовую адресацию.
Регистры специальных функций

Регистры специальных функций (SFR) расположены в том же адресном пространстве, что и IRAM, по адресам от 0x80 до 0xFF, и доступ к ним осуществляется напрямую с использованием тех же инструкций, что и для нижней половины IRAM. К ним нельзя получить доступ косвенно через @ R0 или @ R1; косвенный доступ к этим адресам будет иметь доступ ко второй половине IRAM.

Шестнадцать SFR (тех, адреса которых кратны 8) также являются битовыми.
Программная память

Программная память (PMEM, хотя и реже используется, чем IRAM и XRAM) составляет до 64 КБ постоянной памяти, начиная с адреса 0 в отдельном адресном пространстве. Он может быть встроенным или внешним, в зависимости от конкретной модели используемого чипа. Программная память предназначена только для чтения, хотя некоторые варианты 8051 используют встроенную флеш-память и предоставляют метод перепрограммирования памяти в системе или в приложении.

В дополнение к коду можно хранить данные только для чтения, такие как таблицы поиска, в программной памяти, полученные с помощью MOVC A, @ A + DPTRили инструкции MOVC A, @ A + PC. Адрес вычисляется как сумма 8-битного аккумулятора и 16-битного регистра (PC или DPTR).

Специальные инструкции перехода и вызова (AJMPи ACALL) немного уменьшают размер кода, который обращается к локальной (в пределах тех же 2 КБ) программной памяти.
Внешняя память данных

Внешняя память данных (XRAM) - это третье адресное пространство, также начинающееся с адреса 0 и позволяющее использовать 16 бит адресного пространства. Он также может быть встроенным или внешним; что делает его "внешним", так это то, что к нему нужно обращаться с помощью инструкции MOVX(перемещение внешнего). Многие варианты 8051 включают стандартные 256 байтов IRAM плюс несколько килобайт XRAM на чипе.

К первым 256 байтам XRAM можно получить доступ с помощью MOVX A, @ R0, MOVX A, @ R1, MOVX @ R0, Aи MOVX @ R1, Aинструкции. Доступ ко всем 64 КБ можно получить с помощью MOVX A, @ DPTRи MOVX @ DPTR, A.
Регистры

Единственный регистр на 8051, который не отображается в память, - это 16-битный счетчик программ (ПК). Это указывает адрес следующей инструкции для выполнения. Инструкции относительного перехода предоставляют 8-битное смещение со знаком, которое добавляется к ПК.

Доступ к восьми регистрам общего назначения R0 – R7 может осуществляться с помощью инструкций на один байт короче других. Они отображаются в IRAM между 0x00 и 0x1F. В любой момент времени используются только восемь байтов из этого диапазона, что определяется двумя битами выбора банка в PSW.

Ниже приведен частичный список регистров 8051, которые отображены в памяти в пространство регистров специальной функции:

Указатель стека, SP (0x81)
    Это 8- битовый регистр, используемый командами вызова и возврата подпрограммы. Стек растет вверх; SP увеличивается до нажатия и уменьшается после выталкивания значения.
Указатель данных, DP (0x82–83)
    Это 16-битный регистр, который используется для доступа к PMEM и XRAM.
Слово состояния программы, PSW (0xD0)
    Оно содержит важные флаги состояния, по номеру бита:

        Четность, P. Дает четность (XOR из биты) аккумулятора, A.
        Определяется пользователем, UD. Может быть прочитан и записан программным обеспечением; аппаратное обеспечение не влияет иным образом.
        Флаг переполнения, OV. Устанавливается, когда добавление вызывает подписанное переполнение.
        Выбор регистра 0, RS0. Младший бит банка регистров. Устанавливается, когда используются банки 0x08 или 0x18.
        Выбор регистра 1, RS1. Старший бит банка регистров. Устанавливается, когда используются банки 0x10 или 0x18.
        Флаг 0, F0. Может быть прочитан и записан программным обеспечением; аппаратное обеспечение не влияет иным образом.
        Вспомогательный перенос, AC. Устанавливается, когда сложение производит перенос из бита 3 в бит 4.
        Бит переноса, C. Часто используется как общий регистр для битовых вычислений или «логический аккумулятор».

Accumulator, A (0xE0)
    Этот регистр используется большинством инструкций.
Регистр B (0xF0)
    Он используется как расширение аккумулятора для команд умножения и деления.

256 одиночные биты имеют прямую адресацию. Это 16 ячеек IRAM из 0x20–0x2F и 16 регистров специальных функций 0x80, 0x88, 0x90,..., 0xF8. К любому биту этих байтов можно получить прямой доступ с помощью множества логических операций и условных переходов.

Обратите внимание, что PSW не содержит общих отрицательных (N) или нулевых (Z) флагов. Для первого наиболее значимый бит аккумулятора может быть адресован напрямую, поскольку это SFR с побитовой адресацией. Для последнего есть явные инструкции для перехода к тому, равен ли аккумулятор нулю. Также существует операция сравнения двух операндов и перехода.
Набор команд

0

7

в другом описании:
Internal RAM (IRAM) дает возможность Вам просмотреть (и редактировать) содержание любого из 256 байтов Internal RAM, которые являются доступными Вам под 8052 архитектурой. Пожалуйста, имейте в виду, что, если Вы работаете с 8051, доступны только первые 128 байтов Internal RAM

Обратите внимание, что первые 32 байта (первые две строки в IRAM Окне) используются четырьмя банками регистров. В зависимости от набора регистров, который в настоящее время выбран, изменяя эти байты можно также изменять значение ваших регистров "R". Например, если Вы используете заданный по умолчанию набор регистров, байты от 00 - 07 Internal RAM соответствуют R0 - R7, соответственно. Таким образом если Вы изменяете значение байта 00 IRAM в "45" , Вы найдете, что также изменили значение R0 в "45". Это нормально.

Дополнительно помните что пользовательское "битовое поле " 00 - 7F постоянно находится в 20 байтах Internal RAM начиная с 2F (третья строка в IRAM Окне). Изменение значения этих байтов, изменит соответствующие значения разрядных полей.

В заключение, помните, что по умолчанию "стек" 8051 начинается в Internal RAM с адреса 8 и возрастастает вверх. Если Вы изменяете значение байта, который был помещен в стек, Вы можете легко вызвать непредвиденную операцию программы - особенно, если Вы случайно измените адрес возврата, который позже используется "RET" командой.

ВООБЩЕ не понимаю, что я могу применять )))))
придётся полагаться на BASCOM и 128 байт

0

8

короче. Баском-51 делает всё верно.
И проблема понять где заканчивается доступное тебе ОЗУ - такая же, как в Bascom-AVR (и новые команды $hwstack, $swstack, $framesize - как раз для этого!)
В этом МК 256 байт iRam. И Bascom-51 делает всё верно: выделяет под стек, под банк регистров.
ОЧЕНЬ помог понять это встроенный Симулятор: там видно, как вначале и в конце этих 256 байт меняются данные (не мои).

https://forumupload.ru/uploads/0000/25/b8/439/t588671.jpg

0


Вы здесь » Программирование ATMEL в BASCOM. » Аппаратные возможности МК серии STC8H1Kxxx » Сколько памяти И типов памяти у STC8H1K08 ? )) RAM, IRAM, XRAM