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

 
 
> Помогите впихнуть невпихуемое, резервы флеш-памяти
alux
сообщение Jun 11 2007, 11:23
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Размер программы превышает на 25 байт допустимой. Выжал из программы все, что смог. Рекомендации из апнота AVR035 прочитал. Можна ли как-то использовать неиспользованные вектора прерываний? В xcl-файле убрал:
/* Fill unused interrupt vector's with RETI */
//-H1895
//-h(CODE)0-_..X_INTVEC_SIZE
Не помогло. Пробовал уменьшить
-D_..X_INTVEC_SIZE=34 /* 26 Interrupt vectors * 2 bytes each */
до 30, если меньше выдает ошибку. Еще в программе используется 20 глобальных переменных. Пробовал объединять в структуры. Дало выигрыш аж в 4 байта. Может еще будут какие предложения? Может где-то в настройках стека или еще что... МК - мега48.

Сообщение отредактировал alux - Jun 11 2007, 11:26
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
slog
сообщение Jun 11 2007, 11:28
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Ну для начала "Историю одного байта" прочти.
http://www.caxapa.ru/lib/1byte.html
А потом садись оптимизировать код. Листинг ассемблерный поможет. В листинге линкера есть информация о том сколько какая функция занимает. С самых жирных и начинай. Уверен 100% что 25 байт ужать можно. Какой размер программы-то? И какие функции самые жирные?


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 11 2007, 12:34
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(slog @ Jun 11 2007, 14:28) *
Ну для начала "Историю одного байта" прочти.

Очень интересная история. Правда. Очень понравилась. У меня получилось почти как в рассказе. Правда еще один байт остался в запасе smile.gif. Выкинул проверку источника сброса и разместил три глобальные переменные в регистрах.
Самая ресурсоемкая функция - формула с применением деления и корня квадратного. Использую из math.h.
А что на счет использования неиспользуемых векторов прерывания?
Go to the top of the page
 
+Quote Post
slog
сообщение Jun 11 2007, 13:30
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Цитата(alux @ Jun 11 2007, 16:34) *
Самая ресурсоемкая функция - формула с применением деления и корня квадратного. Использую из math.h.
А что на счет использования неиспользуемых векторов прерывания?

Если у тебя не используется вообще ни одного прерывания, тогда может и сэкономишь чего. А делишь и корни извлекаешь случаем не из float? Если из него, то очень желательно заменить на long обычно это возможно, если получится, можно очень сильно сэкономить. Я недавно сэкономил 2,8кб просто заменив float powf(float, float) на float * float. smile.gif


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 11 2007, 14:19
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(slog @ Jun 11 2007, 16:30) *
Если у тебя не используется вообще ни одного прерывания, тогда может и сэкономишь чего.

Т.е. если хотя бы одно прерывание используется , то на адреса векторов прерываний можно не претендовать?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 11 2007, 14:42
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(alux @ Jun 11 2007, 17:19) *
Т.е. если хотя бы одно прерывание используется , то на адреса векторов прерываний можно не претендовать?

Не на все, а только от нуля до используемого вектора включительно.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 11 2007, 15:18
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(IgorKossak @ Jun 11 2007, 17:42) *
Не на все, а только от нуля до используемого вектора включительно.

Если у меня используется прерывание АЦП, то могу окупировать 4 байта? А что для этого нужно сделать?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 12 2007, 07:26
Сообщение #8


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(alux @ Jun 11 2007, 18:18) *
Если у меня используется прерывание АЦП, то могу окупировать 4 байта? А что для этого нужно сделать?

Подправить командный файл линкера, но не так как Вы это уже делали в плане количества векторов.
В опциях -Z(CODE) диапазоны адресов указать надо от 0, а не от INTVEC_SIZE.
Это более универсально, чем править cstartup на ассемблере, но менее экономично по высвобождаемой памяти.
Кроме того, если у Вас не предусмотрен возврат из функции main() (exit), в cstartup можно удалить всё, что после вызова main, а вызов main заменить на jmp. Да и саму main() можно определить как __task int main(), чтобы она не сохраняла и не восстанавливала регистры в начале и в конце.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   Помогите впихнуть невпихуемое   Jun 11 2007, 11:23
||- - alux   Цитата(IgorKossak @ Jun 12 2007, 10:26) П...   Jun 12 2007, 07:53
||- - KRS   Цитата(alux @ Jun 12 2007, 11:53) /* Code...   Jun 12 2007, 09:06
||- - Сергей Борщ   Цитата(KRS @ Jun 12 2007, 12:06) Не испол...   Jun 12 2007, 10:22
||- - IgorKossak   Цитата(Сергей Борщ @ Jun 12 2007, 13:22) ...   Jun 12 2007, 19:18
||- - alux   Цитата(IgorKossak @ Jun 12 2007, 22:18) И...   Jun 17 2007, 08:19
|- - LeonY   Цитата(alux @ Jun 11 2007, 14:34) Очень и...   Jun 17 2007, 21:06
- - IgorKossak   Можно подправить cstartup.s90 и повыкидывать из не...   Jun 11 2007, 12:41
- - KRS   Цитата(alux @ Jun 11 2007, 15:23) Еще в п...   Jun 11 2007, 17:56
|- - alux   Цитата(KRS @ Jun 11 2007, 20:56) Так у ва...   Jun 11 2007, 18:50
|- - KRS   Цитата(alux @ Jun 11 2007, 22:50) Да, фле...   Jun 11 2007, 19:51
- - _artem_   Если используется вектор прерывания то можно зарез...   Jun 17 2007, 17:52
|- - IgorKossak   Цитата(_artem_ @ Jun 17 2007, 20:52) Если...   Jun 17 2007, 19:49
- - IgorKossak   Абсолютно согласен с LeonY, хоть и не так категори...   Jun 18 2007, 07:58
- - GetSmart   Как вариант можно переписать одну из проедур на ас...   Jun 18 2007, 10:04


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:42
Рейтинг@Mail.ru


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