Например TDA7294

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

Текущее время: Вс авг 17, 2025 20:05:41

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


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



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

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

Да, патамушта директива banksel тупо генерирует одну или две строки (зависит от МК) с соответствующей аргументу директивы установкой банка.


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

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

Так почему бы не сделать глобальный подстанов по всему листингу? Проверку при любом обращении к переменным и установку битов выбора банка?


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

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

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


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

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


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

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

А ещё лучше возложить это на автоматику, в век цифровых технологий. Конечно, оверхед, если лепить везде, а если с умом, то. Лишний проход компилятора, как минимум, я так понимаю. А может и без него. Однозначно ведь можно вычислить, где нужна смена банков?


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

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

Нет, не может. Потому что Ассемблер по сути компилятором в полном смысле не является.
Впрочем, и в Си невозможно анализировать рантайм.

Добавлено after 1 minute 57 seconds:
Однозначно ведь можно вычислить, где нужна смена банков?

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


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

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
То есть ассtмблер, видя, например, var1, не может понять, что это - или регистр в ОЗУ или вообще левая переменная? А по контексту:
Код:
movwf var1
incf var1,f

subwf var1

Разве непонятно?
Или портят дело усугубляющие случаи, непрямая адресация, индексное приращение или как там его?


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

Карма: 139
Рейтинг сообщений: 2919
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24010
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
То есть ассtмблер, видя, например, var1, не может понять, что это - или регистр в ОЗУ или вообще левая переменная?

Вы вообще понимаете о чем я вам пишу? :facepalm:
Еще раз.
Нет никакого смысла в автоматическом добавлении banksel, ибо это тупой оверхед.
В подавляющем количестве случаев обращение к ОЗУ делается так, чтобы не нужно было переключать регистры. То есть работают с одним банком. А потом в другом месте кода один раз переключают и работают уже с другим. А разбирать код, предсказывая его работу, Ассемблер не умеет. Линейный код - это частный случай. Чаще всего код ветвится и необходимость banksel является условной.
И вообще, если вам хочется забыть про банки, пишите на С.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт июл 04, 2024 17:33:13 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 158
Откуда: не с Уфы
Рейтинг сообщения: 0
То есть ассtмблер, видя, например, var1, не может понять
а если ты например, видишь movlw 0x05 ... то что это? адрес, константа?
ассtмблер не должен что-то там "видеть", да ещё и домысливать/корректировать/добавлять, упаси его ... было бы довольно странно, если некая автоматика вмешивалась в это ... в том то и смысл асма - тупо заменять написанное (в простых к запоминанию нам словах) на соответствующие числовое представление.

Наверное как минимум в 90% случаях ответы на твои вопросы есть на одной из первых десяти страниц даташита. Я понимаю там, когда вопрос касается нюансов той или иной реализации, методов оптимизации, вариантов организации ... того что не отражено напрямую в документации, но тут то ... основы же.

_________________
Tg


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

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15136
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
movlw 0x05
будет однозначно определяться как загрузка константы 0x05 в регистр w
Что дальше с теми данными будет делаться для этой операции безразлично.
Другое дело операции, где подразумевается загрузка регистра ОЗУ/РСФ - там значение проверяется согласно информации из служебных файлов в составе проекта (для мпасма в мплабе).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт июл 04, 2024 19:26:08 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 158
Откуда: не с Уфы
Рейтинг сообщения: 0
Это мы в этом видим ту или иную однозначность а по факту эту запись тупо превратят в соответствующий опкод и поместят по соответствующему адресу, и всего то

_________________
Tg


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

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

Добавлено after 1 hour 26 minutes 56 seconds:
Есть способ из W вычесть число, в частности единицу? В 648 decf W не работает. И даже регистр из W не вычесть, только наоборот. Вот так аккумулято...
От 8 цикл до нуля, чтобы лишний вспомогательный регистр не заводить.


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

Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 158
Откуда: не с Уфы
Рейтинг сообщения: 0
делай так:
addlw 0xFF
это незадокументированная специнструкция

_________________
Tg


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

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15136
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
При обработке мпасмом используется еще и линкер и два файла описания ресурсов *.inc и *_g.lkr - вот там все базовые параметры для вармингов и отработки ошибок искать надо (* - имя соответствующего МК).
Ежли по *.inc все достаточно понятно, то по*_g.lkr желательно у КРАМ данные поспрошать... Я ими только пользуюсь в том виде, что в IDE задан...
:roll:
Насчет вычитания и работ с W у стандартных среднемладших таки малость не так, как у других (то же касается и флага С при вычитании) - но ЭТО ПИКи...
:dont_know:
И никто не запрещает:
inc W -- addlw .1
dec w -- addlw 0xff
setb W.n -- iorlw 1<<n
clr W.n -- andlw 0xff-(0xff&(1<<n))
:wink:
Старая шпора для "быстрых воспоминаний":
Вложение:
шаблон_команд_PIC10_12_16.pdf [648.72 KiB]
Скачиваний: 66

:sleep:


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

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
Инкремент-то понятно, и биты, а вот вычитание - прямо магия!
addlw 0xff на флаг Z как надо подействует? То есть при нуле он 1? Ну и для общего развития, что с флагами С && DC? Через С вычитает?


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

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15136
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
https://web.archive.org/web/20080221231 ... /mpasm.pdf
https://web.archive.org/web/20080221231 ... C16_29.pdf
:sleep:


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

Карма: -3
Рейтинг сообщений: 84
Зарегистрирован: Сб янв 19, 2008 23:57:27
Сообщений: 1675
Рейтинг сообщения: 0
Так из W можно только вычитать единицу, большее число никак?
Это всё конечно хорошо, а секретной команды деления на ноль нигде не описано? :-)


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

Карма: 2
Рейтинг сообщений: 21
Зарегистрирован: Вс сен 17, 2017 17:44:21
Сообщений: 4812
Откуда: 51.7727, 55.0988. Высота над морем 107 м. До границы 161 км.
Рейтинг сообщения: 0
https://web.archive.org/web/20080221231243/http://www.microchip.ru/files/d-sheets-rus/mpasm.pdf
https://web.archive.org/web/20080221231 ... C16_29.pdf
:sleep:

Не осилит он.


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

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

А кто мешает математику вычитания отрицательного числа из положительного
заменить на сложение положительного числа с отрицательным?
Единственно что для однобайтовых ограничение диапазона от +127 до -127...
У стандартных среднемладших команд поддержки умножения/деления нету.
За исключением общего для практически всех МК умножения/деления на 2 (и степени двойки) сдвигами влево/вправо.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт июл 05, 2024 14:36:11 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 158
Откуда: не с Уфы
Рейтинг сообщения: 0
... а секретной команды деления на ноль нигде не описано? :-)

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

_________________
Tg


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

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


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

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


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

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


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