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

 
 
> Как скомпилировать сишный код в RAM?
AndyDev
сообщение Nov 23 2012, 17:28
Сообщение #1


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

Группа: Участник
Сообщений: 163
Регистрация: 17-11-07
Пользователь №: 32 406



Подскажите плиз, как под Keil'ом скомпилировать сишный код в RAM?
На сколько я понимаю, если такое возможно, то код из ROM должен при старте каким-то загрузчиком быть перенесен в RAM.

Зачем это нужно? Очень просто - из ОЗУ код выполняется гораздо быстрее, чем из медленной Flash. И чем выше тактовая частота, тем эта разность заметнее.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Nov 24 2012, 08:56
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (AndyDev @ Nov 24 2012, 02:28) *
Подскажите плиз, как под Keil'ом скомпилировать сишный код в RAM?

Да. Настройки линкера - Ваша цель rolleyes.gif

QUOTE (Alexey Belyaev @ Nov 24 2012, 15:06) *
Раз уж такая тема пошла. подскажите, а возможно загрузить в память самостоятельную прошивку и полностью перейти на нее?

Да. У меня так работает мой загрузчик. При старте МК получает ip от DHCP сервера (можно и статический), и представляется FTP сервером. Затем, я "захожу" туда Total Commander'ом и "заливаю" бинарник. Чтобы сообщить загрузчику, что код можно исполнять, нужно "дозалить" файл с именем done. Полуив его, загрузчик проверяет, загружен ли до этого файл *.bin, и если да, то передает ему управление. Если нет - в моем случае ничего не делает. Ждет)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AndyDev
сообщение Nov 24 2012, 10:38
Сообщение #3


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

Группа: Участник
Сообщений: 163
Регистрация: 17-11-07
Пользователь №: 32 406



Подскажите тогда заодно, как в Кейле передаются параметеры в функцию, написанную на асме? Через стек, регистры? Какие регистры можно в этой функции использовать? Где вообще почитать инфу о соглашении на счет регистров в подобном случае?

Цитата(Allregia @ Nov 24 2012, 01:52) *
В Кейле - вынести эти функции в отдельный файл, и в опциях для этого файла указать размещение в ОЗУ.
В IAR вроде можно просто перед функцией написать __ramfunction или как-то так.


Не всегда. Например для STM32F407 -"Z", это практически ничего не дает.


Что-то я не нашел, где устанавливается размещение ОЗУ для файла.

У меня NXP1114, у него флешка слабенькая, на 50Мгц много тормозов дает.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Nov 24 2012, 11:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(AndyDev @ Nov 24 2012, 12:38) *
У меня NXP1114, у него флешка слабенькая, на 50Мгц много тормозов дает.

Какой выигрыш получится от переноса функций в ОЗУ? Есть такие данные?
Go to the top of the page
 
+Quote Post
AndyDev
сообщение Nov 24 2012, 11:52
Сообщение #5


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

Группа: Участник
Сообщений: 163
Регистрация: 17-11-07
Пользователь №: 32 406



Цитата(_Артём_ @ Nov 24 2012, 15:47) *
Какой выигрыш получится от переноса функций в ОЗУ? Есть такие данные?

Зависит от конкретного микроконтроллера.
Если, допустим, у вас от 20-30Мгц задержка на доступ во флеш 1, от 30 до 40 - 2, 40 до 50 - 3,
то на каждую считанную команду вместо одного такта будет тратиться 2, 3 и 4, соответственно. Сами прикиньте.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 24 2012, 20:15
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AndyDev @ Nov 24 2012, 13:52) *
Сами прикиньте.
Шина к флешке у него, насколько помню, 32-битная, команды 16-битные, значит за один цикл чтения вынимаются 2 команды. На переходах это, конечно, не спасает, но код состоит не из одних переходов. Далеко не все команды исполняются за 1 такт, значит во время их исполнения достаточно времени для чтения следующей команды. Прикидка показывает, что не все так страшно. Поэтому вас и спрашивали о реальных данных.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AndyDev
сообщение Nov 25 2012, 11:34
Сообщение #7


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

