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

 
 
> 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
Ответов
AndreyS
сообщение Sep 4 2012, 07:58
Сообщение #2


Местный
***

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



Добрый день всем.

Спасибо Всем за ответы.
Значит оставлю все определения в стартапе на асме.

Вот только как заставить Кеил для процедур сохранить используемые регистры в стек?

А то он в моих процедурах (которые на самом деле прерывания) не сохранил в стек ничего. Видимо думает что процедура не вызывается под другой (и время жизни регистра A и R7 маленькое).
Пробовал вызвать процедуру через указатель, в надежде что Кеил вставит сохранение регистров. Ничего подобного не произошло.

Пока добавил в макрос определения прерывания полное сохранение в стек регистров и их восстановление.

Просто таблица прерываний бутзагрузчика стала большой.


--------------------
Удачи.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 4 2012, 09:15
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(AndreyS @ Sep 4 2012, 11:58) *
Вот только как заставить Кеил для процедур сохранить используемые регистры в стек?

Вероятно, никак, поскольку:
Цитата
Assembler functions may change all register contents in the currently selected register bank as well as the contents of the ACC, B, DPTR, and PSW registers. When invoking a C function from assembly, assume that these registers are destroyed by the C function that is called.

Go to the top of the page
 
+Quote Post



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

 


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


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