MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки Цены
 Новости   Конференция   Как нас найти? 

Представляем новую линейку продуктов, поставляемых ООО "Микро-Чип":
Источники питания

Блоки  питания


 

Как заставить...

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Как заставить...
Автор: Валерий (217.9.156.---)
Дата:   19/10/2004 16:59

После выполнения подпрограммы прерывания основная программа запускается с того
места, где прервалась. А если мне необходимо после прерывания каждый раз стартовать
с определённого места (чтоб не накапливалась ошибка)? Кто знает подскажите как
можно это сделать на языке Си в процессорах Atmel (например at90s2313 или at90s4414
или любом другом, понимающем язык Си).


 
 Не скажу про Атмел, но (+)
Автор: Ecole (194.44.66.---)
Дата:   19/10/2004 17:12

Что значит "с определённого места"?
И что такое "чтоб не накапливалась ошибка"?
Поясни подробнее.

>необходимо после прерывания каждый раз стартовать с определённого места (чтоб не накапливалась ошибка)"?


 
 ещё
Автор: patton (195.96.66.---)
Дата:   19/10/2004 17:13

про процессора понимающие С мне понравилось


 
 на Atmel, в общем случае, никак
Автор: pal (81.211.98.---)
Дата:   19/10/2004 17:32

и не только на С. Для Microchip на ASM - решается выходом из прерывания по goto. А
вообще то так и на ASM-е писать не следует.


 
 Re: ещё
Автор: Andrey (81.176.227.---)
Дата:   19/10/2004 17:35

patton писал(а):

> про процессора понимающие С мне понравилось
Это наверное
at90s2313с или at90s4414с :)

Если у них стек доступен(я не в курсе)
то может просто на асме вставить коррекцию адреса возврата...



Отправка отредактированного (19/10/2004 17:36)


 
 я уже показал
Автор: patton (195.96.66.---)
Дата:   19/10/2004 17:59

как по абсолютным адресам обращаться
больше не хочу вредные советы давать


 
 :-) типа RTFM
Автор: IceS (193.125.158.---)
Дата:   19/10/2004 18:22

А может посоветуем товарищу про WDT почитать :-)
А так вообще что за ошибка должна накапливатся?
Прога все равно в цикле должна крутиться, ну вот в нем и смотришь - если пришло прерывание (может
бит какой обработчик выставит, или просто не вернет из прерывания управление :-) вот по WDT и
сбросится проц ), то перейти по нужному адресу (при этом регистры надо будет инициализировать,
стек и так далее).


 
 Re: :-) типа RTFM
Автор: Валерий (217.9.156.---)
Дата:   19/10/2004 20:27

Если верить даташиту, то минимальное время WDT составляет 16 мс. Как можно
мгновенно сбросить при помощи него?


 
 ну если он доступен для записи
Автор: patton (195.96.66.---)
Дата:   19/10/2004 20:34

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

как-то криво сформулированно, но вечер и сил уже нет на отточеные формулировки


 
 ну если просто сбросить...
Автор: IceS (193.125.158.---)
Дата:   20/10/2004 09:48

то сделать асм вставку - jmp 0, можно в прерывания, но что то не понятно зачем это надо :-\


 
 Re: Как заставить...
Автор: letopisec (80.89.143.---)
Дата:   20/10/2004 09:58

AVR бывают с программным стеком, бывают с аппаратным.

При возникновении irq, выполняетя текущая команда, обновляется указатель на следующую команду
(РС), затем значение РС записывается в стек. Если стек программный, то после этого уменьшается
значение указателя стека (SPH:SPL), на 2.

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

Если стек аппаратный, то проблема не актуальна, вследствие отсутствия команд push/pop.

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

На практике это значит что надо проинициализировать указатель стека определённым значением.

         start point
              |________
             /____     \
            /___ /\
           /    \
          x      z
          |     / \
         / \         
        /\  \


Предположим что управление надо передавать программе 'x'. А до этого выполнялось поддерево 'z',
или ещё какое. Значит после обработки прерывания значениее указателя стека должно быть таким,
каким было бы, при 'естесственной' передаче управления на ветку 'x'. Ну а дальше rjmp proc_name.


 
 Re: Как заставить...
Автор: Alich (81.176.142.---)
Дата:   20/10/2004 10:25

Итак, посмотрим, что говорит Б.Керниган и Д.Ритчи на в сером учебнике (к сожалению издания не
скажу - вырваны страницы). Итак в данном издании п.3.8.
"В Си имеются порицаемые многими инструкция Goto и метки для перехода на них. Строго говоря,
в этой инструкции нет никакой необходимости, и на практике можно легко без них обойтись...
...однако существуют случаи, в которых goto может пригодиться. Наиболее типична ситуация,
когда необходимо прервать обработку в некоторой глубоковложенной структуре и выйти сразу из
двух или большего числа вложенных циклов".


 
 Максимум куда ...
Автор: IceS (193.125.158.---)
Дата:   20/10/2004 11:17

он выйдит с помощью сишного GOTO так это в конец текущей функции/процедуры, а ему проц надо
сбросить или на другую процедуру перейти.

одним словом сишный GOTO <> контроллерному JMP :-)


 
 Максимум туда ... ;)
Автор: patton (195.96.66.---)
Дата:   20/10/2004 11:33

http://www.microchip.ru/phorum/read.php?f=2&i=56181&t=55941


 
 Re: Максимум куда ...
Автор: Alich (81.176.142.---)
Дата:   20/10/2004 11:46

с break что ли путаете?


 
 ему уже и на телесистемах
Автор: Vova (195.131.84.---)
Дата:   20/10/2004 11:51

и на сахаре обо всяком рассказали ...


 
 А это он и будет..
Автор: IceS (193.125.158.---)
Дата:   20/10/2004 12:09

если метку в конце процедуры поставить.

Имеется в виду что из одной процедуры прыгнуть в другую процедуру на поставленную метку, имхо, не
получится.


 
 я чего-то не залезал давно туда
Автор: patton (195.96.66.---)
Дата:   20/10/2004 13:53

а там что обсуждали как использовать( точнее зачем грамотно )
надеюсь понятно

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


 
 Re: А это он и будет..
Автор: Alich (81.176.142.---)
Дата:   20/10/2004 15:56

Да, вообще то метки внутри блока. Невнимательно прочитал.





Горячие темы на нашем форуме:
Отдел продаж: тел. (495) 223-2339 sales@microchip.ru   Skype:microchip-moscow
Rambler's Top100