Вопросы начинающих PIC ASM

Поклонники продукции Microchip Technology Inc тусуются тут.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Martian »

yor писал(а):Это пример идеальной программы?
Для большинства случаев - да. Это ещё и удобно, минимизирует ошибки, реализует модульность, тестирование, упрощает переносимость и т.д. и т.п.

Добавлено after 2 minutes 49 seconds:
[uquote="yor",url="/forum/viewtopic.php?p=4595833#p4595833"]после проверки btfss пройти на два последовательных вызова ПП? После первой не надо вызывать вторую.[/uquote] разве не просто два call подряд? если 0, вызовутся оба, если 1 - nop и второй call
Реклама
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Оба подряд никак нельзя. От условия btfss<->Dlvl,D1 зависит, какую вызывать. Или первую, или вторую. Возможно в первой перед return прибавить единицу к РС, чтобы возврат произошёл за вторым вызовом? Пока ничего другого не придумал.
Реклама
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Martian »

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

Код: Выделить всё

btfss Dlvl,D1
call FwdFront
btfsс Dlvl,D1
call RearFront
лишь бы никто не успел изменить Dlvl,D1
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Ах ты ж, хлопаю себя по лбу, сто раз так делал)) А всё-таки разобраться для порядку, возможно ли в первой call перед return прибавить единицу к РС (косвенно), чтобы возврат произошёл за вторым вызовом? Выигрыша тут никакого, что там лишняя команда (а может и не одна), что тут, но всё-таки?

Добавлено after 1 hour 7 minutes 48 seconds:
А по размышлению, лучше сделать вызовы обеих процедур не по call, а по goto. Вызываются они всегда из одного этого места, уходят тоже всегда только в одно другое. Так смысл CALL? Правильно?
Это всё вы меня тут сбили с панатлыку))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

Не мешает посмотреть поведение PCLATH<4:3>...
:roll:
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

[uquote="yor",url="/forum/viewtopic.php?p=4595879#p4595879"]лучше сделать вызовы обеих процедур не по call, а по goto. Вызываются они всегда из одного этого места, уходят тоже всегда только в одно другое. Так смысл CALL? Правильно?[/uquote]
Нет, не правильно.
Алгоритм должен быть написан так, чтобы функция была максимально изолирована.
Это принцип языков высокого уровня и его так же надо реализовывать в АСМе.
Включите моск и думайте. Подсказывать не буду.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

Прямой доступ к счетчику команд у ПИКовых очень мощная штука.
:hunger:
Только вот работа с PCL требует тщательного анализа и планирования размещения подпрограмм, учитывающего работу связки PCLATH и PCH
:tea:
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4595965#p4595965"]Алгоритм должен быть написан так, чтобы функция была максимально изолирована.[/uquote]Можно объяснить принцип изоляции? Изоляции от чего? Что так, что так они в одной и той же памяти.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Изоляция от остального кода.
Код в классической реализации с суперлупом-main-ом должен содержать только вызываемые функции и функции обработчиков прерываний. Никаких спагетти из перекрестных переходов быть не должно.
Все. Точка.
В версии с RTOS все тоже самое, но все функции (задачи) вызываются шедулером, который решает кого и когда вызывать. Он же останавливает работу функций (задач), вызывая очередные.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

Группируется код в одном месте (в пределах одной страницы ПЗУ), выделяется отдельная группа РОН.
Выделяются регистры для взаимообмена данными с другими программами проекта.
Все дополнительные подпрограммы также размещаем внутри пространства памяти основной программы.
Для ассемблера с небольшими проектами не столь существенно заметно. Разве что в "многофункциональных" самоделках...
К примеру отдельно выполняемая регенерация динамической индикации дисплея по прерываниям от системного таймера в рамках какого - либо устройства.
:roll:
Когда и этого становится маловато переходим уже к ЯВУ (в моем случае к Си/С++ под ардуиноIDE легче получилось)
:tea:
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

[uquote="BOB51",url="/forum/viewtopic.php?p=4596022#p4596022"]Для ассемблера с небольшими проектами не столь существенно заметно.[/uquote]
Именно для ассемблера это более всего заметно. На Си все эти попытки пресечены инструментами и всеобщим презрением к использующим goto.
Именно в ассемблере код становится спагетти-кодом очень быстро. Патамушта новичок ленится включить моск и создать легко администрируемый код, заменяя его на свои мечущиеся "мысли".
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

