|
Компилятор компилит лишний код..., Кто может помогите.......... |
|
|
|
Jun 22 2006, 20:46
|

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

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

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

|
Цитата(vet @ Jun 22 2006, 23:51)  Соптимизируйте лучше саму программу, уж на 20 байт наверняка ужать получится. Уже оптимизировал..... Дальше уже вроде некуда.... Кроме как переписывать весь проект.... Буду пробовать дальше... Сейчас просто перебераю все возвожноти решения задачи..........
|
|
|
|
|
Jun 22 2006, 21:04
|

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

|
Цитата(vet @ Jun 22 2006, 23:59)  Ещё совет - уберите галку General Options - System - Initialize unused interrupt vectors. Это сэкономит размер на таблице векторов. Объем кода уменьшился как раз на 20 байт!!! А что это за галачка? За что она отвечает?!
|
|
|
|
|
Jun 22 2006, 21:17
|
Знающий
   
Группа: Свой
Сообщений: 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 байт!!! А что это за галачка? За что она отвечает?! Просто сравните код с галкой и без, и станет понятно. По умолчанию компилятор заполняет все вектора.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Jun 23 2006, 02:35
|

Гуру
     
Группа: Свой
Сообщений: 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), а скоростей нужно добиваться не извращениями с Ассемблером, а продумыванием алгоритма и поиском наиболее подходящего для данной задачи. Не мне Вас учить, конечно)))
--------------------
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|