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

 
 
> ?INTERRUPT_ENTER_SP - ЧТО ЭТО?, ?INTERRUPT_ENTER_SP - ЧТО ЭТО???
MihailS
сообщение Feb 20 2009, 08:12
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 28-01-08
Из: Красноярск
Пользователь №: 34 493



Пишу программу на С для ADuC831. В коде программы при входе в функцию обработки прерывания обнаруживаю
LCALL ?INTERRUPT_ENTER_SP
В коде пресутствует эта функция, она долго и мучительно сохраняет чего-то в стек.
Подскажите знающие люди, где на неё информацию достать (откуда взялась, зачем так а не так работает)?
Мне она очень мешает, поскольку очень сильно увеличивает время обработки подпрограммы.
Мне нужно как-то это время сократить.
Заранее благодарен!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MihailS
сообщение Feb 27 2009, 04:29
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 28-01-08
Из: Красноярск
Пользователь №: 34 493



"Контекст прерывания" - что вы имеете ввиду? Значения рабочих регистров что-ли. Поясните пожалуйста.

Keil использовать не буду - я уже документации по IAR начитался и читаю дальше, а всё бросать как-то не хочется (даже если вы и правы).

Встречал в документации про переключение банков регистров, но поскольку не владею термином "контекст прерывания", не могу понять ваш совет. МОжно пожалуйста объяснить подробрее.

Далее.

Исходник на функцию сохранения регистров в стек есть в IAR, смотрел, много думал...
Вообщем включил оптимизацию - он выкинул вызов этой функции, просто push 9 регистров, и всё в этой часте программы заработало.
НО! В другой части он выкинул немаловажный кусок и программе пришёл конец...
Подскажите чем компилятор руководствуется вызывать или не вызывать функцию сохранения регистров в стек?
Может есть способ как-то на него влиять.
Пока буду пробовать разобраться с переключением банков регистров.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 27 2009, 08:10
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Наверняка Ваш немаловажный кусок, который компилятор оптимизировал (причём совершенно правильно), был написан неверно.
Вернее не сам кусок кода с ошибкой, а переменные, которые использовались в этой части программы были не волатильными.
Вы про volatile вообще слышали? Если нет, то поищите по форуму - для Вас это будет решением.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 08:26
Рейтинг@Mail.ru


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