Перейти к содержанию
    

Стратегия размещения функций Keil

Всем привет!

 

В 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 коду?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет!

 

В 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот блин... всегда читал строчку из манула

The Cortex-M3 offers many new features, including a Thumb-2 instruction set

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

С этим разобрались, спасибо.

 

А про стратегию функций кейла кто знает где глянуть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А про стратегию функций кейла кто знает где глянуть?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

Какая то видать стратегия есть, причем в некоторых файлах часть функций во флеше осталась, а часть в РАМе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Lpc1768, scart по умолчанию, то есть какой кеил сам генерит. Мар сейчас не могу, но по нему фугкции лежат в раме с 2000... Ажреса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

scart по умолчанию, то есть какой кеил сам генерит.

Все равно приложите, иначе концов не найти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

; *************************************************************
; *** 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)

 

я вижу что в скатере все его секции туда запхались, но вопрос какого лешего? Скатер генерится самим кейлом, то есть я его в папке открыл, в среде к нему даже доступа нет. Вот такие чудеса...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я вижу что в скатере все его секции туда запхались, но вопрос какого лешего? Скатер генерится самим кейлом, то есть я его в папке открыл, в среде к нему даже доступа нет. Вот такие чудеса...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

 

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

 

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

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

 

Но великие читатели мануалов могут снизайти и указать ничтожному где про это написано...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...