Пару месяцев ковыряю 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% всётаки проигрывает озушным функциям на максимальной частоте.