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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Размер HEX у Keil, нужна помощь
smk
сообщение Feb 15 2009, 09:56
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Пытаюсь осваивать 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 кБайт флеши. Спасибо!.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Feb 15 2009, 10:06
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Попробуйте в свойствах проекта под C\C++ поставить галочку One ELF section per Function, чтобы из кода выбрасывались неиспользуемые функции...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 15 2009, 10:48
Сообщение #3


Гуру
******

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



Цитата(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, чтобы из кода выбрасывались неиспользуемые функции...

Выкидывать лишнее должен линкер, а компилятору эта галочка обломает оптимизацию.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Feb 15 2009, 11:24
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



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

Вы так считаете?
Линкер может исключить только всю секцию (файл), а чтобы он мог удалять отдельные функции необходимо включить эту опцию.
Иначе весь ненужный мусор будет в коде...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 15 2009, 12:07
Сообщение #5


Гуру
******

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



Цитата(sonycman @ Feb 15 2009, 14:24) *
Вы так считаете?

Каюсь, был неправ. Но это не повод ставить "one ELF section..." - автоинлайн обломается.
Go to the top of the page
 
+Quote Post
smk
сообщение Feb 15 2009, 12:09
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Вот файл map.
Прикрепленные файлы
Прикрепленный файл  my_first_LPC_prj.rar ( 4.15 килобайт ) Кол-во скачиваний: 23
 


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 15 2009, 12:16
Сообщение #7


Гуру
******

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



Цитата(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-файл посмотреть можно?
Go to the top of the page
 
+Quote Post
sonycman
сообщение Feb 15 2009, 12:26
Сообщение #8


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



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

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

Насчёт "мусора" - это удобно когда, к примеру, проект содержит объёмный файл библиотеки для работы с ЖКИ или другой подобный, из которого используются только часть функций. Тогда только они и будут включены...
Go to the top of the page
 
+Quote Post
smk
сообщение Feb 15 2009, 13:05
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Вот все файлы.

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

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


Только этот. Других нет. Нашел поиском по шаблону *scatter*.*
Путь, где он нашелся. C:\Program Files\Hewlett-Packard\LaserJet All-in-one\Help\lj1200\Users Guide\images
просмотрел кейл-директорию вручную - тоже не нашел. странно все это...
Прикрепленные файлы
Прикрепленный файл  uVision.rar ( 41.07 килобайт ) Кол-во скачиваний: 20
Прикрепленный файл  scatter.rar ( 4.5 килобайт ) Кол-во скачиваний: 25
 


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 15 2009, 13:15
Сообщение #10


Гуру
******

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



Цитата(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
Go to the top of the page
 
+Quote Post
smk
сообщение Feb 15 2009, 13:42
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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


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

Может нужна клизма uVision3 V3.72? В закромах есть?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 15 2009, 13:50
Сообщение #12


Гуру
******

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



Цитата(smk @ Feb 15 2009, 16:42) *
А как это делается?

Могу рассказать, хотя это не Ваш случай. У Вас откуда-то берется регион IROM2, хотя в проекте он, как я понимаю, не упоминается.
Go to the top of the page
 
+Quote Post
smk
сообщение Feb 15 2009, 14:01
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
У Вас откуда-то берется регион IROM2, хотя в проекте он, как я понимаю, не упоминается.


Да, в проекте этого нет. Что можно предпринять?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
zuy
сообщение Feb 15 2009, 14:09
Сообщение #14


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

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



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


Расскажите пожалуйста по linker feedback, очень интересно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 15 2009, 14:46
Сообщение #15


Гуру
******

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



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

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

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

Я бы порекомендовал написать свой scatter-файл, дабы исключить всякую самодеятельность Кейла. В хелпе написано, как это делается.
Go to the top of the page
 
+Quote Post

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

 


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


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