Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Микроконтроллёры AVR на Гарвардской архитектуре


ilgizmulukov

Рекомендуемые сообщения

Микроконтроллёры AVR построенны по Гарвардской архитектуре,т.е. у них есть две памяти:данных и команд.Я понимаю назначение памяти команд,но вот как-то не совсем назначение памяти данных.Объясните пожалуйста или может подскажите где почитать?

Ссылка на комментарий
Поделиться на другие сайты

ilgizmulukov:

Устройство микроконтроллеров AVR

Объяснять особенно нечего. В памяти данных - данные, в памяти команд - команды. Данные делятся на два сорта - часто меняющиеся (входные, промежуточные, выходные) и постоянные (всякие коэффициенты и константы, используемые в ходе вычислений). Поэтому память данных делят на оперативную и энергонезависимую, в последней хранятся коэффициенты и другие постоянные, они не стираются при выключении контроллера, но эта память имеет ограниченное количество циклов перезаписи.

Ссылка на комментарий
Поделиться на другие сайты

Т.е. к примеру команда

MOV R7,#0

в данном случае 0 будет храниться в памяти данных и всё остальное в таком роде тоже?

Ссылка на комментарий
Поделиться на другие сайты

Команда - нет. Команда хранится в памяти команд. Константы внутри команды считаются не отдельными данными, а частью команды.

Ссылка на комментарий
Поделиться на другие сайты

Можно и в этом случае записать константу в память данных, но потом ее надо будет оттуда сложно выковыривать.

Наиболее наглядный, IMHO, такой пример - контроллер занимается подсчетом событий (все равно каких) в течении длительного времени. Проработав рабочий день, его отключают из сети, а накопленные данные записывают в энергонезависимое ОЗУ, на следующий день счет продолжается. Если подсчитываются разные события, то константа может служить маской, по которой события сортируются

Ссылка на комментарий
Поделиться на другие сайты

Ну как я тогда это всё понял все объявленные переменные будут храниться в памяти данных,а константы могут быть и там и там?

Ссылка на комментарий
Поделиться на другие сайты

В общем-то да, но в команде намного удобнее задавать константу в теле команды, чем переписывать ее из ячейки в регистр, а потом совершать действие.

Я (может быть это и не оптимально :g: ) записываю константы в памяти команд только в подпрограммах, чтобы обращение к подпрограмме уже вводило в основную программу нужные значения или коэффициенты для расчетов.

Чтобы яснее, скажем перевод из двоичного представления числа в двоично-десятичное. Обращаясь к подпрограмме перевода я знаю, что у меня там есть проверка на переполнение, выполненная в виде добавления 6 к значению регистра и проверке флага переноса. То есть 6 записано в команде и может считаться константой, но это не та константа, которую я вызываю по метке, а именно константа в теле команды.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...