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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Компилятор компилит лишний код..., Кто может помогите..........
Potter
сообщение Jun 22 2006, 20:22
Сообщение #1


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

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Компилятор IAR Embedded Workbench. Создаю пустой проект(подключаю библиотеки и создаю функцию main):


#include <stdio.h>
#include <io2313.h>
#include <ina90.h>
#include <string.h>

void main(void)
{

}

Компилю хекс файл. В файле уже кода на 48 байт. Я слышал что если где-то в опциях проекта убрать или поставить галочку то этих 48 байт не будет. Настроил проект чтоб оптимизировал по объему памяти... Дело в том что я создал проект под AT90S2313. Невлизает буквально пару десятков байт.... Если етот лишний код убрать то все влезет.... Где надо покапаться в опциях проекта?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 22 2006, 20:38
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Скомпилируйте в ассемблер и все станет ясно:
1.Вектора прерываний присутствуют ?
2.Указатель стека вы ручками инитили? Это сделал компилятор автоматом.
3.Глобальные переменные обнулены?
Так, что считайте это еще по мелочи.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Potter
сообщение Jun 22 2006, 20:46
Сообщение #3


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

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Цитата(beer_warrior @ Jun 22 2006, 23:38) *
Скомпилируйте в ассемблер и все станет ясно:
1.Вектора прерываний присутствуют ?
2.Указатель стека вы ручками инитили? Это сделал компилятор автоматом.
3.Глобальные переменные обнулены?
Так, что считайте это еще по мелочи.


Весь проект ето библиотеки и функция маин.. нет никаких переменных ни векторов прерывания.... Ну конечно может етот код из-за стека.... Но может есть всетаки способ уменьшить его хоть байт на 20?
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 22 2006, 20:51
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



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


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Potter
сообщение Jun 22 2006, 20:55
Сообщение #5


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

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Цитата(vet @ Jun 22 2006, 23:51) *
Соптимизируйте лучше саму программу, уж на 20 байт наверняка ужать получится.


Уже оптимизировал..... Дальше уже вроде некуда.... Кроме как переписывать весь проект.... Буду пробовать дальше... Сейчас просто перебераю все возвожноти решения задачи..........
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 22 2006, 20:59
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Ещё совет - уберите галку General Options - System - Initialize unused interrupt vectors. Это сэкономит размер на таблице векторов.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Potter
сообщение Jun 22 2006, 21:04
Сообщение #7


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

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Цитата(vet @ Jun 22 2006, 23:59) *
Ещё совет - уберите галку General Options - System - Initialize unused interrupt vectors. Это сэкономит размер на таблице векторов.


Объем кода уменьшился как раз на 20 байт!!! А что это за галачка? За что она отвечает?!
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 22 2006, 21:08
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Под мелкие чипы у которых меньше 16k flash на C не особо разгонишься..

Цитата
Объем кода уменьшился как раз на 20 байт!!! А что это за галачка? За что она отвечает?!

Это разовая экономия. Переведите Initialize unused interrupt vectors и вам сразу станет понятно "за что она отвечает".
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 22 2006, 21:11
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Объем кода уменьшился как раз на 20 байт!!! А что это за галачка? За что она отвечает?!

Вектора прерываний жестко связаны с адресами в начале памяти.
При снятой галке, на места, где были rjmp на обработчик прерывания лег код. Да посмотрите вы листинг наконец smile.gif


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 22 2006, 21:17
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(defunct @ Jun 23 2006, 01:08) *
Под мелкие чипы у которых меньше 16k flash на C не особо разгонишься..

Категорично как-то. По мне, так в линейке АВР выбирать асм стоит только для tiny13 (11,12).
IAR - умная софтина, и оптимизировать код позволяет очень гибко.

Цитата(Potter @ Jun 23 2006, 01:04) *
Объем кода уменьшился как раз на 20 байт!!! А что это за галачка? За что она отвечает?!

Просто сравните код с галкой и без, и станет понятно. По умолчанию компилятор заполняет все вектора.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Potter
сообщение Jun 22 2006, 21:39
Сообщение #11


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

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Всем за все огромное спасибо...
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 22 2006, 22:40
Сообщение #12


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(vet @ Jun 23 2006, 00:17) *
Категорично как-то. По мне, так в линейке АВР выбирать асм стоит только для tiny13 (11,12).
IAR - умная софтина, и оптимизировать код позволяет очень гибко.

Для меня так категорично. (<16k - строго асм) Т.к. я не на память смотрю, а на MIPSы у процессора. Если их достаточно для решения задачи, так почему бы их не использовать в полном объеме не смотря на крохотный объем памяти программ.
Go to the top of the page
 
+Quote Post
arttab
сообщение Jun 23 2006, 01:43
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Из общих советов:
нет ли переменных длинее char, хотя этого не требуется?
нет ли матиматики? Можно попробовать оптимизировать самому (отказался от float в пользу int).
замена нескольких функций одной унифицированной.
использование структур.
посмотреть какие библиотечные функции используются мало - может быть удастся обойтись без них.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 23 2006, 02:35
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Еще, иногда, помогает __no_init перед объявлением переменной, и особенно помогает __regvar __no_init. Правда, в последнем случае придется задавать адрес регистра. Посмотрите, к каким переменным наиболее часто обращается программа, и объявите ее регистром, наверняка сэкономите 20-30 байт кода, ну и МИПСЫ увеличите))).

Цитата(defunct @ Jun 23 2006, 06:40) *
Цитата(vet @ Jun 23 2006, 00:17) *

Категорично как-то. По мне, так в линейке АВР выбирать асм стоит только для tiny13 (11,12).
IAR - умная софтина, и оптимизировать код позволяет очень гибко.

Для меня так категорично. (<16k - строго асм) Т.к. я не на память смотрю, а на MIPSы у процессора. Если их достаточно для решения задачи, так почему бы их не использовать в полном объеме не смотря на крохотный объем памяти программ.

На Си, ИМХО, Вы и используете в полном объеме, + время на разработку проекта, +дальнейшее сопровождение (доработка, модернизация ...etc), а скоростей нужно добиваться не извращениями с Ассемблером, а продумыванием алгоритма и поиском наиболее подходящего для данной задачи. Не мне Вас учить, конечно)))


--------------------
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Jun 23 2006, 06:19
Сообщение #15


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Поддерживаю defunct
только как для меня оно ещё суровей ... я вообще считаю что, для 8 бит только асм...
ну прет меня от асма что тут говорить...
(коментарии для кода когда с рамочками вывожу и то гляжу красиво ли рамочка нарисовалась в листинге иходника.) ;-)
а насчет скорости разработки, так основное время приходится тратить не на гемор с написанием строк асма, а поиском и поиском оригинального решения - а как только оно появиться, то вписать придуманное плевое дело....


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post

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

 


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


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