Страница 1 из 5

Реэнтерабельное прерывание и мой стиль программирования

СообщениеДобавлено: 08 май 2013, 06:30
Steve Key
Сначала этот топик назывался :arrow: "Реэнтерабельное прерывание - возможно в FlowCode?",
затем :arrow: "Мой стиль программирования прерываний и дин. индикации..."...
Теперь новое название, кажется, так будет точнее. :oops:

По поводу реэнтерабельности - замнём пока, я действительно стормозил, её так просто не сделаешь, ведь стэк возвратов в PIC - всего 8 шагов...
Фразу выше хотел зачеркнуть, но здесь нет такого кода.. :shock:
Так вот, насчет реэнтерабельности, то есть возможности ПОВТОРНОГО входа в прерывание (вызова прерывания) БЕЗ НАРУШЕНИЯ логики работы программы и без разрушения данных: я думаю, что это возможно сделать (в PIC'ах вообще и в FlowCode в частности), и стек возвратов в 8 адресов (шагов) этому не помеха - просто будет использован один лишний элемент стека! :D

При выносе процедур динамической индикации и обработки нажатия-удержания кноп(и, ок) в главный цикл по флагу произошедшего прерывания получается "некрасивая" неравномерная, мигающая индикация.
Если индикацию и обработку кнопки поместить в процедуру прерывания, то индикация отличная, равномерная, НО, снижается частота отработки прерываний, т. е. отсчет времени "портится"...
Возникла мысля сделать прерывание так называемым реэнтерабельным (reenterable, или как-то так), т. е., чтобы после начала прерывания (ранее его конца) прерывания снова разрешались, но "критичная" процедура (НЕреэнтерабельная) исключалась из "повторной" обработки путём установления специального флага (т. е., обрабатывалась "через раз").
Прилагается файл .fcf, непонятная часть, собственно, во вкладке Retfie, вызывается внизу вкладки Timer.
Не соображу второпях, какие флаги надо поснимать и надо ли выполнять команду Retfie (ассемблерную) для разрешения прерываний (кстати, FlowCode "видит" эту команду, и Return НЕ ставит - оптимизация!).
В начале вкладки Timer два Out'а, дают импульс на свободную ножку для измерения частоты отработки прерывания.
Частота внутреннего генератора PIC - 250 кГц, частота прерывания - 210 Гц.
Схема тож прилагается (хотя она и не очень нужна на данном этапе), это простой таймер, выдержка задаётся путём удержания кнопки и вращения резистора, после отпускания кнопки идёт отсчет выдержки, после отработки - сигнал и полное выключение.
Файлы здесь, что-то добавить вложения не получилось никаким вариантом (или в песочнице запрещено? Тогда кнопку убрать бы...)

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 06:58
mim
Steve Key писал(а):1. получается "некрасивая" неравномерная, мигающая индикация.
2. .............
3. Тогда кнопку убрать бы...

1. Это потому что программа написана неправильно. Полно таймеров и часов с опросом кнопок. Также есть варианты устранения дребезга.
2. по тексту - там полная белиберда......
3. Лучше ФАК почитать

ЗЫ по поводу схемы. Может тебе она и не нужна, а как другим твои каракули разгребать? Резистор в цифровой схеме для установки времени повеселил...
Я всегда говорю, что переученный хуже недоученного.

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 07:32
Steve Key
mim писал(а):1. Это потому что программа написана неправильно.

Не соглашусь! Всё, в общем, работает, остались "шероховатости", которые хотелось бы пофиксить, может быть с твоей помощью. 8-)

mim писал(а):Полно таймеров и часов с опросом кнопок.

Где же полно? Один таймер там! Много вкладок-подпрограмм? Так это я привык на блоки разбивать, благо, среда позволяетЬ...

mim писал(а):Также есть варианты устранения дребезга.

Опять-таки, не соглашусь, у меня нормальная схема подавления дребезга, работает. Не в ней вопрос-то...

mim писал(а):2. по тексту - там полная белиберда......
3. Лучше ФАК почитать

Ты горячишься, я, конечно, не настолько опытен в FlowCode, как ты, но в алгоритмах кой-чего "волоку", фак читаю по мере "утыкания в стену".

mim писал(а):ЗЫ по поводу схемы. Может тебе она и не нужна, а как другим твои каракули разгребать?

Дык, вопрос-то не в работе схемы, а в конкретной вкладке (подпрограмме).
Схему выложил, чтобы ни у кого не возникло подозрения, что у меня какой-то Иксклюзив, Ноу-Хау... :D

mim писал(а):Резистор в цифровой схеме для установки времени повеселил...

А разве неправильно? Я в паузе индикации (общие катоды индикатора активируются НИЗКИМ уровнем сигнала) подаю высокий на один "край" резистора, а напряжение на "середине" считываю АЦП-шкой, затем число (от 0 до 255) разбиваю на "диапазоны", присваиваю каждому выдержку от 5 сек до 90 сек. Всё, опять-таки, работет. :D

Ты подскажи, пожалуйста, какой флаг мне снять надо, чтобы прерывания разрешились "досрочно" (до окончания процедуры прерывания), и надо ли выполнять ассемблерную команду Retfie? :!:

