Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выполнение всей или части программы из RAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sonycman
Имеется IDE Keil uVision 3.50 с компилятором RV.
Подскажите, пожалуйста, как заставить компилятор/линкер перебрасывать часть кода (или весь) в RAM и выполнять его уже оттуда (проц AT91SAM7S256).
Попробовал с помощью Scatter-loading Description Files, но в симуляторе при переброске загрузчиком кода в RAM идут ошибки *** error 65: access violation at 0x00200000 : no 'write' permission.
Может, где-то можно найти пример кода под RV компилятор?

В книге "Микроконтроллеры ARM7 семейства LPC2000 компании Philips" все примеры под компилятор CARM, и там всё просто - достаточно добавить к нужной функции префикс __RAM, но с RV компилятором такое не проходит sad.gif
SpiritDance
А почему Вы вдруг решили что в эмуляторе это будет работать? Используйте железо, все должно работать.
sonycman
Поискал в сети, и вот интересно: для объявления функции как исполняемой из RAM в IAR, например, есть преффикс __ramfunc, в CARM (который больше не поддерживается) - __ram, а в навороченном RV ничего такого нет?
Может зря я Keil uVision качал?
Leen
Попробовал сделать простенький проект, с AT91SAM7S256. Те же Фаберже - стартуп.с выдает ошибку 65. вызывает ее вот эта строчка:
0x000081C0 E8AC09C0 STMIA R12!,{R6-R8,R11}
Она сохраняет регистры 6-8 и 11 по адресув врегистре 12 (насколько я понял). А R12 = 0x10!!!!
смотрим далее (в startup.s)


AREA RESET, CODE, READONLY
...
...

Vectors LDR PC,Reset_Addr
...

т.е. судя по всему, где-то надо компилеру объяснить, чтобы он не пихал данные в область кода. Вроде это можно сделать в свойствах SourceGroup, вкладка Properties. Попробуйте.
VAI
полистал экзамплы, наткнулся на
".....\Keil\ARM\RV30\Examples\RAM_Function\"
sonycman
Цитата(VAI @ Jan 27 2007, 11:46) *
полистал экзамплы, наткнулся на
".....\Keil\ARM\RV30\Examples\RAM_Function\"


Да, спасибо, меня уже тоже носом ткнули smile.gif

А чтобы симулятор не ругался и не выдавал ошибку 65, надо подключить к симулятору файл (Options for Target->Debug: Initialization File), например, с таким содержимым: MAP 0x00200000, 0x0020ffff READ WRITE EXEC
То есть мы разрешаем любой доступ к RAM памяти.
В реальной железке всё будет работать и без этого, конечно smile.gif
AlexandrY
А вот это не факт, что все будет работать.
Симулятор в Keil очень примитивный.
При выполнении из RAM в ARM-ах могут такие чудеса покатить, что проблема с мапингом в симуляторе цветочками покажется.
Если будете пробовать разместить в RAM и обработчики прерываний и основной код в THUMB режиме, то сообщите как получилось. Есть подозрения на кривизну арбитража на AHB шине.

Цитата(sonycman @ Jan 27 2007, 15:55) *
Цитата(VAI @ Jan 27 2007, 11:46) *

полистал экзамплы, наткнулся на
".....\Keil\ARM\RV30\Examples\RAM_Function\"


Да, спасибо, меня уже тоже носом ткнули smile.gif

А чтобы симулятор не ругался и не выдавал ошибку 65, надо подключить к симулятору файл (Options for Target->Debug: Initialization File), например, с таким содержимым: MAP 0x00200000, 0x0020ffff READ WRITE EXEC
То есть мы разрешаем любой доступ к RAM памяти.
В реальной железке всё будет работать и без этого, конечно smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.