Для пользующихся RVCC c Keilом
Засунуть функции в ОЗУ можно с малейшими усилиями. Пишу, т.к. не я первый пролетел на незнании этой фичи.
Вариант 1:
- в свойствах проекта на вкладке target указываем начало и длину участка памяти для размещения функций в ОЗУ. Для SAM7S256 это 0x208000 0x2000 (так у меня), указывается в RAM1.
- в свойствах файла, функции которого должны быть в ОЗУ указываем для размещения кода регион RAM1.
Вариант 2:
использование scatter-файла такого вида:
Код
FLASH_LOAD 0x100000
{
EXE +0 0x40000
{
*.o (RESET, +FIRST)
* (+RO)
}
DATA 0x200000 0x8000
{
* (+RW +ZI)
}
ISR_EXE 0x208000 0x2000
{
interrupt.o (+RO)
}
}
Здесь:
0x100000 - начало флеша контроллера,
+0 0x40000 - писать код и константы с начала флеша до 0x140000,
0x200000 - начало памяти данных, 0x8000 - длина памяти данных,
0x208000 0x2000 - начиная с адреса 0x208000 поместить функции из модуля interrupt. Длина до 0x2000.
Если надо засунуть еще что-то - добавляем в последнюю секцию строки вида
file1.o (+RO)
file2.o (+RO)
...
filen.o (+RO)