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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Стратегия размещения функций Keil, Как определяется какая функция попадет в RAM
Golikov A.
сообщение Apr 27 2015, 07:27
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет!

В keil есть возможность нажав на файл исходников правой кнопкой и выбрав options, для Cortex процов задать регионы для секций Code/Const, Zero Init Data, Other Data

по умолчанию стоит default. И я был уверен что это для Code/Const - flash, а для остальных RAM. Так вот поглядел я карту памяти после компиляции и с удивлением обнаружил что достаточно большая часть функций размещены в RAM. Но не все, то есть получается что у кейла есть какая-то стратегия размещения функций? Кто нибудь, что нибудь знает про это?

Еще я обнаружил что кеил понаделал thumb код, хотя я думал по умолчанию будет ARM код, и только при желании оптимизации он будет что-то крутить. Или после появления thumb2 стало уже не можно пользоваться ARM кодом? Я понимаю что с точки зрения флеш ускорителей которые читают за 5 тактов проца 128 бит, лучше прочитать ~8 thumb инструкций (примерно потому что в thumb2 они бывают и 32 битные) чем 4 ARM инструкции, для этого преимущество отдано thumb коду?

Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 27 2015, 07:44
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Golikov A. @ Apr 27 2015, 11:27) *
Всем привет!

В keil есть возможность нажав на файл исходников правой кнопкой и выбрав options, для Cortex процов задать регионы для секций Code/Const, Zero Init Data, Other Data

по умолчанию стоит default. И я был уверен что это для Code/Const - flash, а для остальных RAM. Так вот поглядел я карту памяти после компиляции и с удивлением обнаружил что достаточно большая часть функций размещены в RAM. Но не все, то есть получается что у кейла есть какая-то стратегия размещения функций? Кто нибудь, что нибудь знает про это?

Еще я обнаружил что кеил понаделал thumb код, хотя я думал по умолчанию будет ARM код, и только при желании оптимизации он будет что-то крутить. Или после появления thumb2 стало уже не можно пользоваться ARM кодом? Я понимаю что с точки зрения флеш ускорителей которые читают за 5 тактов проца 128 бит, лучше прочитать ~8 thumb инструкций (примерно потому что в thumb2 они бывают и 32 битные) чем 4 ARM инструкции, для этого преимущество отдано thumb коду?


Маэстро, если речь идет о Cortex, то только Thumb-2. Даже если и 32разрядные всё равно Thumb. Никаких ARM.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 27 2015, 07:53
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Вот блин... всегда читал строчку из манула
Цитата
The Cortex-M3 offers many new features, including a Thumb-2 instruction set

считая что типа второй тумб вместо первого, и считал что это в добавок. И что-то даже не поглядел что АРМ набора вообще больше нету...
С этим разобрались, спасибо.

А про стратегию функций кейла кто знает где глянуть?
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 27 2015, 08:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Apr 27 2015, 10:53) *
А про стратегию функций кейла кто знает где глянуть?

Нету никакой стратегии. С настройками по умолчанию все функции идут в флеш. Ну а если начинаете что-то крутить - это уже на вашей совести.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 27 2015, 08:45
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Нету никакой стратегии. С настройками по умолчанию все функции идут в флеш. Ну а если начинаете что-то крутить - это уже на вашей совести.

А если не крутил, а половина функций на файлах которых стоит Code/Const - default оказались в РАМе, то что делать?

есть файл у которого ZI о other стоят в рам перенести, но код в дефолте, а функции из него все равно в РАМ попмали...

Какая то видать стратегия есть, причем в некоторых файлах часть функций во флеше осталась, а часть в РАМе.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 27 2015, 08:49
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



MAP-файл - в студию!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2015, 09:00
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(scifi @ Apr 27 2015, 11:49) *
MAP-файл - в студию!

И .scat тоже
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 27 2015, 09:02
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



и тип процессора. sm.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 27 2015, 11:22
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Lpc1768, scart по умолчанию, то есть какой кеил сам генерит. Мар сейчас не могу, но по нему фугкции лежат в раме с 2000... Ажреса.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2015, 11:28
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Golikov A. @ Apr 27 2015, 14:22) *
scart по умолчанию, то есть какой кеил сам генерит.

Все равно приложите, иначе концов не найти.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 27 2015, 12:56
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00010000 0x00010000  {   ; load region size_region
  ER_IROM1 0x00010000 0x00010000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10000000 0x00008000  { ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x2007D000 0x00007000  {
  MyMAC.o (+RO +ZI +RW)    
  FIFOModule.o (+RO)
   .ANY (+RW +ZI)
  }
}


вот такое вот... FIFOModule в свойствах стоит запихать его в RAM и он там.

Цитата
GetFIFODataSize 0x2007d5f9 Thumb Code 28 fifomodule.o(.text)
GetFIFOBufferSize 0x2007d615 Thumb Code 30 fifomodule.o(.text)
GetFIFOBufferEnd 0x2007d633 Thumb Code 16 fifomodule.o(.text)
GetFIFODataEnd 0x2007d643 Thumb Code 16 fifomodule.o(.text)


а вот для MyMAC - это езернетныймодуль, для него Code/Const стоит в дефолт, только данные и ZI в рам, а он тоже почему то хором попал в РАМ

Цитата
ENET_IRQHandler 0x2007d357 Thumb Code 198 mymac.o(.text)


я вижу что в скатере все его секции туда запхались, но вопрос какого лешего? Скатер генерится самим кейлом, то есть я его в папке открыл, в среде к нему даже доступа нет. Вот такие чудеса...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2015, 13:05
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Golikov A. @ Apr 27 2015, 15:56) *
я вижу что в скатере все его секции туда запхались, но вопрос какого лешего? Скатер генерится самим кейлом, то есть я его в папке открыл, в среде к нему даже доступа нет. Вот такие чудеса...

Вот поэтому и не стоит программировать "галочками" - чудес меньше будет.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 27 2015, 13:13
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(aaarrr @ Apr 27 2015, 16:05) *
Вот поэтому и не стоит программировать "галочками" - чудес меньше будет.

Предлагаете читать мануалы? Мануалы придумал трус! yeah.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2015, 13:28
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(scifi @ Apr 27 2015, 16:13) *
Предлагаете читать мануалы? Мануалы придумал трус! yeah.gif

Читать даже не предлагаю, но открыть и сделать Ctrl-F всегда можно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 27 2015, 13:31
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Вот поэтому и не стоит программировать "галочками" - чудес меньше будет.

Я только За, но многим удобнее галочками (не один же я работаю на проектом)... Справедливости ради надо заметить что хуже работать не стало sm.gif, то есть функциональность сохранилась...

Цитата
Предлагаете читать мануалы? Мануалы придумал трус!

Вы тут ни разу неправы. Если у вас среда типа какоса или IAR, то там есть явно представленный скатер файл, который заполняется руками или генерится визардом. А если у вас keil, то править руками скатер файл - это бороться с ветряными мельницами, он же будет его подменять. Да там действительно можно снять кучу галочек и перейти на полностью ручное управление, но изначально в галочной системе есть какой-то workflow который можно, а современных реалиях и нужно использовать, потому что сокращает время.

Так что наезд в данном случае не принимается, мануалы тут не причем.

Цитата
Читать даже не предлагаю, но открыть и сделать Ctrl-F всегда можно.

вы тоже не правы, потом что в мануале то как раз про галочки расписано как должно быть, а по факту получается иначе. Может в кейле есть еще какие-то способы дать указания разметке, про которые я не знаю....

Но великие читатели мануалов могут снизайти и указать ничтожному где про это написано...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 21:55
Рейтинг@Mail.ru


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