GenaSPB 11 9 августа, 2012 Опубликовано 9 августа, 2012 (изменено) · Жалоба ... наличия гораздо более удобного механизма с ключевым словом __flash. Отлично! 1) указатель на данные во flash, расположенный во flash? 2) указатель на данные в RAM, расположенный во flash? 3) указатель на данные во flash, расположенный в RAM? Как выглядят описания? ps: что-то применение этого ключевого слова приводит к классическому ../tc1.c:294:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const' Изменено 9 августа, 2012 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 9 августа, 2012 Опубликовано 9 августа, 2012 · Жалоба думаю что где-то так #define flash const __flash или typedef const __flash flash; 1) flash void* flash 2) void* flash 3) flash void* http://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html + гляньте доку на IAR, как это не странно звучит, но там вы найдёте ответы на все ваши 3 вопроса. ps: что-то применение этого ключевого слова приводит к классическому ../tc1.c:294:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const' CSTANDARD = -std=gnu99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 августа, 2012 Опубликовано 9 августа, 2012 (изменено) · Жалоба CSTANDARD = -std=gnu99 Стоит (ключик в командной строке компилятора, если я правильно понял намёк). В какой версии avr gnu toolchain это (ключевое слово __flash) работает? найдёте ответы на все ваши 3 вопроса То что это по применению похоже на квалификаторы, я догадался. Я не пойму, куда это поставить, чтобы работало. У меня не получается. Изменено 9 августа, 2012 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 9 августа, 2012 Опубликовано 9 августа, 2012 · Жалоба Стоит (ключик в командной строке компилятора, если я правильно понял намёк).хорошо В какой версии avr gnu toolchain это (ключевое слово __flash) работает?начиная с 4.7.0, правда изначально его называли __pgm, поэтому для первых сборок 4.7.0 нужно ещё и это: #define __flash __pgm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 августа, 2012 Опубликовано 9 августа, 2012 · Жалоба Использую вот отсюда http://electronix.ru/forum/index.php?showt...t&p=1082499 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 9 августа, 2012 Опубликовано 9 августа, 2012 · Жалоба Использую вот отсюда http://electronix.ru/forum/index.php?showt...t&p=1082499 И я тоже: avr-gcc -v Using built-in specs. COLLECT_GCC=c:\gcc\avr-gcc\bin\avr-gcc.EXE COLLECT_LTO_WRAPPER=c:/gcc/avr-gcc/bin/../libexec/gcc/avr/4.7.1/lto-wrapper.exe Target: avr Configured with: ../../gcc.gnu.org/gcc-4_7-branch/configure --target=avr --prefix=/local/gnu/install/gcc-4.7-mingw32 --host=i386-mingw32 --build=i686-linux-gnu --enable-languages=c,c++ --disable-nls --disable-shared --with-dwarf2 : (reconfigured) ../../gcc.gnu.org/gcc-4_7-branch/configure --target=avr --prefix=/local/gnu/install/gcc-4.7-mingw32 --host=i386-mingw32 --build=i686-linux-gnu --enable-languages=c,c++ --disable-nls --disable-shared --with-dwarf2 Thread model: single gcc version 4.7.1 20120606 (prerelease) (GCC) HINT: в этой сборке avr-size не пропатченый поэтому возмите его из последнего WinAVR или из атмеловской сборки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 августа, 2012 Опубликовано 9 августа, 2012 (изменено) · Жалоба Это что-то! На 32-х килобайтном проекте получил почти пять килобайт выигрыша по объёму FLASH - это здорово (-Os)! Просто перекомпилировал. Попробовал с квалификатором __flash поиграться - странно, присвоение указателей на объекты с различием в этом квалификаторе не вызывает даже предупреждения... грустно. На "ручном управлении" работает, но это получается весьма опасный текст... Не удаётся заставить работать из-под AvrStudio 4.19, только запуская make в каталоге проекта. upd: заставил, только отключив использование AVR TOOLCHAIN и выбрав make из yagarto tools Лучше иметь установленным atmel gnu tools поновее - gcc plugin поновее полезен. Изменено 10 августа, 2012 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
halfdoom 0 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба Напрасно расстраиваетесь, если нужна совместимость со старыми дедовскими методами нужно объявить глобально или до включения pgmspace.h Да я не расстраиваюсь, наоборот, всячески приветствую появление __flash, учитывая то, что предлагая включить подобное расширение лет 8 назад, услышал много всякого в ответ. А в режиме совместимости с первого раза не собралось, поэтому и "расстроился". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба Нашёл ещё одну сборку - уже с инсталлятором - http://www.makehackvoid.com/node/578/release C:\Program Files\MHV AVR Tools\bin>avr-gcc -v Using built-in specs. COLLECT_GCC=C:\Program Files\MHV AVR Tools\bin\avr-gcc.EXE COLLECT_LTO_WRAPPER=c:/program files/mhv avr tools/bin/../libexec/gcc/avr/4.7.1/lto-wrapper.exe Target: avr Configured with: ../gcc-4.7.1/configure --prefix=/c/mhvavrtools/mhvavrtools/mhvavrtools --host=i686-pc-mingw32 --target=avr --enable -languages=c,c++ --with-dwarf2 -enable-win32-registry=MHV-AVR-Tools --enable-lto --with-gmp=/c/mhvavrtools/mhvavrtools/build/bin --with-mpfr=/c/mhvavrtools/mhvavrtools/build/bin --with-mpc=/c/mhvavrtools/mhvavrtools/build/bin --disable-libssp Thread model: single gcc version 4.7.1 (GCC) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба Я её тоже находил, но и также находил инфу что с ней что-то не так, возможно уже пофиксили. В ней binutils какой-то экспериментальный Binutils 2.22.52.20120702 (development snapshot) и вот с ним что-то не совсем чисто. Так что я бы её не советовал использовать в боевых условиях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба Я её тоже находил, но и также находил инфу что с ней что-то не так, возможно уже пофиксили. В ней binutils какой-то экспериментальный Binutils 2.22.52.20120702 (development snapshot) и вот с ним что-то не совсем чисто. Так что я бы её не советовал использовать в боевых условиях. Эта сборка чуть похуже с объёмом FLASH обходится (на 32 кило - 300 байт проигрыша). Она поновее (компилятор не пререлиз)... Интересно, что не так... Вот у halfdoom проект не собрался в режиме совместимости - у меня собирался нормально... Перевёл проект на использование __flash вместо pgm_read_xxx - в основном приводило к маленьким уменьшениям кода (на 4..10 байт на одну правку, если оптимизатор не мог использовать это. Если мог - до сотни байт). Иногда к увеличению на десяток байт. В основном уменьшает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба Не знаю... У меня все проекты собираются. Вы эти флаги пробовали применять? С ними ещё злее оптимизирует, правда мало шансов, что с -flto соберётся... #CFLAGS += -flto #CFLAGS += -mbranch-cost= CFLAGS += -fno-tree-switch-conversion CFLAGS += -mstrict-X CFLAGS += -maccumulate-args Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба Не знаю... У меня все проекты собираются. Так и уменя тоже - собираются. Это у halfdoom странная проблема - я к тому, что на developer release могли ругаться из-за каких то не тех проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 12 августа, 2012 Опубликовано 12 августа, 2012 (изменено) · Жалоба Так, все-таки, кто знает, как можно получить предупреждение компилятора в таких местах: const __flash char * pcf1; const char * pc2; void test1(void) { pcf1 = pc2; } void test2(void) { pc2 = pcf1; } Изменено 12 августа, 2012 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
halfdoom 0 13 августа, 2012 Опубликовано 13 августа, 2012 · Жалоба В общем, собрал четыре проекта: самый маленький ~2КБ, на нем выигрыш составил 1.2%, самый большой - 29КБ, выигрыш 4.7%. Остальные где-то посередине. Оптимизация, в основном, коснулась избыточных загрузок регистров, заметно лучше используются X+ команды, в терминальных функциях теперь задействуется Y регистр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться