Искуственное прерывание

Mar 15, 2007 21 Replies

Hello, Alex!

Saturday Mar 24, 2007, 15:14. Alex Mogilnikov -> Dimmy Timchenko.

AM>>> int_handler(); DT>> Hе вполне корректно.

AM> Тогда напомни, пожалуйста, в чем отличие обычного call от "настоящего" AM> вызова прерывания? Кроме автоматического запрета прерываний в последнем AM> случае? Я точно помню, что в MCS51 я таким приемом пользовался, мне AM> кажется, и в avr не должно быть проблем...

DT>> Лучше так:

DT>> #pragma vector=... DT>> __interrupt void Int_Handler() DT>> { DT>> actual_handler(); DT>> } DT>> ...

DT>> actual_handler();

AM> Разные прологи/эпилоги? А чем лучше-то?

WinAVR не захотел кушать CALL :-( не пpедусмотpено в его инлайн асемблеpе.

Goodbye, Alex! AKA Taraserker. Чтобы увеличить пенсии, мы должны увеличить pождаемость. (С) Ю.Тимошенко

Привет Taras!

29 Mar 07 07:12, Taras Rivchenko писал Alex Mogilnikov:

TR> WinAVR не захотел кушать CALL :-(

Что значит "кушать CALL"? Компилятор вообще-то должен был его сгенерить, а не кушать. Это же ассемблерная инструкция!

TR> не пpедусмотpено в его инлайн асемблеpе.

Что ты понимаешь под "инлайновым ассемблером WinAVR"? Если речь об операторе asm, то он ничего не ассемблирует, а тупо помещает переданную ему строку в выходной ассемблерный текст. Разве что может выполнить подстановку имен регистров, но ничего более. Можно написать любую ерунду, типа asm("blablabla");, и это будет скушано без ошибок. "blablabla" будет переписана в ассемблерный файл "как есть".

Покажи, как и что ты пытался сделать, и что не получилось...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Я удалю твою жажду. Без возможности восстановления.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required