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

 
 
> Как скомпилировать сишный код в 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, 22:50
Сообщение #9


Гуру
******

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



Цитата(AndyDev @ Nov 26 2012, 15:55) *
Перенес несколько критичных к скорости функций в ОЗУ, и вся программа стала работать примерно на 50-60% быстрее.

Интересно, спасибо.

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

Попробовал потестить тем что под руку попалось: 50 не 50 - видимо зависит от функций.
Получилось - 20770 циклов из flash и 16600 циклов из ОЗУ - быстрей на 25 %,
CM0 приблизился к CM3 из flash на той же функции. sm.gif
Если конечно чего не попутал, что тоже возможно на ночь глядя.
Тактовая на тестовом проекте была вроде 48, но это наверное не важно, если wait-стайтов 3?.

PS. На каких бы функциях потестить и чтобы со сборкой функций не париться - что есть такое неэкзотическое.

Цитата(AndyDev @ Nov 26 2012, 15:55) *
Делитель тактовой частоты FlashClock = 3 .

Про FlashClock DS ничего не знает. FLASHTIM=2?
Могут быть ещё настройки влияющие на скорость выполнения из флеш у lpc11xx?
Go to the top of the page
 
+Quote Post
AndyDev
сообщение Nov 27 2012, 22:40
Сообщение #10


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

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



Цитата(_Артём_ @ Nov 27 2012, 02:50) *
Про FlashClock DS ничего не знает. FLASHTIM=2?
Могут быть ещё настройки влияющие на скорость выполнения из флеш у lpc11xx?


Не знаю, что такое DS )
Думаю, что больше настроек нет.

Устанавливаю так:

Код
      LPC_FLASH->FLASHCFG = (LPC_FLASH->FLASHCFG & 0xFFFFFFFC) | 0x2;    // FlashClock = 3 (установить делитель
                                                        // тактовой частоты для FlashMemory равным 3,
                                                        // для частот тактирования 40..50МГц
                                                        // (по умолчанию при сбросе так же)

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
||- - Сергей Борщ   QUOTE (AndyDev @ Nov 26 2012, 15:55) А са...   Nov 26 2012, 21:56
|- - 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 Текстовая версия Сейчас: 22nd July 2025 - 00:11
Рейтинг@Mail.ru


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