Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 18.03.2011, 15:02   #1
dimonomid
Member
 
Аватар для dimonomid
 
Регистрация: 17.06.2009
Возраст: 33
Сообщений: 98
Вес репутации: 1112/44
dimonomid has much to be proud ofdimonomid has much to be proud ofdimonomid has much to be proud ofdimonomid has much to be proud ofdimonomid has much to be proud ofdimonomid has much to be proud ofdimonomid has much to be proud ofdimonomid has much to be proud ofdimonomid has much to be proud of
Отправить сообщение для dimonomid с помощью ICQ
По умолчанию __attribute__((auto_psv)) для обычной функции (не прерывание)

Всем здрасьте.

Либо еще один баг компилятора (C30, v3.25), либо я, может быть, туплю. Подскажите, пожалуйста.

В бутлоадере лежат функции шифрования, использующие большие const таблицы, располагающиеся в program memory.

Очевидно, для использования этих функций из приложения, нужно объявить функции с атрибутом auto_psv.

Объявил - теперь при выходе из этой функции попадаем в _AddressError. Начал разбираться - выяснилось, что с атрибутом auto_psv при входе в функцию компилятор добавил следующее:

Код:
  
; сохраняем в стек значение PSVPAG
 02762  F80034     push.w 0x0034    
; пишем 0 в PSVPAG
 02764  200008     mov.w #0x0,w8
 02766  8801A8     mov.w w8,0x0034
А вот при выходе из функции нет "pop.w 0x0034"! Конечно, будет AddressError.

Причем, когда объявляются прерывания с атрибутами __attribute__((interrupt, auto_psv)) - все корректно, в конце прерывания есть pop. А для обычной функции - нет.

Добавил вручную перед выходом из функции:

Код:
    __asm("pop PSVPAG");
так все работает. И из бутлоадера, и из приложения. Красота! Только вот это будет работать до тех пор, пока в компиляторе не залатают очередную дыру.

Вопрос: я правильно все понимаю? Вообще обычные функции можно объявлять с атрибутом auto_psv? В доке написано про атрибут auto_psv только в комбинации с interrupt: "The auto_psv attribute, when combined with the interrupt attribute, will cause the compiler to generate additional code ...", или я не смог найти.
dimonomid вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39
бортовой ПК ВАЗовской классики gromovi Общетехнические вопросы 10 19.10.2010 22:28
подскажите, пожалуйста, по dsPIC33, не всегда запускается прерывание от Timer1 night_light Продукция MICROCHIP 3 08.09.2010 17:11
Помогите плиз, не срабатывает прерывание da4nik Вопросы начинающих 1 28.10.2008 17:33
Макимальная частота прерываний от TMR0 ANH Продукция MICROCHIP 114 05.04.2008 00:50


Часовой пояс GMT +3, время: 18:29.


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