Если надо, я могу всё лишнее выкинуть из текста программы, оставить только прерывание. :!)

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 07:47
Steve Key
mim писал(а):3. Лучше ФАК почитать

Гы, почитал, цитата:
Почему я не могу добавлять вложения?
Возможность добавления вложений может быть организована на уровне форумов, групп пользователей или отдельных пользователей. Администратор форума может не разрешить добавление вложений в определенных форумах. Также возможно, что добавлять вложения разрешено только членам определенных групп. Если вы не знаете, почему не можете добавлять вложения, то обратитесь за разъяснениями к администратору.

Так вот - обращаюсь: в Песочнице нельзя добавлять вложения, или у меня прав просто нет?
Как мне быть? :shock:

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 07:48
mim
Steve Key писал(а):Ты горячишься...

Нет, дружок, горячишься ты...
Я сейчас перечислю вопросы, которые есть на форуме и которые ты должен изучить (это если ты принимаешь то, что я "волоку" больше).
1. Принципы динамической индикации "часы на АВР".
2. Какие требования предъявляются к выполнению прерывания и что происходит при малых частотах тактирования. 250 Кгц - бред.
3. Что такое предзагрузка таймера и как написать "свое" прерывание по любому таймеру.
4. Как устроено прерывание в МК PIC и в частности в ФК (до команд ассемблера).
5. Опрос кнопок без прерывания. И в частности (есть пример) устранения дребезга.
6. Найдешь схемы таймеров (имелось ввиду таймеры и часы как устройства) и изучишь их. Там же найдешь способы установки времени.
Для начала хватит. Все что здесь написано я очень подробно, с примерами выкладывал на старом форуме.
По поводу - "все работает", так ты не первый у кого якобы все работало... Мне про это говорить не нужно. Мне достаточно было посмотреть что впихнуто было в прерывание... :) .
А затем ты все сравнишь... А то что ты надумал себе про прерывание - это от полного непонимания подходов к написанию программ для МК. В некотором плане ФК это губительное средств - кубик туда, кубик сюда, вроде работает, а реально полная чушь, вот ты и суешь кубики куда попало, потому что они легко переставляются...

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 07:55
mim
Хороший пример для изучения. Прочти всю тему.
Здесь почитай
Больше читай. По твоей программе видно что ты чужие темы не читаешь...

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 08:15
Steve Key
mim писал(а):(это если ты принимаешь то, что я "волоку" больше).

Это безусловно!
Но, если я с тобой спорить буду в этой теме - ты её не удалишь?
Просто (не обижайся, ничего личного) сталкивался на форумах, чуть начинаешь перечить модеру - сразу тему "сносят"...

mim писал(а):4. Как устроено прерывание в МК PIC и в частности в ФК (до команд ассемблера).
А то что ты надумал себе про прерывание - это от полного непонимания подходов к написанию программ для МК.

То есть, ты утверждаешь, что реэнтерабельное прерывание сделать на PIC'е невозможно?
Есть смысл мне удалить из кода всё несущественное, для подробного "разбора" критичной части? :?:

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 08:26
Steve Key
Хотя, до меня дошлО, конечно, реэнтерабельность в PIC'ах - это неактуально, постоянно забываю, что стэк возвратов у них всего на 8 адресов... :headbang:
Позднейшее добавление: да нормально там всё, можно сделать, но надо редактировать ассемблерный уже листинг, прямо в FlowCode, видимо, не получится... 8-)

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 08:29
mim
Зачем мне удалять то, что есть свидетельством моей правоты в будущем? Если бы ты читал форум, то знал бы об этом (хоть на форуме ты давно, но почему-то ничего не читаешь...).
О прерывании, ты прочел, то что я дал? Заодно почитай в инете что такое "стек", как МК с ним работает, какой у него размер и что нужно делать разработчику в случае самостоятельного управления прерыванием... Но самое главное не в этом (не в прерывании), - твоя программа это сборище бессистемных кусков, натыканных как попало. Я тебе дал пример Термостата, там и опрос кнопок, и установка режимов, и таймер, и дин.индикация, и все работает на ура. Подобных примеров много и опрос кнопок ни как не влияет на индикацию (при правильном написании), хоть по прерыванию, хоть без. Изучай то что я написал.

ЗЫ А повозить мордой по асфальту и оставить на обозрение - это мое любимое занятие :D

Re: Реэнтерабельное прерывание - возможно в FlowCode?

СообщениеДобавлено: 08 май 2013, 09:08
Steve Key
mim писал(а):О прерывании, ты прочел, то что я дал? Заодно почитай в инете что такое "стек", как МК с ним работает, какой у него размер и что нужно делать разработчику в случае самостоятельного управления прерыванием...
Я тебе дал пример Термостата, там и опрос кнопок, и установка режимов, и таймер, и дин.индикация, и все работает на ура.

Не, не успел еще, я же на работе, приходится отвлекаться, вот неожиданность - на выполнение работы... :evil:
Я обязательно почитаю, раз ты считаешь, что там есть полезная инфа!

mim писал(а):опрос кнопок ни как не влияет на индикацию (при правильном написании), хоть по прерыванию, хоть без.

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

mim писал(а):ЗЫ А повозить мордой по асфальту и оставить на обозрение - это мое любимое занятие :D

Да я не против, почитаю темы, что ты дал, потОм подискутируем, если ты не против. 8-)