Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы начинающих PIC ASM
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср авг 20, 2025 12:06:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 731 ]     ... , , , 28, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 15:23:44 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2919
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24017
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
с последующей таблицей из GOTO переходов на исполняемые варианты подпрограмм

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 15:26:33 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15137
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Аналогия switch case в Си всего то...
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 15:27:02 
Говорящий с текстолитом

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
Так и обходите молчанием, что же может (даже не произойдёт), а только может произойти? Биты на байты налезут, или стек через своп в астрал улетит? Если логика продумана, то будет работать железно хоть так хоть этак. На то оно, как там его, железная логика)) Или имеете в виду возможное внесение косяков при изменении программы?
Что будет-то на железном уровне? Просто "харам" - это не доказательство. Или это не для начинающих.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 15:32:44 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15137
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Если получен тупик в текущем алгоритме почему бы не продумать иной вариант решения задачи?
Ведь проверка условий возможна весьма разными способами.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 15:33:54 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2919
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24017
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Если логика продумана

Проблема в том, что в спагетти-коде невозможно "продумать логику" так, чтобы она была действительно продумана.
Разве только для самых примитивных задач.
Чем более упорядочен код, тем проще с ним работать сейчас и вообще возможно работать в некоем не слишком далеком будущем.
Иначе смотришь на свой код как баран на новые ворота и не понимаешь зачем ты сделал странные действия...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 15:44:29 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15137
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
У нас исходно сделать выбор в случае с текущим значением бита...
Можно по командам проверки состояния бита, а можно и по условному переходу, представив бит в адрес вектора перехода (табличный селектор).
То уж как интересно будет.
Да и на BTFSS/BTFSC переключатель соорудить можно только по каждой команде свое условие делается, а не два условия с одной команды.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 15:45:05 
Говорящий с текстолитом

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
Проблема в том, что в спагетти-коде невозможно "продумать логику" так, чтобы она была действительно продумана.
Разве только для самых примитивных задач.
Ну это только если проццессор слабоват, или ОЗУ недостаточно))

Чем более упорядочен код, тем проще с ним работать сейчас и вообще возможно работать в некоем не слишком далеком будущем.
Иначе смотришь на свой код как баран на новые ворота и не понимаешь зачем ты сделал странные действия...
Это да, полностью согласен. Но комментарии спасают.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 16:10:19 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15137
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
К Вашему примеру селектора:
Спойлер
Код:
; саму проверку вызываем как CALL TEST ибо надо фиксировать точку возврата
; к исходной программе (а она таки одна)
CALL TEST

TEST
BTFSS R0,N ; проверка на 1
BTFSC R0,N; если не 1 то проверяем на 0
goto point_a ; безусловный переход на точку
                   ; вызова подпрограммы при бите = 1
point_b ; точка вызова подпрограммы при бите = 0
       ;ТЕЛО ПРОГРАММЫ ДЛЯ БИТА РАВНОГО 0
       ;................................
ret ; или reti

point_a ; точка вызова подпрограммы при бите = 1
       ;ТЕЛО ПРОГРАММЫ ДЛЯ БИТА РАВНОГО 1
        ;................................
ret ; или reti


Надеюсь понятно, почему там CALL за btfss/btfsc не слишком корректна...
:wink:


Последний раз редактировалось BOB51 Пт июн 28, 2024 16:18:38, всего редактировалось 3 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июн 28, 2024 16:10:55 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2919
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24017
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Но комментарии спасают.

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

Все давно придумано в MPLABX. Там есть возможность открыть два экземпляра одного листинга в одной среде. Справа в верхнем углу листинга есть крестик. Потяните за него влево. Дверка с золотым ключиком откроется... :music:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Сб июн 29, 2024 09:58:13 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15137
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
...

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

Если метка относится только к некоторому участку кода и нигде более не используется - проблем особо нет. Это объявление локальной метки действующей в ограниченной области кода. Тут главное не сделать повторного объявления ранее уже определенного регистра или данных.
Другое дело, когда определенная где-то в одном месте метка в дальнейшем будет использоваться в других частях программы.
Ежли "ниже по коду" это вполне возможно (хош и путаница в поиске первоисточника самой метки будет еще хуже, чем просмотр единого файла заголовка с определением меток).
А вот ежли "выше по коду" - тогда придется изворачиваться с #define и опять таки со списком определений в отдельном разделе (файле) в начале программы.
Да и никто не ограничивает возможность вставлять в начале текста программы проекта подключаемые файлы, к примеру:
Код:
#include <def_name_project.txt> ; файл объявленных имен, бит и констант
#include <mac_name_project.txt> ; файл описания макросов
;    вместо name_project подставляется имя файла соответствующего проекта

