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

 
 
> __raw прерывания
fmdost
сообщение Jun 11 2007, 22:07
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Доброго времени суток, подскажите pls как в прерывании перенести сохранение регистров по своему усмотрению. Мне нужно как можно быстрее дёрнуть ногой, а потом выполнить С код.

камень mega88;

__interrupt //Штатно сохраняет все далее используемые регистры.

// и только после этого
PORTx=1;

//~далее С код

==========
А надо так

__interrupt

PORTx=1;

//Штатно сохранить все далее используемые регистры.
//~С код

В асме так делается очень часто, в описании на IAR и на CAVR нашёл только __raw, но он не сохраняет регистры вообще.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fmdost
сообщение Jun 12 2007, 11:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



"Ваша ошибка в самом алгоритме, вам на нее =AVR= на сахаре намекал. Вам надо подготовительную часть кода выполнить не в начале, а в конце прерывания:"

Да Я же иак И ДЕЛАЮ!!!!!!!!!!! Просто эти 25 тактов сохранения в НАЧАЛЕ "__ interrupt" не дают погасить индикатор через tc_compa!!!
И получается мерцание на малой яркости.

"А что такой возможности в embedded средах нет, НЕВЕРЮ!
А зря."


А нафига они тогда нужны? =AVR= про грабли прав ? Эта вещь применяется ОЧЕНЬ часто, например:

push r16
in r16,SREG
push r16 //push SREG

sts r16,data
oit PORT,r16

;а дальше сохраняем всё что нужно далее
;получаем новый data то биш новую цифру для индикатора, благо не много, не в main же его!!!

pop ~~~ всё

reti

//за кого вы меня держите?

Сообщение отредактировал Т.Достоевский - Jun 12 2007, 11:36
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 12 2007, 12:46
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Т.Достоевский @ Jun 12 2007, 14:29) *
А нафига они тогда нужны? =AVR= про грабли прав ?
Не понял что такое "про грабли" - если вы имеете ввиду его фанатичную агитацию за асм, то нет. Но это отдельная тема и общаться об этом, а тем более с этим "божеством" я не имею желания. Поверьте, многими участниками этой конференции написано множество программ, и если у кого-то и возникала необходимость в подобных извращениях, то только не в таких простых задачах как динамическая индикация.
Цитата(Т.Достоевский @ Jun 12 2007, 14:29) *
Эта вещь применяется ОЧЕНЬ часто, например:
так и сделайте свое прерывание максимально коротким:
Код
__interrupt void UpdateRoutine()
{
    PORT = data;
}
Думаю что даже при отсутствии оптимизации получите искомый код с сохранением одного регистра.
Цитата(Т.Достоевский @ Jun 12 2007, 14:29) *
//за кого вы меня держите?
За человека, который задал вопрос, но в упор не слышит ответ что проблему надо решать иначе.
Много раз вам отвечали - нет, нельзя заставить компилятор сохранить лишь часть контекста до выполнения основной работы. Можно запретить сохранять контекст вообще, но тогда вам придется сохранять его самостоятельно когда захотите при помощи "обертки" на ассемблере и принять на себя всю ответственность за возможные "глюки".

Я не знаю что такое tc_compa и мне трудно понять, как постоянное смещение на N тактов начала обработки _каждого_ прерывания обновления индикатора относительно момента запуска контроллера может вызвать сбои индикации. Давайте вы нам расскажете более подробно обо всем алгоритме вашей индикации, а мы поможем вам изменить его так, чтобы без подобных затруднений все работало независимо от времени сохранения контекста.

