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

 
 
> Keil C51 прерывания
AndreyS
сообщение Aug 30 2012, 15:07
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276



Добрый день.

Подскажите пожалуйста, как заставить Keil (проект на Си) не укладывать сохранение в стек регистров и соответственно не восстанавливать их из стека?

Пояснение:
Объявляю функцию с параметром interrupt 0 и в теле ее вызываю проверку с битовой переменной, если переменная возведена, то делаю прямой переход (через #pragma asm) на требуемый внешний обработчик. Если нет, то хочу отсюда выйти. В конце внешнего обработчика конечно стоит RETI (средствами Си, потому что этот внешний обработчик есть другая прошивка) и по нему прерывание нормально завершится. Но вот при такой конструкции Кеил упорно обрамляет вызов прерывания сохранением полного набора регистров в стек и соответственно его полного восставноления. Как это обрамление отключить??


--------------------
Удачи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
редактор
сообщение Sep 5 2012, 05:54
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Можно обмануть всех.
Допустим в МК используется 5 аппаратных векторов прерывания (IRQ0...IRQ4)
Тогда можно объявить функцию обработки прерывания по вектору IRQ5
Код
void IRQ_FUNC(void) interrupt 5 // using N при необходимости
{...}

Причем аппаратно на этот вектор никогда перехода не будет.
В ассемблере передавать управление ей. Только учесть - по адресу данного вектора (0x3 + IRQ_N * 7 (в нашем случа IRQ_N это 5)) будет располагаться команда перехода.
Keil сформирует сохранение и восстановление ИСПОЛЬЗУЕМЫХ ДАННОЙ ФУНКЦИЕЙ РЕГИСТРОВ.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post



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

 


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


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