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

 
 
> Выполнение всей или части программы из RAM, Keil uVision и RVCC
sonycman
сообщение Jan 26 2007, 12:52
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Имеется 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

Сообщение отредактировал sonycman - Jan 26 2007, 12:53
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
SpiritDance
сообщение Jan 26 2007, 13:09
Сообщение #2


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



А почему Вы вдруг решили что в эмуляторе это будет работать? Используйте железо, все должно работать.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 26 2007, 13:15
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Поискал в сети, и вот интересно: для объявления функции как исполняемой из RAM в IAR, например, есть преффикс __ramfunc, в CARM (который больше не поддерживается) - __ram, а в навороченном RV ничего такого нет?
Может зря я Keil uVision качал?
Go to the top of the page
 
+Quote Post
Leen
сообщение Jan 27 2007, 04:48
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



Попробовал сделать простенький проект, с 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. Попробуйте.
Go to the top of the page
 
+Quote Post
VAI
сообщение Jan 27 2007, 10:46
Сообщение #5


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



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


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 27 2007, 14:25
Сообщение #6


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(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

Сообщение отредактировал sonycman - Jan 27 2007, 14:30
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 27 2007, 19:26
Сообщение #7


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



А вот это не факт, что все будет работать.
Симулятор в 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
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 04:43
Рейтинг@Mail.ru


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