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

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

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

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


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


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

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

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, т.е., много операций для работы с ней.

+1

4

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

0

5

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

+1

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

9

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

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

По факту перешибается скоростью выполнения. На 35 МГц вообще можно разницы между IRAM и XRAM не заметить. Часто используемые переменные можно и строго в IRAM располагать. А если автор германской хреновины голландского изготовления сделает возможным прямое использование регистров (как в AVR) как переменных, то это будет песня.

0

10

А зачем весь этот изват с адресацией? Почему разработчики не могли сделать по нормальному - все в едином адресном пространстве? :)
Такое впечатление что делали садисты для мазохистов! :dontknow:

-1

11

год создания ядра - 1979
Видимо идеология общего поля памяти было сложно реализуемо в железе

0

12

Значит пора переходить на что-то более современное. Помню в PIC было переключение банков памяти. И зачем если в каждом по несколько десятков байт!

Отредактировано Пётр (2025-01-28 15:58:00)

0

13

Пётр, Вам ли не знать!
1. Каждая команда - это компоненты. Чем их больше, тем сложнее проектировать кристалл, тем выше риск брака, размеры. И в итоге Цена!
2. У PIC было 32-36 команд. А до этого были процессоры 12-15 командами...
3. Особенности архитектуры не позволяли первым процессорам адресовать дальше 2048, память делили на банки. Тогда это было нормально.
4. Высоковоуровневые программисты, да, могут недоумевать. А я начинал с PIC году в 1999м, писал на ассемблере. И банки памяти в той архитектуре ALU очень и очень удобная вещь! Если сильно упрощать, то это 4 независимых стека. Некоторые многозадачные вещи я делал не парясь именно благодаря банкам памяти. Чтобы потом повторить это на АВР мне пришлось знатно потрудиться :)

0

14

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

Чем их больше, тем сложнее проектировать кристалл, тем выше риск брака, размеры. И в итоге Цена!

МК не настолько сложны чтобы об этом думать. Сейчас проектируют кристаллы с десятками миллиардов транзисторов и это не сильно дорого и процент брака небольшой.
У МК маловероятно что больше 10 миллионов.

0

15

Верно. Сейчас :)
Напомню год создания С51 и PIC ;)

0

16

Пётр написал(а):

. Сейчас проектируют кристаллы с десятками миллиардов транзисторов и это не сильно дорого и процент брака небольшой.
У МК маловероятно что больше 10 миллионов.

В начале декабря 2024 года стало известно, что при производстве процессоров по новой технологии Intel 18A пригодная к использованию продукция
составляет всего 10% от общего выхода, что делает массовое производство, которое планировалось запустить в 2025 году, невозможным. Очередная проблема вполне может стать
критической для подразделения Intel Foundry.   :flag:

И в тоже время:
"Компания PowerGPU, специализирующаяся на сборке и продаже готовых ПК, в своем твиттере сообщила, что процент брака у новых процессоров Ryzen 5000-ой серии от AMD крайне высок — составляет от 2,5% до 16%. 
Самый плохой показатель у топового AMD Ryzen 5950X. Антирейтинг такой:
AMD Ryzen 9 5950X — 8 нерабочих чипов на 50 единиц (16%);
AMD Ryzen 9 5900X — 4 нерабочих чипа на 50 единиц (8%);
AMD Ryzen 7 5800X — 4 нерабочих чипа на 100 единиц (4%);
AMD Ryzen 5 5600X — 3 нерабочих чипа на 120 единиц (2,5%)."
Что не может не радовать. :D

Отредактировано sva-don (2025-01-28 21:25:24)

0

17

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

Верно. Сейчас Напомню год создания С51 и PIC

А что мешает сейчас сделать нормальное ядро совместимое с 51?
В те времена компы были калькуляторами по современным меркам и не сильно помогали в разработке цифровой логики и МК. Сейчас учитывая быстродействие и объемы ОЗУ / дисков, ничего не мешает спроектировать нормальное ядро, но нет, не делают.

Так что вы как хотите, а я в этом садо-мазо участвовать не очень хочу. Все эти ограничения затрудняют разработку и ограничивают возможности.

sva-don написал(а):

В начале декабря 2024 года стало известно, что при производстве процессоров по новой технологии Intel 18A пригодная к использованию продукция
составляет всего 10%

Ничего что Intel 18A это 1.8 нм? :O
Слишком тонкий техпроцесс. :no: Нужно время чтобы отладить производство.
У МК на порядки толще и проблем не должно быть. https://forum.easyelectronics.ru/viewto … mp;t=46776

0

18

Пётр написал(а):

А что мешает сейчас сделать нормальное ядро совместимое с 51?

Совместимость мешает, Пётр. Она самая ;)

Пётр написал(а):

У МК на порядки толще и проблем не должно быть

а они, поверьте, есть. Я работал на заводе по производству м-м. Давно, но идея процесса осталась прежней.

... покусано цензурой ...

Норд,  снимите с меня "модератора" - раскланиваюсь. Был лучшего мнения о многих все эти годы.
Разочарован.

0

19

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

Совместимость мешает, Пётр. Она самая

Но ведь она же и тормозит и ограничивает возможности.

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

Давайте называть всё своими именами!
Накину фанатам идей:
****

Извините, но вы написали бред.

Я вот просто не понимаю. Ладно если нужно поддерживать существующий проект, модернизация которого по той или иной причине нецелесообразна, но начинать новый на устаревшем ядре которое сильно ограничено, зачем? В чем смысл?
128 байт ОЗУ это вообще ни о чем! Пару лет назад, разрабатывал проект и мне было мало 20 КБ оперативки, т. к. требовалось обрабатывать и переодевать дальше больше сотни КБ данных с секунду.
Вам пригодилось работать с MicroSD картой? Думаете 128 байт хватит с учетом того что размер сектора 512 байт? И таких примеров можно привести очень много. Ладно если бы не было МК с большими объемами памяти и возможностями, но они есть. И не понятно зачем создавать себе сложности при разработке устройства?

0

20

ZigBee CC2530 вполне себе содержит ядро 8051.  :crazyfun:

0

21

"Ребята, давайте жить дружно" (с) не мое ;)

Для личных выплесков есть личка.

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

Норд,  снимите с меня "модератора"

Нет, не сниму. Прошу принять это.
Этот Раздел создан под Ваши наработки и поэтому было назначение.

+1

22

Вот вернётся директор, всё ему расскажу!

http://forumupload.ru/uploads/0000/25/b8/1743/t233719.gif

0


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