Например TDA7294

Форум РадиоКот • Просмотр темы - "убийственный код" или танцы с бубном возле ATtiny2313
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт июл 29, 2025 07:43:37

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


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



Начать новую тему Ответить на тему  [ Сообщений: 48 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 18:22:15 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ИС-пытатель писал(а):
Но везде в описании reti на AVR говорится, что она аналогична sei; ret;
я допускаю, что так и есть. так же я допускаю, что "индусская" документация не отражает тонкостей :) ведь очень мало кому взбредет в голову использовать НЕРЕКОМЕНДОВАННЫЕ команды...

кстати, еще вопрос на засыпку: не все команды реализованы в МК разных типов... допустимо ли использование "недопустимых" опкодов?

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 19:34:09 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
ИС-пытатель писал(а):
Но везде в описании reti на AVR говорится, что она аналогична sei; ret; За исключением, конечно того, что между этими двумя командами не может влезть прерывание. Скорее всего, они как-то одновременно делаются..
Ну, это если их рассматривать в вакууме. :)
А если в программе. Да ещё в режиме когда прерывания постоянно перекрываются по времени (даже не вложенные), когда основному циклу времени не остаётся, как бы. То в случае с reti основной цикл будет работать, хоть и медленно, а в случае с sei+ret - не будет. Объяснение сами найдёте... :tea:

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 19:40:23 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
Так это понятно. ) После выхода из прерывания выполняется минимум одна команда перед следующим прерыванием. Если написать ret+sei, то эта одна команда будет тратиться на sei, а если sei+ret, то у нас получится куча вложенных прерываний и обвал стека с затиранием данных. Поэтому я и говорю, что они как-то одновременно должны делаться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 19:49:20 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Неа, не так! Садись - два. :)) :)) :))
Не читал спецификацию! Хотя бы описание команды sei прочитай.
...и стек не обвалится.

Добавил.
И не ret+sei, а sei+ret. Тоже мне знаток :))

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 20:01:08 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
Цитата:
Sets the Global Interrupt Flag (I) in SREG (Status Register). The instruction following SEI will be executed before any pending
interrupts.
А, вот. )) нашел. ))

Узнал много нового! :)))

А почему не будет работать тогда конструкция sei+ret? Точнее, почему не будет выполнятся фоновая программа?

Я ща на STM спецификацию читаю.. Вот там тома... )))


Последний раз редактировалось ИС-пытатель Пт апр 18, 2014 20:05:53, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 20:05:36 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Правильно. И всё.
В случае ret+sei, ты sei куда будешь ставить? В основной программе место будешь угадывать? ret что делает? :))
Если sei+ret, то после sei выполниться ret - из стека адрес достанется, только команда по этому адресу не выполниться. Так что стек не упадёт.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 20:10:07 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
Kavka писал(а):
В случае ret+sei, ты sei куда будешь ставить? В основной программе место будешь угадывать? ret что делает? :))

А мож у меня фон

Код:
main: sei;
rjmp main;
:)))

Сенсей, а подскажите, в соседнем топике про ФИШКИ сколько все-таки тактов команда LD. Меня терзают смутные сомненья... ))) Что-то накошачили в описании команд...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "убийственный код" или танцы с бубном возле ATtiny2313
СообщениеДобавлено: Пт апр 18, 2014 22:05:09 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15110
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
ARV писал(а):
прочитал, ничего не понял :) в глюк исполнения ядром МК каких-то команд не верю... но вот какой вопрос снова возник у меня (ранее я над этим думал сам, но тестировать было лень) - кто-нибудь знает ответ на конкретный вопрос: существует ли в AVR разница между reti и sei; ret ? соответственно, обратный вопрос: допустимо ли использовать reti вместо ret в обычных подпрограммах, если состояние флага i безразлично или как раз должно устанавливаться?

что-то мне сильно-сильно кажется, что использование "хакерских" приемов с reti тогда, когда не надо, выбивает микропрограммный автомат МК у топикстартера - оттуда и все его "загадочные" проблемы.

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


Все зависит скорее всего от последовательности выполнения команд в алгоритме - ведь после реконструкции из алгоритма для MCS51 прога пошла работать нормально следовательно правильность применения команд возврата/разрешения прерываний подтверждена практикой.
Кстати и в алгоритмах viewtopic.php?f=62&t=94201 я также подобные приемы использую. 8)
Да и пошаговая трассировка всего модуля ничего не обнаружила - глючек только в железе, причем от МК к МК на разных комбинациях выводов, но весьма устойчивая повторяемость той комбинации на каждом кристалле - как сигнатура МК.
Чую, что где-то оченно тонкий глюк на попадании прерывания на многоцикловую команду, неотлавливаемую дебаггером, а значит не определенную как критическая ситуация разработчиком. Но глубже вникать не стал - ограничился измененным алгоритмом) я и так "наворочал" для бедной тиньки "запредельный" режим по считыванию массива из ПЗУ при одновременно работающем 8-канальном программном ШИМе - совесть иметь надо... 8)
А насчет прерываний - АВРка аналогична таковым для Z80, только аппаратных векторов поболе, а выборка приоритетов весьма подобна.
:beer:


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

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


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

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


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

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


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