Toggling the Pin

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Toggling the Pin

Сообщение ARV »

вы это вообще сейчас о чем: о своих собственных мыслях или все-таки о конкретной особенности архитектуры AVR, позволяющей инвертировать бит в одном регистре путем записи в аналогичный бит другого регистра?

сферическая мнемоника в вакууме здесь не рассматривается. вернитесь к нашим баранам.

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

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25220
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Toggling the Pin

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

Это я о своих мыслях на фоне Ваших предположений... :)
Я так и не увидел в "особенной" архитектуре Атмела ничего особенного. Выглядит как заплатка - действительно. Но и заплатка может быть архитектурной особенностью. На манер команды TRIS у ПИКов пятнадцатилетней давности.
Но, несмотря на заплатку команда документирована на пристойном для нее месте - в спецификации команд.
Еще раз, Вы верно меня не поняли...
Если (предположим) есть некая пара команд УСТАНОВКИ-СБРОСА пина порта. И есть АДРЕС порта. КОПы этих команд и адреса портов следуют друг за другом.
Теперь мы вводим на каждый регистр порта ЕЩЕ ОДИН регистр, адрес которого расширен на один разряд вверх. Мы имеем право отнести этот дополнительный разряд к КОП? Да ЭЛЕМЕНТАРНО... КОП станет на 1 разряд длиннее, а пользователь даже не догадается (ну мы то конечно сообразим! ;) ) что НА САМОМ ДЕЛЕ КОП короче на 1 разряд, а сам этот разряд адресует регистр-маску на XOR с портом...
:tea:
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Toggling the Pin

Сообщение ARV »

КРАМ писал(а):нужно было привести СИНТАКСИС при котором команда будет использована с другой спецификацией.
Так описывают разные способы адресации для одной и той же команды, так описывают разные источники и назначение для одной и той же команды, так описывают влияние команд на флаги, так описывают длину команды во флеше, так описывают длительность ее исполнения, там, наконец, приводят КОД этой команды...
Потому что у этой команды, на самом деле, ДРУГОЙ КОД.
это вы писали? вроде вы.
КРАМ писал(а):Еще раз, Вы верно меня не поняли...
я вас понял верно: вы стали рассуждать о сферическом ассемблере в вакууме, хотя речь шла о конкретной команде конкретного ассемблера с конкретной архитектурой. ничего из вами сказанного в реальности не существует.

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

Мой уютный бложик... заходите!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25220
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Toggling the Pin

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

ARV писал(а):
КРАМ писал(а): Потому что у этой команды, на самом деле, ДРУГОЙ КОД.
это вы писали? вроде вы.
Вы вообще различаете термины "код команды" и "код операции"? :dont_know: :facepalm:
ARV писал(а):
КРАМ писал(а):Еще раз, Вы верно меня не поняли...
я вас понял верно: вы стали рассуждать о сферическом ассемблере в вакууме, хотя речь шла о конкретной команде конкретного ассемблера с конкретной архитектурой. ничего из вами сказанного в реальности не существует.
Зато существует "индусский след"... :)))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Toggling the Pin

Сообщение oleg110592 »

У стм32 есть 32 разрядный GPIO port bit set/reset register (GPIOx_BSRR), где записью "1" в соответствующем разряде можно установить/сбросить бит в порту (порт 16 разрядов). Если бы Атмел назвала для Toggling the pin регистр не PINx, а например BTRx (не бтр), пусть адрес бы и совпадал с PINx, то этой темы имхо бы не было. :))

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

Re: Toggling the Pin

Сообщение BOB51 »

GPIORx, к сожалению, просто регистры общего пользования с побитовым доступом. И только у 2313/4313... :(
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Toggling the Pin

Сообщение oleg110592 »

почему только - регулярно использовал в меге48 - там правда один полноценный и в других продвинутых аврах есть, в XMEGAх про них не забыли. Очень полезный регистр оказался (для меня) - экономия команд налицо.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 431
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: Toggling the Pin

Сообщение HardWareMan »

КРАМ писал(а):
HardWareMan писал(а): Если эту задачу делать через EOR порта PORTx то придется таки сохранять в стеке SREG (а вместе с ним и еще один верхний регистр), иначе грабли обеспечены.
Тут я все таки полюбопытствую. Просто потому что не знаю этой особенности архитектуры АВР.
А что, порт не имеет прямой адресации в ОЗУ? В чем состоят грабли маски на порт без стека? Причем тут контекст?
Маскирование через EOR задействует АЛУ. АЛУ испортит все флажки (т.е. регистр SREG). Портить флажки в прерывании - вселенское зло и мегаграбли, которые даже некоторые гуру распознают только после десятикратного наступания на них. И да, PUSH SREG не работает. Хотя можно и не в стеке, конечно.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25220
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Toggling the Pin

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

HardWareMan писал(а): Маскирование через EOR задействует АЛУ. АЛУ испортит все флажки (т.е. регистр SREG). Портить флажки в прерывании - вселенское зло и мегаграбли, которые даже некоторые гуру распознают только после десятикратного наступания на них. И да, PUSH SREG не работает. Хотя можно и не в стеке, конечно.
Ничего не понял.
А что, сохранение контекста в АВР не происходит автоматически при переходе по вектору прерывания?
И причем тут команда EOR? Все арифметические команды и все команды сравнения изменяют регистр состояния, так что, через это их нельзя применять в прерываниях?
У меня есть смутное ощущение, что Вы излагаете... ммм, какгбэ помяхше... Ерунду.
Сохранение контекста, ПРЕЖДЕ ВСЕГО регистра состояний, а так же базовых РОНов определяющих системную адресацию и данные, - это АЗЫ работы с прерываниями и в большинстве контроллеров производится автоматически, как и его восстановление. Либо описано специально в виде примеров из даташита.
PS. Полюбопытствовал, действительно не сохраняется. Ну да не беда. Значит нужно сохранять РУЧКАМИ.
И не только SREG. Вообще то сохранять нужно ВСЕ РОНы, которые используются в прерываниях...
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Toggling the Pin

Сообщение DronVolk »

блин я не понял то есть
инструкция на 2 такта

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

SBI PINA,0
выполнится быстрее
чем 2 инструкции по 1 такту процессора?

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

LDI Rd, K
EOR Rd, Rr
если да то это круто :)))

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

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

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25220
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Toggling the Pin

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

