Страница 27 из 37

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

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

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

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

Добавлено: Пт июн 28, 2024 03:49:10
yor
Оба подряд никак нельзя. От условия btfss<->Dlvl,D1 зависит, какую вызывать. Или первую, или вторую. Возможно в первой перед return прибавить единицу к РС, чтобы возврат произошёл за вторым вызовом? Пока ничего другого не придумал.

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

Добавлено: Пт июн 28, 2024 04:05:10
Martian
а, понял. Мне показалось, что надо либо один вызов, либо два подряд.

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

btfss Dlvl,D1
call FwdFront
btfsс Dlvl,D1
call RearFront
лишь бы никто не успел изменить Dlvl,D1

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

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

Добавлено after 1 hour 7 minutes 48 seconds:
А по размышлению, лучше сделать вызовы обеих процедур не по call, а по goto. Вызываются они всегда из одного этого места, уходят тоже всегда только в одно другое. Так смысл CALL? Правильно?
Это всё вы меня тут сбили с панатлыку))

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

Добавлено: Пт июн 28, 2024 08:53:29
BOB51
Не мешает посмотреть поведение PCLATH<4:3>...
:roll:

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

Добавлено: Пт июн 28, 2024 10:30:13
КРАМ
[uquote="yor",url="/forum/viewtopic.php?p=4595879#p4595879"]лучше сделать вызовы обеих процедур не по call, а по goto. Вызываются они всегда из одного этого места, уходят тоже всегда только в одно другое. Так смысл CALL? Правильно?[/uquote]
Нет, не правильно.
Алгоритм должен быть написан так, чтобы функция была максимально изолирована.
Это принцип языков высокого уровня и его так же надо реализовывать в АСМе.
Включите моск и думайте. Подсказывать не буду.

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

Добавлено: Пт июн 28, 2024 11:05:40
BOB51
Прямой доступ к счетчику команд у ПИКовых очень мощная штука.
:hunger:
Только вот работа с PCL требует тщательного анализа и планирования размещения подпрограмм, учитывающего работу связки PCLATH и PCH
:tea:

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

Добавлено: Пт июн 28, 2024 11:59:12
yor
[uquote="КРАМ",url="/forum/viewtopic.php?p=4595965#p4595965"]Алгоритм должен быть написан так, чтобы функция была максимально изолирована.[/uquote]Можно объяснить принцип изоляции? Изоляции от чего? Что так, что так они в одной и той же памяти.

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

Добавлено: Пт июн 28, 2024 12:16:19
КРАМ
Изоляция от остального кода.
Код в классической реализации с суперлупом-main-ом должен содержать только вызываемые функции и функции обработчиков прерываний. Никаких спагетти из перекрестных переходов быть не должно.
Все. Точка.
В версии с RTOS все тоже самое, но все функции (задачи) вызываются шедулером, который решает кого и когда вызывать. Он же останавливает работу функций (задач), вызывая очередные.

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

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

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

Добавлено: Пт июн 28, 2024 12:29:12
КРАМ
[uquote="BOB51",url="/forum/viewtopic.php?p=4596022#p4596022"]Для ассемблера с небольшими проектами не столь существенно заметно.[/uquote]
Именно для ассемблера это более всего заметно. На Си все эти попытки пресечены инструментами и всеобщим презрением к использующим goto.
Именно в ассемблере код становится спагетти-кодом очень быстро. Патамушта новичок ленится включить моск и создать легко администрируемый код, заменяя его на свои мечущиеся "мысли".

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

Добавлено: Пт июн 28, 2024 12:39:57
BOB51
Вот тут и не согласен.
Ассемблер требует таки весьма большого внимания (и подсказок от компилятора/ среды разработки заметно меньше).
Плюс "свобода творчества" для ЯВУ недоступная.
8)

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

Добавлено: Пт июн 28, 2024 12:42:31
yor
[uquote="BOB51",url="/forum/viewtopic.php?p=4596022#p4596022"]ардуиноIDE[/uquote]Если не путаю, мне встречались сведения, что оно и PIC поддерживает, или путаю-таки? Ассемблер PIC?

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

Добавлено: Пт июн 28, 2024 13:00:34
КРАМ
[uquote="BOB51",url="/forum/viewtopic.php?p=4596035#p4596035"]Плюс "свобода творчества" для ЯВУ недоступная.[/uquote]
Свобода творчества в АСМе должна быть намертво локализована в коде самого нижнего уровня.
Код верхнего уровня должен быть написан по правилам общим для любого языка программирования, потому что в нем должен быть описан общий алгоритм, а не клубок потока сознания.

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

Добавлено: Пт июн 28, 2024 13:06:56
Martian
Это должно быть написано во всех книжках "Как выучить ... за 21 день".

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

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

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

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

Добавлено: Пт июн 28, 2024 14:40:00
КРАМ
[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]
Любая общая конечная задача реализуемая на МК является задачей верхнего уровня. Она разбивается на отдельные задачи более низкого уровня. А те, в свою очередь, на еще более низкие уровни. И так доходит до примитивов из которых, как из кубиков, складывается общая программа.

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

Добавлено: Пт июн 28, 2024 14:48:45
yor
[uquote="КРАМ",url="/forum/viewtopic.php?p=4596092#p4596092"]Выход из функции по goto. Это харам. goto как инструкция применяется лишь в локальных ветвлениях кода самого нижнего уровня. И даже там нужно максимально избегать этой инструкции насколько это возможно[/uquote]А реальный аварийный случай, при таком применении, какой может быть?
Или имеется в виду, что в функцию пришёл по call, вышёл по goto и не вернулся в этом цикле, и привет стеку? Ну так это очевидное злостное нарушение логики, конечно, так работать вообще не будет.

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

Добавлено: Пт июн 28, 2024 15:13:58
КРАМ
[uquote="yor",url="/forum/viewtopic.php?p=4596095#p4596095"]в функцию пришёл по call, вышёл по goto и не вернулся в этом цикле, и привет стеку?[/uquote]
Так вообще нельзя делать, если не корректировать указатель стека.
Но я имел ввиду совсем другое.
Под функцией нужно понимать некую завершенную задачу не важно какого уровня.
Например, это может быть вывод текста из флеша на дисплей соединенный по SPI.
Или это может быть более низкая по уровню задача знакогенератора, которая вызывается из предыдущей. Каждая функция любого уровня может иметь некие входные данные и некие выходные. Именно может, но необязательно имеет.
Таким образом, к функции можно зайти с call или с goto. И соответственно выйти через return или через goto.
Моя мысль сводится к тому, что для этой цели goto - харам.

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

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