Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Размер HEX у Keil
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
smk
Пытаюсь осваивать LPC2101. Скачал оценочную версию Keil с их сайта. Написал пробный код - симулируется хорошо. При компиляции с оптимизацией О1 получил: Program Size: Code=1384 RO-data=16416 RW-data=4 ZI-data=1260. Скачал Flash Magic и открыл им HEX. При просмотре информации о нем получил размер файла 48,95 кБайт, а Flash used = 17,39 кБайт, что составляет 217,33%. Привожу текст программы:
#include <LPC21xx.H> /* LPC21xx definitions */
//#include <stdio.h> /* standard I/O .h-file */

volatile unsigned int a;

void PLL_Initialization (void)
{
PLLCFG = 0x23; //Fosc=14.7456; M=4; P=2
PLLCON = 0x1;
PLLFEED= 0xAA;
PLLFEED= 0x55;
while(!(PLLSTAT & 0x400)){}
PLLCON=0x3;
PLLFEED=0xAA;
PLLFEED=0x55;
}
void Peripherals_Initialization (void)
{
VPBDIV = 0x2;
MAMTIM = 0x3;
MAMCR = 0x2;
PINSEL0 = 0x0;
PINSEL1 = 0x0;
IODIR0 = 0xFFFFFFFF;
int main (void)
{
PLL_Initialization();
Peripherals_Initialization ();

while(1)
{
if(a<10){a++;}
else {a=0;}
if(a<5)
{IOSET0=0xFF00FF00;}
if(a>=5)
{IOCLR0=0xFF00FF00;}
}//while
}//main

Еще к проекту подключен startup.s, предложенный Keil -ом.

Собственнно вопрос почему код такой большой? У LPC2101 всего 8 кБайт флеши. Спасибо!.
sonycman
Попробуйте в свойствах проекта под C\C++ поставить галочку One ELF section per Function, чтобы из кода выбрасывались неиспользуемые функции...
aaarrr
Цитата(smk @ Feb 15 2009, 12:56) *
Собственнно вопрос почему код такой большой? У LPC2101 всего 8 кБайт флеши. Спасибо!.

Попросите линкер сгенерировать map-файл. Не понятно, откуда берется это - RO-data=16416.

Цитата(sonycman @ Feb 15 2009, 13:06) *
Попробуйте в свойствах проекта под C\C++ поставить галочку One ELF section per Function, чтобы из кода выбрасывались неиспользуемые функции...

Выкидывать лишнее должен линкер, а компилятору эта галочка обломает оптимизацию.
sonycman
Цитата(aaarrr @ Feb 15 2009, 14:48) *
Выкидывать лишнее должен линкер, а компилятору эта галочка обломает оптимизацию.

Вы так считаете?
Линкер может исключить только всю секцию (файл), а чтобы он мог удалять отдельные функции необходимо включить эту опцию.
Иначе весь ненужный мусор будет в коде...
aaarrr
Цитата(sonycman @ Feb 15 2009, 14:24) *
Вы так считаете?

Каюсь, был неправ. Но это не повод ставить "one ELF section..." - автоинлайн обломается.
smk
Вот файл map.
aaarrr
Цитата(sonycman @ Feb 15 2009, 14:24) *
Иначе весь ненужный мусор будет в коде...

Мусор просто не надо в код закладывать.

Цитата(smk @ Feb 15 2009, 15:09) *
Вот файл map.

Что-то странное у Вас с регионами:
Код
Load Region LR_IROM1 (Base: 0x00000000, Size: 0x00004590, Max: 0x00080000, ABSOLUTE)
...
  Execution Region ER_IROM1 (Base: 0x00000000, Size: 0x000001c8, Max: 0x00080000, ABSOLUTE)
...
  Execution Region ER_IROM2 (Base: 0x000041c8, Size: 0x000003c4, Max: 0xffffffff, ABSOLUTE, FIXED)

Scatter-файл посмотреть можно?
sonycman
Цитата(aaarrr @ Feb 15 2009, 16:07) *
Но это не повод ставить "one ELF section..." - автоинлайн обломается.

Да вроде нормально мелкие функции автоинлайнятся с этой опцией в RealView... smile.gif

Насчёт "мусора" - это удобно когда, к примеру, проект содержит объёмный файл библиотеки для работы с ЖКИ или другой подобный, из которого используются только часть функций. Тогда только они и будут включены...
smk
Вот все файлы.

На всеи компе есть только один Scatter-файл - это рисунок. Других не нашел.

Цитата
Scatter-файл посмотреть можно?


Только этот. Других нет. Нашел поиском по шаблону *scatter*.*
Путь, где он нашелся. C:\Program Files\Hewlett-Packard\LaserJet All-in-one\Help\lj1200\Users Guide\images
просмотрел кейл-директорию вручную - тоже не нашел. странно все это...
aaarrr
Цитата(sonycman @ Feb 15 2009, 15:26) *
Да вроде нормально мелкие функции автоинлайнятся с этой опцией в RealView... smile.gif

Проверил, инлайнятся. Хотя это, наверное, не случайно все-таки написали:
Цитата
This option increases code size slightly (typically by a few percent) for
some functions because it reduces the potential for sharing addresses,
data, and string literals between functions.

И правильнее все равно будет воспользоваться linker feedback'ом, не включая "one elf..." smile.gif
smk
Цитата
И правильнее все равно будет воспользоваться linker feedback'ом, не включая "one elf..."


А как это делается?

Может нужна клизма uVision3 V3.72? В закромах есть?
aaarrr
Цитата(smk @ Feb 15 2009, 16:42) *
А как это делается?

Могу рассказать, хотя это не Ваш случай. У Вас откуда-то берется регион IROM2, хотя в проекте он, как я понимаю, не упоминается.
smk
Цитата
У Вас откуда-то берется регион IROM2, хотя в проекте он, как я понимаю, не упоминается.


Да, в проекте этого нет. Что можно предпринять?
zuy
Цитата(aaarrr @ Feb 15 2009, 17:50) *
Могу рассказать, хотя это не Ваш случай.


Расскажите пожалуйста по linker feedback, очень интересно.
aaarrr
Цитата(zuy @ Feb 15 2009, 17:09) *
Расскажите пожалуйста по linker feedback, очень интересно.

Очень просто: в командной строке линкера пишете --feedback=file, в командной строке компилятора то же самое. Правда, для максимального эффекта проект нужно собирать два раза.

Цитата(smk @ Feb 15 2009, 17:01) *
Да, в проекте этого нет. Что можно предпринять?

Я бы порекомендовал написать свой scatter-файл, дабы исключить всякую самодеятельность Кейла. В хелпе написано, как это делается.
smk
Цитата
Я бы порекомендовал написать свой scatter-файл,

Хорошо, а как это сделать и как подключить этот файл?
aaarrr
Как сделать, написано здесь: Help -> RealView Linker and Utilities Guide -> Using Scatter-loading Description Files.
Самый примитивный файл выглядит примерно так:
Код
FLASH 0x00 0x2000
{
    FLASH 0x00 0x2000
    {
        startup.o (RESET, +First)
        * (+RO)
    }
    RAM 0x40000000 0x800
    {
        * (+RW, +ZI)
    }
}


Для подключения нужно убрать галку "Use Memory Layout from Target Dialog" на вкладке Linker окна свойств проекта и выбрать файл.
smk
Все решилось несколько проще. Больной выздоровел - код стал 1,12 кБайт.
defunct
Цитата(smk @ Feb 15 2009, 15:05) *
Нашел поиском по шаблону *scatter*.*

Искать по шаблону *.sct в каталоге проекта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.