Перейти к содержанию

Вопросы от начинающих по МК


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

6 минут назад, _abk_ сказал:

Тогда непонятно, в чем вопрос.

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

11 минут назад, _abk_ сказал:

Почитатайте книгу А.В. Евстифеева

Скачал давненько его книгу по семейству мега - надо будет почитать.

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

8 minutes ago, Гость_Григорий_Т. said:

команды перехода изменяют его

Не может быть!:lol2:

Открою вам страшную правду: любая команда приводит к изменению счетчика команд.

 

2 minutes ago, Огонёк said:

Скачал давненько его книгу по семейству мега

Есть книга и по Tiny.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Из программы невозможно произвести запись в регистр счетчика команд. Посему и не имеет смысла "вручную" вычислять адреса перехода, о чем задумался почему-то @Огонёк

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

1 минуту назад, _abk_ сказал:

о чем задумался почему-то @Огонёк

Я же показывал причину - описание команды в даташите:

188537841_.png.050d3c11d35062bd680a5d38abbadba1.png

Первый столбец - Mnemonics, далее в столбцах Operands, Description, Operation. Логически из этой информации какой вывод следует?

Если бы я составлял описание этой команды, я бы написал как есть: BRCC, pointer, если (С=0) то РС=pointer. И было бы понятно: ставь операндом команды метку, на неё и перейдёт выполнение программы. А вот эти вот РС=РС+к+1 только путают.

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

Точнее "к", в данном случае, величина смещения, рассчитываемая компилятором по Вашей метке и подставляемая в машинный код, состоящий из инструкции и величины смещения, в одном слове. Например, Ваша BRCC выглядит в машинном коде так, где 1111 01kk kkkk k000 (1111 01 - инструкция, а kk kkkk k - величина смещения до Вашей метки). Т.к. величина смещения может быть разной (зависит от Вашего алгоритма), то и выглядеть одна и та же команда (но с разным смещением) будет по разному. Немного запутанно конечно, но не парьте себе голову и пользуйтесь метками. А компилятор сам вычислит значение Вашей "к".

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

47 минут назад, Огонёк сказал:

А вот эти вот РС=РС+к+1 только путают.

Здесь просто показано, как относительная ссылка становится абсолютной.

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

Понятно. С условными переходами в программе я разобрался, спасибо всем за содержательную беседу. В работе с портом ввода-вывода вопросов не возникло - по крайней мере в симуляторе всё устанавливается и считывается как надо. Дальше надо будет реализовать задержки по таймеру, и моя первая программа на ассемблере будет готова.

Увлекательное занятие, мне бы раньше в эту тему погрузиться, лет так десять-двадцать назад...

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

1 час назад, Огонёк сказал:

Если бы я составлял описание этой команды, я бы написал как есть: BRCC, pointer

операнд этих команд - это не указатель (не конкретный адрес), а величина смещения относительно адреса текущей выполняемой команды.

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

а конкретный адрес перехода получается суммированием текущего адреса и указанного смещения.

ну, еще прибавляется 1, так как после выполнения команды адрес должен стать РС + 1, а с учетом смещения адрес становится РС + 1 + k.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

26 минут назад, Starichok сказал:

операнд этих команд - это не указатель (не конкретный адрес), а величина смещения относительно адреса текущей выполняемой команды.

Интересно - чисто теоретически - как компилятор обработал некорректную конструкцию BRCC 1. Ведь ни у компилятора, ни у симулятора возражений не возникло. После этой команды управление переходило к строке с адресом 1. В ней, кстати, значится RJMP 0, операндом которой, согласно даташиту,  должна быть та же к, которая смещение. Но после этой команды программа переходила к строке с абсолютным адресом 0. Получается, эти команды и абсолютные адреса принимают? Или это компилятор за меня додумывает. Ну так я ведь не один такой:

https://cxem.net/mc/book23.php

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

16 часов назад, Огонёк сказал:

Интересно - чисто теоретически - как компилятор обработал некорректную конструкцию BRCC 1. Ведь ни у компилятора, ни у симулятора возражений не возникло.

Не знаю, какой у Вас компилятор. Мой сразу ругнулся "Relative branch out of reach". Если в Вашем коде встречаются метки типа 1, 2, 3..., то неудивительно.

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

7 минут назад, Геннадий сказал:

какой у Вас компилятор

Четвёртая АВР студио, названия самого компилятора сходу не нашёл.

7 минут назад, Геннадий сказал:

метки типа 1, 2, 3

Отсутствуют.

3 минуты назад, Гость_Григорий_Т. сказал:

адрес 1 был слишком далеко?

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

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

21 час назад, Огонёк сказал:

Вся программа чуть больше полусотни строк

Так ведь и длина прыжка всего -64 ... +63

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Мои переходы в этот диапазон с запасом укладываются.

Программа готова, теперь у меня новое развлечение: пробую прошить тиньку на 128 кГц. Оказывается, далеко не каждый программатор на это способен. В сети вроде бы нашёл решение, буду пробовать.

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

Даташиты рекомендуют располагать начало стека в конце памяти - и это логично. Но раз есть возможность указать начало стека в том или ином месте, значит, она для чего-то нужна. Для каких практических задач может понадобиться отодвинуть стек ближе к началу адресного пространства?

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

18 минут назад, Огонёк сказал:

Для каких практических задач может понадобиться отодвинуть стек ближе к началу адресного пространства?

Если некоторые процедуры и функции (в том числе обработчики прерывания) используют стек.

Например, у вас адское количество локальных переменных в теле функции. Или буфер локальный. Если стек маленький, то места не хватит

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

Так чем дальше стек от начала адресного пространства, тем больше в него можно поместить. Максимальный объём у стека тогда, когда он начинается с самого верхнего адреса памяти - как и делается в большинстве случаев. Вопрос же именно про какие-то нестандартные случаи. Ведь если сделали возможность сдвигать основание стека, значит это зачем-то понадобилось?

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

Многозадачность, точно! Нашёл пример на хабре:

Цитата

Для стека выделим одну общую область оперативной памяти, которая будет заполняться вниз, то есть, в сторону уменьшения адресов памяти. Почему? Просто потому, что оно по-другому не работает. Эту важную область поделим мысленно на равные участки по числу заявленного максимального количества наших задач. На рисунке 5 это показано для четырех задач.

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

 

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

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

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

×
×
  • Создать...