Вы по деццки радуетесь, если обнаружилась некая довольно экзотическая в применении инструкция, что можно сократить некий быдлокод еще на 2 машинных цикла.
В 99,99% случаев это НЕ ИМЕЕТ НИКАКОГО ЗНАЧЕНИЯ.
По ДВУМ причинам:
1. Ресурсы контроллера имеют запас.
2. Алгоритм ИЗНАЧАЛЬНО убогий и работа над его оптимизацией даст НА ПОРЯДОК больше, чем смешной выигрыш в пару строк или машинных циклов.
ЗЫ. Под алгоритмом не стоит полагать сам код. Алгоритм - это то, НА ОСНОВАНИИ ЧЕГО пишут код.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 431
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: Toggling the Pin

Сообщение HardWareMan »

КРАМ писал(а):У меня есть смутное ощущение, что Вы излагаете... ммм, какгбэ помяхше... Ерунду.
* * *
PS. Полюбопытствовал, действительно не сохраняется. Ну да не беда. Значит нужно сохранять РУЧКАМИ.
И не только SREG. Вообще то сохранять нужно ВСЕ РОНы, которые используются в прерываниях...
Ну и кто тут излагает... ммм, какгбэ помяхше... Ерунду?
DronVolk писал(а):блин я не понял то есть
инструкция на 2 такта

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

SBI PINA,0
выполнится быстрее
чем 2 инструкции по 1 такту процессора?

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

LDI Rd, K
EOR Rd, Rr
если да то это круто :)))
Только вот первая инструкция это делает сразу с регистром порта (читайте как "проделывает полезную работу") а второй пример только с РОН, который надо еще в порт выкинуть.
Последний раз редактировалось HardWareMan Сб сен 05, 2015 04:54:24, всего редактировалось 1 раз.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Toggling the Pin

Сообщение Андрей СШ »

DronVolk писал(а):если да то это круто
Это не круто, потому что эти два варианта выполняют совершенно разные действия не имеющие между собой ничего общего. И следовательно сравнение их по скорости ничего не значит.
DronVolk писал(а):шаг процессора а не число тиков.
что такое шаг процессора и чем он отличается от числа тиков?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25220
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Toggling the Pin

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

HardWareMan писал(а): Только вот первая инструкция это делает сразу с регистром порта (читайте как "проделывает полезную работу") а второй пример только с РОН, который надо еще в порт выкинуть.
Вы не читали весь предыдущий флуд?
Какую полезную работу? В какой задаче?
Написать можно все что угодно. Только РЕАЛЬНО подобный код мало интересен.
Да, бывает, что можно обойтись без сохранения контекста, да и то один случай на сотню проектов. При том это не связано с требованиями уменьшить латентность реакции, а просто в ISR не оказывается модификации флагов и критичных РОНов. Но чтобы еще при этом нужно было СРОЧНО дернуть ногой (в произвольном направлении) - даже трудно себе представить... :dont_know:
ЗЫ. Ерунду, уважаемый, Вы излагали не по существу, а в этом:
HardWareMan писал(а): Портить флажки в прерывании - вселенское зло и мегаграбли, которые даже некоторые гуру распознают только после десятикратного наступания на них.
Я с трудом себе представляю даже не слишком искушенного в контроллерах человека, который бы не был знаком с необходимостью сохранять контекст при входе и восстанавливать при выходе из ISR.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Toggling the Pin

Сообщение oleg110592 »

КРАМ писал(а):В 99,99% случаев это НЕ ИМЕЕТ НИКАКОГО ЗНАЧЕНИЯ
Когда использовал AVR как раз все наоборот было - в 100% это имело ОГРОМНОЕ ЗНАЧЕНИЕ. Использовал в основном самые дешевые варианты из AVR: Тини13 (всего 512 команд) и Мега48 (2048 команд) и никакого запаса ресурсов - приходилось экономить каждый байт - работа над оптимизацией проводилась.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25220
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Toggling the Pin

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

oleg110592 писал(а):работа над оптимизацией проводилась.
Оптимизацией ЧЕГО? Кода или алгоритма?
Пошлый алгоритм бесполезно оптимизировать на уровне кода. Проку - чуть.
И трудно себе представить полное использование флеша в МК иначе чем с помощью тупой printf...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Toggling the Pin

Сообщение oleg110592 »

в основном оптимизация кода, алгоритм обычно был прост. Принтф это не интересно (кто ж его применяет для такой мелюзги), а вместить в тини13 работу с SD карточкой (FAT), вывод звука из файлов на карточке + звуковое меню настроек устройства это интереснее.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25220
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Toggling the Pin

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

Работа делалась ради спортивного интереса или использование тайни13 решало финансовую судьбу проекта?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Toggling the Pin

Сообщение oleg110592 »

все в финансы упиралось - надо было делать не дороже чем у конкурентов и объемы производства вполне приличные были
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Toggling the Pin

Сообщение DronVolk »

Тема перешла из решения почему не получается переключится в тему у кого ассемблерные конструкции лучше. ИМХО дальнейшее продолжение пустая трата дискового пространства сайта.
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Ответить

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