Вот тут и не согласен.
Ассемблер требует таки весьма большого внимания (и подсказок от компилятора/ среды разработки заметно меньше).
Плюс "свобода творчества" для ЯВУ недоступная.
8)
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="BOB51",url="/forum/viewtopic.php?p=4596022#p4596022"]ардуиноIDE[/uquote]Если не путаю, мне встречались сведения, что оно и PIC поддерживает, или путаю-таки? Ассемблер PIC?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

[uquote="BOB51",url="/forum/viewtopic.php?p=4596035#p4596035"]Плюс "свобода творчества" для ЯВУ недоступная.[/uquote]
Свобода творчества в АСМе должна быть намертво локализована в коде самого нижнего уровня.
Код верхнего уровня должен быть написан по правилам общим для любого языка программирования, потому что в нем должен быть описан общий алгоритм, а не клубок потока сознания.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Martian »

Это должно быть написано во всех книжках "Как выучить ... за 21 день".
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4596018#p4596018"]Изоляция от остального кода.
Код в классической реализации с суперлупом-main-ом должен содержать только вызываемые функции и функции обработчиков прерываний. Никаких спагетти из перекрестных переходов быть не должно.[/uquote]А пример нарушения изоляции в асме среднемладших PIC можно?

[uquote="КРАМ",url="/forum/viewtopic.php?p=4596052#p4596052"]в коде самого нижнего уровня.
Код верхнего уровня должен быть написан[/uquote]В асме среднемладших PIC что за код нижнего и верхнего уровней?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

[uquote="yor",url="/forum/viewtopic.php?p=4596079#p4596079"]пример нарушения изоляции в асме[/uquote] Выход из функции по goto. Это харам. goto как инструкция применяется лишь в локальных ветвлениях кода самого нижнего уровня. И даже там нужно максимально избегать этой инструкции насколько это возможно, прибегая к вызовам call. Понятно, что в самых примитивных basic PIC-ах стек крайне мал и это плохо реализуемо, но насколько возможно это должно быть так.
[uquote="yor",url="/forum/viewtopic.php?p=4596079#p4596079"]что за код нижнего и верхнего уровней?[/uquote]
Любая общая конечная задача реализуемая на МК является задачей верхнего уровня. Она разбивается на отдельные задачи более низкого уровня. А те, в свою очередь, на еще более низкие уровни. И так доходит до примитивов из которых, как из кубиков, складывается общая программа.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4596092#p4596092"]Выход из функции по goto. Это харам. goto как инструкция применяется лишь в локальных ветвлениях кода самого нижнего уровня. И даже там нужно максимально избегать этой инструкции насколько это возможно[/uquote]А реальный аварийный случай, при таком применении, какой может быть?
Или имеется в виду, что в функцию пришёл по call, вышёл по goto и не вернулся в этом цикле, и привет стеку? Ну так это очевидное злостное нарушение логики, конечно, так работать вообще не будет.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

[uquote="yor",url="/forum/viewtopic.php?p=4596095#p4596095"]в функцию пришёл по call, вышёл по goto и не вернулся в этом цикле, и привет стеку?[/uquote]
Так вообще нельзя делать, если не корректировать указатель стека.
Но я имел ввиду совсем другое.
Под функцией нужно понимать некую завершенную задачу не важно какого уровня.
Например, это может быть вывод текста из флеша на дисплей соединенный по SPI.
Или это может быть более низкая по уровню задача знакогенератора, которая вызывается из предыдущей. Каждая функция любого уровня может иметь некие входные данные и некие выходные. Именно может, но необязательно имеет.
Таким образом, к функции можно зайти с call или с goto. И соответственно выйти через return или через goto.
Моя мысль сводится к тому, что для этой цели goto - харам.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

Ну уж так и не надо то GOTO...
8)
К примеру CALL на табличный селектор вида
ADDWF PCL,f
с последующей таблицей из GOTO переходов на исполняемые варианты подпрограмм, имеющих возврат в точку вызова того селектора (условный вызов)...
:roll:
Ответить

Вернуться в «PIC»