Группа: Участник
Сообщений: 163
Регистрация: 17-11-07
Пользователь №: 32 406



Цитата(Сергей Борщ @ Nov 25 2012, 00:15) *
Прикидка показывает, что не все так страшно. Поэтому вас и спрашивали о реальных данных.

Замеряю - напишу.
Go to the top of the page
 
+Quote Post
AndyDev
сообщение Nov 26 2012, 13:55
Сообщение #8


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

Группа: Участник
Сообщений: 163
Регистрация: 17-11-07
Пользователь №: 32 406



Цитата(AndyDev @ Nov 25 2012, 15:34) *
Замеряю - напишу.

Перенес несколько критичных к скорости функций в ОЗУ, и вся программа стала работать примерно на 50-60% быстрее.
А сами критичные функции, как-то ДПФ и т.д. - ускорились почти в два раза.

Микроконтроллер LPC1114, тактовая частота 48МГц. Делитель тактовой частоты FlashClock = 3 (как и положено для скоростей от 40 до 50МГц).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 26 2012, 21:56
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AndyDev @ Nov 26 2012, 15:55) *
А сами критичные функции, как-то ДПФ и т.д. - ускорились почти в два раза.
Спасибо, полезная информация.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AndyDev   Как скомпилировать сишный код в RAM?   Nov 23 2012, 17:28
- - Allregia   Цитата(AndyDev @ Nov 23 2012, 19:28) Подс...   Nov 23 2012, 21:52
- - Alexey Belyaev   Раз уж такая тема пошла. подскажите, а возможно за...   Nov 24 2012, 06:06
|- - Сергей Борщ   QUOTE (Alexey Belyaev @ Nov 24 2012, 08:0...   Nov 24 2012, 08:27
||- - Allregia   Цитата(AndyDev @ Nov 24 2012, 12:38) Что-...   Nov 24 2012, 11:11
||- - SyncLair   Цитата(AndyDev @ Nov 24 2012, 14:38) Подс...   Nov 24 2012, 11:12
||- - _Артём_   Цитата(AndyDev @ Nov 26 2012, 15:55) Пере...   Nov 26 2012, 22:50
||- - AndyDev   Цитата(_Артём_ @ Nov 27 2012, 02:50) Про ...   Nov 27 2012, 22:40
|- - SyncLair   Цитата(haker_fox @ Nov 24 2012, 12:56) Да...   Nov 24 2012, 11:07
|- - haker_fox   QUOTE (SyncLair @ Nov 24 2012, 20:07) Изв...   Nov 24 2012, 11:35
- - Вячик13   Как поместить при компилировании, допустим, подпро...   Nov 29 2012, 06:16
|- - Сергей Борщ   QUOTE (Вячик13 @ Nov 29 2012, 08:16) как ...   Nov 29 2012, 07:03
- - редактор   За это отвечает стартап файл. Изначально тело подп...   Nov 29 2012, 07:05
- - Вячик13   Спасибо, понял.   Nov 29 2012, 07:26
- - AndyDev   Не совсем по теме, но в том же проекте. Использую...   Feb 12 2013, 18:10
- - -JonnS-   ЦитатаВ стандартных типа stdio и stdlib ее нету. s...   Feb 12 2013, 18:51
- - AndyDev   Цитата(-JonnS- @ Feb 12 2013, 22...   Feb 13 2013, 09:18
- - Lotor   Цитата(AndyDev @ Feb 13 2013, 13:18) Боль...   Feb 13 2013, 09:42
- - AndyDev   Цитата(Lotor @ Feb 13 2013, 13:42) Можно....   Feb 13 2013, 09:46
- - Lotor   Цитата(AndyDev @ Feb 13 2013, 13:46) У ме...   Feb 13 2013, 09:52
- - AndyDev   Цитата(Lotor @ Feb 13 2013, 13:52) Как-то...   Feb 13 2013, 12:03


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

 


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


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