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

 
 
 
Reply to this topicStart new topic
> Функции в ОЗУ PIC32, Подводные грабли
Turnaev Sergey
сообщение Dec 24 2013, 14:20
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 562
Регистрация: 25-07-06
Из: Зеленоград, Новосибирск
Пользователь №: 19 088



Пару месяцев ковыряю PIC32 и MPLAB X.

Хочу использовать функции в RAM. Процедура стандартная, примеры такого есть, однако существует серьёзная скрытая проблема, об обходе которой пока нигде нет ответа.

Суть проблемы в том, что из озушной функции не удаётся вызвать функцию исполняемую во Flash памяти.
Казалось бы логично разместить все вызываемые оттуда функции в ОЗУ, но к сожалению не удаётся.
Например функция divdi3, которая является встроенной в компилятор, не имеет в явном виде прототипа, и разместить её в озу не получается.

Вот пример от микрочипа, который работает:
Код
long __ramfunc__ FunctionInRAMCallableFromRAMOnly(long a);

long FunctionInRAMCallableFromRAMOnly(long a)
{
    long B;

    B = B/a;

    return ((long)B);
}


А тут проводим над ним простейшее изменение, и компилятор начинает ругаться что не может вызвать divdi3:
Код
long __ramfunc__ FunctionInRAMCallableFromRAMOnly(long a);

long FunctionInRAMCallableFromRAMOnly(long a)
{
    long long B;

    B = B/a;

    return ((long)B);
}


Видел несколько тем на форуме микрочипа по этому вопросу, однако ответов как решить эту проблему никто не дал.

Очевидно есть два пути обойти этот косяк:
Разместить функцию divdi3 в ОЗУ;
Научить компилятор вызывать функции из Flash.

Кто что может подсказать по решению данной проблемы?

P.S. Memory Prefetch конечно ускоряет флешку, но около 30% всётаки проигрывает озушным функциям на максимальной частоте.


--------------------
"Отсутствие вашей судимости - это не ваша заслуга, а наша недоработка."
Ф.Дзержинский.
Go to the top of the page
 
+Quote Post

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

 


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


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