реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> безусловный переход из прерывания, как?!
ILYAUL
сообщение Dec 1 2013, 16:58
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
Я вот что-то призабыл. Когда писал в асме вроде бы можно было сделать любой переход из любой точки. Или по метке, или непосредственно задавая значение (приращение) программного счетчика
Совершенно верно.
Цитата
Должно прервать, сделать свои дела и вернуться в то же место откуда прервала!
Совершенно не верно. Прерыванию начхать куда я захочу выйти из него - вот такой вот он Asm\.Достаточно сделать 2 push в нужный момент.
На Си , с его компиляторами , здесь работаю , здесь не работаю , здесь я это пушну в стек здесь - нет. Напиши эту функцию на asm и вызывай когда надо. Точно проблем не будет.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Dec 2 2013, 13:04
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Zandy @ Dec 1 2013, 14:38) *
Спасибо за все, брошенные в меня, тухлые помидоры. Так много откликов! Видать тема больная. sm.gif Конечно, можно было бы, с моей стороны, и дальше "расчесывать" больное место, но я пока этого делать не буду. Потом, как-нибудь. Я понял, что путь этот сложен и тернист. Моя задача позволяет несколько вариантов решения, в том числе и без затрагивания действий сомнительной репутации. Так что, спасибо, тема закрыта.


Неверный подход.
Ваша идея неудачная. Вас вовремя предостерегли от движения в неверном направлении. Мне даже вопрос было страшно читать. Это по поводу выхода из прерывания нестандартным образом.
Хочу дать вам совет по поводу прерываний. Прерывания как налог. Только вместо денег время. Чем они длиннее, тем меньше скорость системы. Поэтому в прерываниях надо делать как можно меньше работы. В системах без операционной системы можно сделать так.
В прерывании таймера инкрементируется глобальная переменная, а в вечном лупе стоит условный цикл, который прокручивается впустую пока эта переменная равна нулю.
сразу за этим циклом она декрементируется. Глобальную переменную таймаут можно декрементировать в прерывании и в случае таймаута (что случается редко) сбросить состояние автомата в исходное. Это не займет много времени.

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

Заранее хочу предостеречь от классической ошибки новичков. Никогда не сбрасывайте вочдог в прерывании.


Цитата(Zandy @ Nov 29 2013, 19:28) *
setjump(), longjump(). Здесь я что-то ни хрена не понял, какое отношение к моей задаче. И еще, по ссылке не работают примеры.
По поводу грязного хака. Не совсем согласен. В сложных программах с кучей вложенных функций наверное это так. В моем простейшем случае, я думаю, небо не рухнет. Ведь допускает же теория С выход из вложенных циклов по готу. Да тут даже вопрос то не в этом (плохо или хорошо). Пусть плохо. Но как?
По поводу проверки флага, установленного в прерывании, в основном цикле. Больно часто его придется проверять, хотя...


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

Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 12 2013, 15:13
Сообщение #18


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Я понимаю, что вы предупреждали, но ведь Watchdog на многих AVR умеет генерить прерывание вместо полного ресета камня.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th August 2025 - 18:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01347 секунд с 7
ELECTRONIX ©2004-2016