а уже в них укладывать все объявления.
Такой вариант легко просматривается/обрабатывается в любом текстовом редакторе с несколькими одновременно открытыми файлами даже на одном мониторе.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 07:42:39 
Говорящий с текстолитом

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
Не подскажете идею, как определить старший единичный бит в байте? btfss-ами долго и муторно получается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 07:53:20 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2919
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24017
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Что значит определить?
Перейти по условию? Тогда это btfss.
И что такое"долго и муторно"?
Опять же все зависит от семейства МК. В 18-х и 24-х есть иные варианты.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 07:57:41 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15137
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
yor писал(а):
Не подскажете идею, как определить старший единичный бит в байте? btfss-ами долго и муторно получается.

Почему долго?
Одного btfss (или btfsc -зависит от логики задачи) вполне достаточно.
Другое дело если тот бит контролируется в комплекте с остальным содержимым регистра или с дополнительными параметрами.
Альтернатива - сдвиг RLF Rx,w с последующей проверкой флага C регистра status.
Или хочется классическую инверсию бита в зависимости от его исходного состояния с помощью связки из тех btfss/btfsc замутить?
Чтой-то у Вас "творческий спад" наблюдается...
Не захворали ли часом?
:?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 08:17:55 
Друг Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 21
Зарегистрирован: Вс сен 17, 2017 17:44:21
Сообщений: 4812
Откуда: 51.7727, 55.0988. Высота над морем 107 м. До границы 161 км.
Рейтинг сообщения: 0
Чтой-то у Вас "творческий спад" наблюдается...

А был ли подъем?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 09:16:39 
Говорящий с текстолитом

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
КРАМ писал(а):
Что значит определить?
Вам тоже надо как процессору объяснять))

yor писал(а):
Не подскажете идею, как определить старший единичный бит в байте? btfss-ами долго и муторно получается.

Определить позицию старшего единичного бита в байте, для вычисления его веса (^2), 128 64 ... 2 1, 16f648.

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

Альтернатива - сдвиг RLF Rx,w с последующей проверкой флага C регистра status.
Спасибо, я до этого тоже уже додумался, но те же 8 циклов

А больше, похоже, никак, в один присест не получится. Хотя, если учесть последующие действия, может чего и придумается. Это для того, чтобы из
Код:
001xxxxx -> позиция №5 -> вес 32 -> 32*2=64 -> преобразовать в три младшие бита регистра OPTION PS[2:0] для предделителя TMR0.
То есть в этом случае 64-> PS[2:0]=101

Код:
PS<2:0>: Prescaler Rate Select bits Bit Value TMR0
 000 1:2
 001 1:4
 010 1:8
 011 1:16
 100 1:32
 101 1:64
 110 1:128
 111 1:256

И это мне ещё повезло, что остальные биты OPTION всегда нулевые будут, и можно просто писать
Код:
00000101 -> OPTION


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 09:25:51 
Друг Кота
Аватар пользователя

Карма: 58
Рейтинг сообщений: 389
Зарегистрирован: Чт мар 20, 2008 01:06:40
Сообщений: 3284
Откуда: Севастополь
Рейтинг сообщения: 0
Код:
rrf Rx,f
swapf  Rx,w
andlw  b'00000111'
movwf  OPTION

_________________
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 09:40:29 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2919
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24017
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
yor писал(а):
Не подскажете идею, как определить старший единичный бит в байте? btfss-ами долго и муторно получается.

Определить позицию старшего единичного бита в байте, для вычисления его веса (^2), 128 64 ... 2 1, 16f648.

Наверное нужно сначала думать, а лишь потом формулировать вопрос.
Определить старший единичный байт и определить позицию старшего единичного байта - это две большие разницы.
Однако да, подобные задачи не компактны, поэтому в системе команд PIC24/dsPIC есть специальные инструкции FF1L/FF1R позволяющие вернуть позицию первого единичного бита слева или справа. Причем за один машинный цикл.
Так же есть инструкция определяющая позицию первого слева ИЗМЕНИВШЕГОСЯ бита - FBCL. Для положительных значений это будет первая слева 1 после 0, а для отрицательных - первый слева ноль после 1. И тоже за один машинный цикл.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 10:12:11 
Говорящий с текстолитом

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
Код:
rrf Rx,f
swapf  Rx,w
andlw  b'00000111'
movwf  OPTION

AND по маске это понятно, а вот первые две команды как приложить - ума не приложу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 10:56:08 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15137
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Вопрос исходно совсем некорректно задан был!
:facepalm:
Для такого простейшего определения или функция препроцессора (есть в ассемблерах у атмела для авр/mcs51) или программный табличный обработчик - у ПИКовых для такого есть RETLW (табличное преобразование)
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс июн 30, 2024 11:50:31 
Друг Кота
Аватар пользователя

Карма: 58
Рейтинг сообщений: 389
Зарегистрирован: Чт мар 20, 2008 01:06:40
Сообщений: 3284
Откуда: Севастополь
Рейтинг сообщения: 0
yor, Rx - это регистр, куда загружено исходное значение 001xxxxx

_________________
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 731 ]     ... , , , 28, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y