Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 25.11.2007, 12:50  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от tempora
1.Не объявляй функцию обработчиком прерывания, или
2.Вставь в функцию-обработчик прерывания ассемблерную инструкцию ret

В любом случае придётся извращаться на уровне встраивания ассемблерных инструкций в сишный код, а это, для такой странной задачи, не будет гладко - одно неверное движение, одна модификация сишного исходника без тщательной проверки промежуточного ассемблерного кода - и ты по уши в эмм... в загадках относительно причин зависона.
Скорее всего, ты идёшь неверным путём. Лучше объясни чего ты хочешь добиться - наверняка есть легальные способы получить нужный результат.
1. Не обьявлять функцию обработчиком прерывания, а как ее тогда обьявлять?
2. Такой способ работать не будет. Вот пример из одной программы:
Код:
;     690 interrupt [TIM1_COMPA] void timer1_compa_isr(void)
;     691 {
_timer1_compa_isr:
	CALL SUBOPT_0x1D
;     692 TCCR1B=0;
	CALL SUBOPT_0x1E
;     693 TCNT1=0;
;     694 TCCR2=7;
	LDI  R30,LOW(7)
	OUT  0x25,R30
;     695 if (f1) f1test();
	LDS  R30,_f1
	CPI  R30,0
	BREQ _0xD5
	CALL _f1test
;     696    else if (f2) f2test();
	RJMP _0xD6
_0xD5:
	LDS  R30,_f2
	CPI  R30,0
	BREQ _0xD7
	CALL _f2test
;     697 #asm("ret");
_0xD7:
_0xD6:
	ret
;     698 }
	RJMP _0x11F
а по адресу _0x11F
Код:
_0x11F:
	LD   R30,Y+
	OUT  SREG,R30
	LD   R31,Y+
	LD   R30,Y+
	LD   R27,Y+
	LD   R26,Y+
	LD   R25,Y+
	LD   R24,Y+
	LD   R23,Y+
	LD   R22,Y+
	LD   R15,Y+
	LD   R1,Y+
	LD   R0,Y+
	RETI
Тобиш если выйду из прерывания досрочно, то значения регистров будут потеряны.
Пока конкретной задачи нет. Просто интересен этот вопрос. Когда писал на асме в этом плане было проще, хочу заканчиваю прерывание командой ret , а хочу reti...
Реклама:
dimonbest вне форума  
Непрочитано 25.11.2007, 17:24  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Мне кажется что придется скриптик писать который подправит ASM и затем ассемблирование запустит.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 25.11.2007, 18:14  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от avr123-nm-ru
Мне кажется что придется скриптик писать который подправит ASM и затем ассемблирование запустит.
Не думаю что часто будет необходимость выходить из прерывания с запрещенными прерываниями. В этих редких случаях придется вручную асм файл править. Вариантов получается нет!
dimonbest вне форума  
Непрочитано 25.11.2007, 18:38  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от dimonbest
Сообщение от avr123-nm-ru
Мне кажется что придется скриптик писать который подправит ASM и затем ассемблирование запустит.
Не думаю что часто будет необходимость выходить из прерывания с запрещенными прерываниями. В этих редких случаях придется вручную асм файл править.
Редко НО МНОГОКРАТНО !!! Ведь отладка бывает обычно.

Задолбаешся каждый раз после правки проги ручками то править и аасемблировать ИМХО.

А в CVAVR можно после компиляции выполнить указаную пользователем прогу.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 25.11.2007, 18:40  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Автору ИМХО нужно предусмотреть какой то "ключик" после обявления функции позволяющий выходить по RET.

Ключь RET будет в самы раз.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 25.11.2007, 21:09  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от dimonbest
Такой способ работать не будет.
Ты о котором, из двух, названных мной?
Сообщение от dimonbest
1. Не обьявлять функцию обработчиком прерывания, а как ее тогда обьявлять?
Разумеется, как void function(void), как же ещё?
Сообщение от dimonbest
... если выйду из прерывания досрочно, то значения регистров будут потеряны.
Если выходить будешь ты, то да - будут, а в других случаях необязательно.
Сообщение от dimonbest
Пока конкретной задачи нет. Просто интересен этот вопрос.
К сожалению, мои подозрения оправдались.
tempora вне форума  
Непрочитано 26.11.2007, 22:30  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Работать не будет второй случай, причину по которой не будет я обьяснил и подкрепил кодом!
Если обявить как функцию void function(void), то это не будет прерыванием, а в моем первоначальном вопросе нужно выйти из прерывания а не из функции!!!
dimonbest вне форума  
Непрочитано 27.11.2007, 00:47  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от dimonbest
Работать не будет второй случай, причину по которой не будет я обьяснил и подкрепил кодом!
Подкрепиил?! От, оно каак!... "Ты просто не умеешь их готовить". Причем, ни одним из приведенных способов.
Почитай на досуге про Non-local Jump Functions и про прагму savereg. Кстати, как правило, рассказы про прагму savereg иллюстрируют примерами именно подмены своим кодом стандартного кода обработчика прерывания. Эту моду, похоже, ещё Борланд ввёл...
tempora вне форума  
Непрочитано 27.11.2007, 11:10  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от tempora
Подкрепиил?! От, оно каак!... "Ты просто не умеешь их готовить". Причем, ни одним из приведенных способов.
Почитай на досуге про Non-local Jump Functions и про прагму savereg. Кстати, как правило, рассказы про прагму savereg иллюстрируют примерами именно подмены своим кодом стандартного кода обработчика прерывания. Эту моду, похоже, ещё Борланд ввёл...
Про Non-local Jump Functions почитаю, еще не разбирался.
А по поводу второго способа:
даже если я запрещу сохранение регистров директивой savereg, то тогда программа будет работать некорректно. Если основная программа использует определенные регистры, и эти же саммые регистры будут использованы в прерывании, то после выхода из прерывания значения будут иными...
К тому же без директивы сохраняются не только регисты общего назначения, но и SREG.
dimonbest вне форума  
Непрочитано 27.11.2007, 13:03  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от dimonbest
А по поводу второго способа:...
Да ты читай, читай... Не спорь.
tempora вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CVAVR while и таймер kr11507 Микроконтроллеры, АЦП, память и т.д 10 13.12.2008 21:29
Програмирование портов Infenon С167 vadimvarn Микроконтроллеры, АЦП, память и т.д 1 01.11.2008 02:31
Програмирование по SPI EKuzmich Микроконтроллеры, АЦП, память и т.д 2 09.07.2008 21:35
програмирование АТmega32??? TimaON Микроконтроллеры, АЦП, память и т.д 0 06.05.2008 14:41
Програмирование attiny2313 Gorgic Микроконтроллеры, АЦП, память и т.д 1 15.12.2007 00:00


Часовой пояс GMT +4, время: 11:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot