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

 
 
> Как бы подправить код генерируемый AVRGCC для обработчика прерывания
RodionGork
сообщение Apr 9 2009, 10:55
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 239
Регистрация: 30-10-07
Из: Санкт-Петербург
Пользователь №: 31 866



Уважаемые товарищи!

В начало обработчика прерывания компилятор GCC вставляет мне примерно следующее:

380: 1f 92 push r1
382: 0f 92 push r0
384: 0f b6 in r0, 0x3f ; 63
386: 0f 92 push r0
388: 11 24 eor r1, r1

Ну в R0 как помню в мануале где-то видел, он всегда использует для SREG или что-то в этом духе, а в R1 хранит 0. Все неплохо.

Однако в данном случае, прерывание коротенькое и очень часто вызывается (ну примерно 500000 раз в секунду)... Контроллер на 8Мгц работает, кварц ему впаивать мне не хочется.

В связи с этим я б лучше обработчик хотел подправить... Дайте ссылку где почитать, как это для цомпилятора оформить... директивку и т.п. или примерчик. А то я GCC в первый раз в жизни (второй) решил для этих целей воспользоваться. и вот. ;-)

с уважением,
Родион
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RodionGork
сообщение Apr 9 2009, 18:14
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 239
Регистрация: 30-10-07
Из: Санкт-Петербург
Пользователь №: 31 866



Всем привет и большое спасибо!

По высказанным наводкам я достаточно быстро нашел и собственно подходящие доки в каталоге с GCC... Даже вспомнил, что когда-то неделю назад туда уже заглядывал... ;-)))

В общем, все хорошо стало, сейчас занят тем что усиленно думаю над уменьшением количества циклов, требуемых на выполнение несложных действий... (изменение состояния одной из двух линий инкрементного датчика с вытекающими отсюда последствиями в виде изменения координаты на единицу... сижу и "впихиваю" в 16 тактов... ;-)))

Конечно надо гну внимательнее изучать... в смысле нюансов. Ну да с вашей всехной помощью все одолеем... Спасибо! ;-)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 9 2009, 23:16
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(RodionGork @ Apr 9 2009, 21:14) *
изменение состояния одной из двух линий инкрементного датчика с вытекающими отсюда последствиями в виде изменения координаты на единицу... сижу и "впихиваю" в 16 тактов...

Тут кой-чего думалось:
http://electronix.ru/forum/index.php?showt...=60502&st=0
http://electronix.ru/forum/index.php?s=&am...st&p=565167

...но для 16-ти тактов - неплохо подумать бы о том, что очень многое зависит от цоколевки. Например повесить на линии на биты 0 и 4 порта, или 1 и 5, чтобы командой swap решать обозначенные в темах проблемы. Надеюсь, я тут развел полезный оффтоп.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 21:47
Рейтинг@Mail.ru


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