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

 
 
> uint24_t
Злодей
сообщение Jan 26 2010, 09:19
Сообщение #1


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

Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142



Бутлодер для mega128 малость не влезает в 2k флэша, а нужно впихнуть. Первое что приходит в голову - бороться с flash_size_t, который у меня из-за RAMP_Z для atmega128+ определен как uint32_t...

Откуда взять uint24_t? Если сделать структуру из трёх байт, и написать функции арифметических действий над ней, будет профит?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jan 26 2010, 10:16
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Злодей @ Jan 26 2010, 11:19) *
Бутлодер для mega128 малость не влезает в 2k флэша, а нужно впихнуть.
1) Есть множество ключей компиляции, игры с которыми позволяют уменьшить код.
2) Попробуйте самый свежий WinAVR 20100110 - в нем сильно оптимизирована работа с eeprom.
3) Также очень помогает встраивание функций, вызываемых один раз.
4) Можно оптимизировать сам исходник. AVR231 у меня влез в 2К с запасом.

Вот мои ключи:
Код
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections

# code optimisation
CFLAGS += -fno-ivopts
#CFLAGS += -mcall-prologues
#CFLAGS += -fno-tree-scev-cprop
#CFLAGS += -fno-split-wide-types
#CFLAGS += -fno-inline-small-functions

CFLAGS += --param inline-call-cost=0  <- это число подобрать.
#CFLAGS += -fno-reorder-blocks
#CFLAGS += -fno-reorder-blocks-and-partition
#CFLAGS += -fno-reorder-functions
#CFLAGS += -fno-toplevel-reorder
CFLAGS += -fno-move-loop-invariants
#CFLAGS += -fno-unroll-loops
#CFLAGS += -fno-unroll-all-loops
#CFLAGS += --param max-unroll-times=0

LDFLAGS += -Wl,--gc-sections
LDFLAGS += -Wl,--relax
попробуйте раскомментировать/закомментировать некоторые из них.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 27 2010, 10:37
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Сергей Борщ @ Jan 26 2010, 13:16) *
Вот мои ключи...
Есть такой ключ, что всем ключам ключ:
Код
CFLAGS += --combine
CFLAGS += -fwhole-program


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 27 2010, 10:52
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(demiurg_spb @ Jan 27 2010, 12:37) *
Есть такой ключ, что всем ключам ключ:
Код
CFLAGS += --combine
CFLAGS += -fwhole-program
Вчера потратил 2 часа, пытаясь собрать с его помощью первый попавшийся проект на С++. Так и не удалось. Ругался undefined variable на все глобальные объекты и переменные. Без этого ключа все собирается и работает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Злодей
сообщение Jan 28 2010, 09:51
Сообщение #5


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

Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142



Цитата(Сергей Борщ @ Jan 27 2010, 13:52) *
Вчера потратил 2 часа, пытаясь собрать с его помощью первый попавшийся проект на С++. Так и не удалось. Ругался undefined variable на все глобальные объекты и переменные. Без этого ключа все собирается и работает.

Ключ ломает стереотипы. Отпадают цели вроде "$(OBJDIR)/%.o : %.c", т.к. по одному они компилиться не могут больше.
# Compile: create object files from C source files.
# $(OBJDIR)/%.o : %.c
# @echo
# @echo $(MSG_COMPILING) $<
# $(CC) -c $(ALL_CFLAGS) $< -o $@


compile:
$(CC) $(CFLAGS) $(CDEFS) $(LDFLAGS) $(SRC) -o $(TARGET).elf


...Или дело даже не в этом, а в том, что у Вас C++?

Сообщение отредактировал Злодей - Jan 28 2010, 09:53
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 28 2010, 14:50
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Злодей @ Jan 28 2010, 11:51) *
Ключ ломает стереотипы.
Стереотипы он ломает в другом месте. У тех, у которых они были - про то, что "если вызывается функция из другого файла, то и компилятор не переставит операции в коде, и volatile можно не ставить".


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Злодей   uint24_t   Jan 26 2010, 09:19
- - demiurg_spb   Цитата(Злодей @ Jan 26 2010, 12:19) Если ...   Jan 26 2010, 09:31
|- - demiurg_spb   Using the GNU Compiler Collection. For gcc version...   Jan 27 2010, 12:00
||- - Сергей Борщ   Цитата(demiurg_spb @ Jan 27 2010, 14:00) ...   Jan 27 2010, 12:30
||- - demiurg_spb   Цитата(Сергей Борщ @ Jan 27 2010, 15:30) ...   Jan 27 2010, 12:36
|- - ARV   Цитата(Злодей @ Jan 28 2010, 12:51) Ключ ...   Jan 28 2010, 10:04
||- - _Pasha   Цитата(ARV @ Jan 28 2010, 13:04) придется...   Jan 28 2010, 10:53
|- - Сергей Борщ   Цитата(Злодей @ Jan 28 2010, 11:51) Ключ ...   Jan 28 2010, 11:16
|- - singlskv   Цитата(ReAl @ Jan 28 2010, 17:50) Стереот...   Jan 28 2010, 23:44
- - SysRq   Убрать таблицу векторов прерываний, если не нужна ...   Jan 29 2010, 20:52
- - SysRq   Ежели кого не сильно затруднит, выложите пожалуйст...   Mar 12 2011, 12:50
- - demiurg_spb   Это мой Makefile для проекта из соседнего топика п...   Mar 13 2011, 09:50


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

 


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


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