P.S. и постарайтесь использовать общепринятую на этом форуме форму цитирования.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Т.Достоевский   __raw прерывания   Jun 11 2007, 22:07
- - rezident   Вам в пустыне уже все разжевали, теперь еще и тут ...   Jun 11 2007, 22:50
- - Т.Достоевский   Это СОВСЕМ не то что мне нужно, тк он НЕ СОХРАНИЛ ...   Jun 11 2007, 23:10
- - rezident   Опс! Ну да. Вы правы. Я забыл что это прерыван...   Jun 11 2007, 23:32
- - Т.Достоевский   Но тогда придётся сохранять юзанные регистры ручка...   Jun 11 2007, 23:39
|- - Сергей Борщ   Цитата(Т.Достоевский @ Jun 12 2007, 02:39...   Jun 12 2007, 06:34
|- - IgorKossak   Цитата(Т.Достоевский @ Jun 12 2007, 02:39...   Jun 12 2007, 07:37
||- - Сергей Борщ   Цитата(IgorKossak @ Jun 12 2007, 10:37) Э...   Jun 12 2007, 10:30
|- - singlskv   Цитата(Т.Достоевский @ Jun 12 2007, 03:39...   Jun 12 2007, 13:59
- - Т.Достоевский   Принцип такой tc0 это прерывание по переполнению t...   Jun 12 2007, 13:58
|- - Сергей Борщ   Цитата(Т.Достоевский @ Jun 12 2007, 16:58...   Jun 12 2007, 14:57
|- - singlskv   Цитата(Сергей Борщ @ Jun 12 2007, 18:57) ...   Jun 12 2007, 16:05
|- - Т.Достоевский   Цитата(singlskv @ Jun 12 2007, 20:05) Есл...   Jun 12 2007, 16:14
- - Т.Достоевский   Вы совеошенно правы прерывание мешает другое (адс)...   Jun 12 2007, 15:56
|- - singlskv   Цитата(Т.Достоевский @ Jun 12 2007, 19:56...   Jun 12 2007, 16:15
|- - Т.Достоевский   Цитата(singlskv @ Jun 12 2007, 20:15) jmp...   Jun 12 2007, 16:19
|- - singlskv   по Вашей ссылке прерывания ADC не увидел, дальше н...   Jun 12 2007, 16:36
- - Т.Достоевский   В том то и дело, в меге нету абсолютного jmp!....   Jun 12 2007, 16:48
- - slog   Ты и тут уже :-) __indirect_jump_to((unsigned lon...   Jun 12 2007, 17:11
|- - Т.Достоевский   Цитата(slog @ Jun 12 2007, 21:11) Ты и ту...   Jun 12 2007, 17:15
||- - singlskv   Цитата(Т.Достоевский @ Jun 12 2007, 21:15...   Jun 12 2007, 17:21
||- - rezident   Цитата(singlskv @ Jun 12 2007, 23:21) не....   Jun 12 2007, 19:57
|- - Т.Достоевский   Цитата(slog @ Jun 12 2007, 21:11) __indir...   Jun 12 2007, 20:14
|- - rezident   Цитата(Т.Достоевский @ Jun 13 2007, 02:14...   Jun 12 2007, 20:37
- - Т.Достоевский   __indirect_jump_to((unsigned long)&Имя_функции...   Jun 12 2007, 20:49
|- - Сергей Борщ   Цитата(Т.Достоевский @ Jun 12 2007, 23:49...   Jun 13 2007, 07:07
|- - Т.Достоевский   Цитата(Сергей Борщ @ Jun 13 2007, 11:07) ...   Jun 13 2007, 09:50
|- - IgorKossak   Цитата(Т.Достоевский @ Jun 13 2007, 12:50...   Jun 13 2007, 14:19
|- - Т.Достоевский   Цитата(IgorKossak @ Jun 13 2007, 18:19) Т...   Jun 13 2007, 17:02
|- - IgorKossak   Цитата(Т.Достоевский @ Jun 13 2007, 20:02...   Jun 13 2007, 18:21
|- - Т.Достоевский   Цитата(IgorKossak @ Jun 13 2007, 22:21) Н...   Jun 13 2007, 19:24
- - slog   Незнаю #pragma vector = TIMER0_OVF0_vect __interr...   Jun 13 2007, 04:03
- - Rst7   Делаю так обычно, ужос конечно, но что поделать: ...   Jun 13 2007, 08:12
- - SasaVitebsk   Извините, что я вмешиваюсь в столь лихо закрученну...   Jun 13 2007, 20:20
|- - Т.Достоевский   Цитата(SasaVitebsk @ Jun 14 2007, 00:20) ...   Jun 13 2007, 21:04
- - Rst7   Про недокументированные модификаторы для AVR поищи...   Jun 14 2007, 05:12
- - SasaVitebsk   В этом смысле платформы для микропроцессоров даже ...   Jun 14 2007, 17:44
|- - Dog Pawlowa   Цитата(SasaVitebsk @ Jun 14 2007, 20:44) ...   Jun 14 2007, 18:37
|- - Т.Достоевский   Цитата(SasaVitebsk @ Jun 14 2007, 21:44) ...   Jun 14 2007, 18:42
- - IgorKossak   Вот и славненько! На этой мажорной ноте предла...   Jun 14 2007, 21:04
- - Т.Достоевский   Цитата(IgorKossak @ Jun 15 2007, 01:04) В...   Jun 14 2007, 21:39


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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