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

 
 
> Помогите впихнуть невпихуемое, резервы флеш-памяти
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
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 21)
IgorKossak
сообщение Jun 12 2007, 19:18
Сообщение #16


Шаман
******

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



Цитата(Сергей Борщ @ Jun 12 2007, 13:22) *
Код
/* Code memory */
-Z(CODE)INTVEC=0-(_..X_INTVEC_SIZE - 1)
-Z(CODE)CODE=0-_..X_FLASH_END
Все. Сколько надо - он возьмет под вектора и дальше пойдет код. Можете пользовать в любом проекте, независимо от количества используемых векторов

Или ещё проще
Код
-Z(CODE)INTVEC,CODE=0-_..X_FLASH_END
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 17 2007, 08:19
Сообщение #17


Знающий
****

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



Цитата(IgorKossak @ Jun 12 2007, 22:18) *
Или ещё проще
Код
-Z(CODE)INTVEC,CODE=0-_..X_FLASH_END

Спасибо. Помогло.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jun 17 2007, 17:52
Сообщение #18


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Если используется вектор прерывания то можно зарезервировать как можно больше Rxx регистров (в настройках проекта) - в итоге в обработчике прерываний push pop для них выполнятся не будет.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 17 2007, 19:49
Сообщение #19


Шаман
******

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



Цитата(_artem_ @ Jun 17 2007, 20:52) *
Если используется вектор прерывания то можно зарезервировать как можно больше Rxx регистров (в настройках проекта) - в итоге в обработчике прерываний push pop для них выполнятся не будет.

А если применяются некоторые сложные библиотечные функции, то такая экономия регистров может привести к нерабочему коду. ИАРовцы рекомендуют лочить не более пяти регистров (manuals.htm).
Go to the top of the page
 
+Quote Post
LeonY
сообщение Jun 17 2007, 21:06
Сообщение #20


Знающий
****

Группа: Админы
Сообщений: 689
Регистрация: 24-06-04
Из: South Africa
Пользователь №: 164



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

Эта история старая и представляет из себя полное фуфло (образцы чрезвычайно плохого руководства проектом в первую очередь и не слишком умного разработчика - во вторую). Такое возможно в среде фанатов-любителей, а не профессионалов. Если взять на рассмотрение этот Business Case, то кроме смеха никакой другой реакции не могу предположить. Надо просто взять калькулятор и посчитать оплату этого "гения" vs похороны всех выпущенных плат и их замены на платы с большим кристаллом. Как вариант остается полный нах заказчику, который там чего-то забыл и точно не является гением ни в электроннике ни в Projec Management. Интересно - слышали ли эти персонажи о таком понятии, как Redundant Resources. Если нет - то надо просто почитать букварь, а не писать слезливое фуфло; если да - то все они бандиты и лузеры. Ладно останавливаюсь, на эту тему можно писать бесконечно...


--------------------
"В мире есть две бесконечные вещи: Вселенная и человеческая глупость. За Вселенную, впрочем, поручиться не могу". (С)

А. Эйнштейн.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 18 2007, 07:58
Сообщение #21


Шаман
******

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



Абсолютно согласен с LeonY, хоть и не так категорично.
Подобную же тему с таким же эффектом можно открыть и с названием "История одного такта".
С дугой стороны могу рассказать следующее. Заказчик выдал нам задание, мы его оценили с запасом примерно 50% как по памяти, так и по скорости. Реализовали проект - все довольны. Потом началось: "А вот нам бы ещё вот это и немножечко вот это" и т. д. раз в неделю. Дошло до того, что мега128 стала забита на 127,5 килобайт (оптимизация максимальная). Т. е. пожеланий осталось на один чих.
Слава Кому Следует, что по скорости пока нареканий нет.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 18 2007, 10:04
Сообщение #22


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Как вариант можно переписать одну из проедур на асме. Экономия будет.

Да и собственно в 99.99% случаев всегда можно оптимизировать код.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


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


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