Перейти к содержанию
    

... наличия гораздо более удобного механизма с ключевым словом __flash.

 

Отлично!

 

1) указатель на данные во flash, расположенный во flash?

2) указатель на данные в RAM, расположенный во flash?

3) указатель на данные во flash, расположенный в RAM?

 

Как выглядят описания?

 

 

ps: что-то применение этого ключевого слова приводит к классическому

../tc1.c:294:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

думаю что где-то так

#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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CSTANDARD = -std=gnu99

 

Стоит (ключик в командной строке компилятора, если я правильно понял намёк).

 

В какой версии avr gnu toolchain это (ключевое слово __flash) работает?

 

найдёте ответы на все ваши 3 вопроса

То что это по применению похоже на квалификаторы, я догадался. Я не пойму, куда это поставить, чтобы работало. У меня не получается.

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стоит (ключик в командной строке компилятора, если я правильно понял намёк).
хорошо

В какой версии avr gnu toolchain это (ключевое слово __flash) работает?
начиная с 4.7.0, правда изначально его называли __pgm, поэтому для первых сборок 4.7.0 нужно ещё и это:

#define __flash __pgm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую вот отсюда

http://electronix.ru/forum/index.php?showt...t&p=1082499

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую вот отсюда

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 или из атмеловской сборки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это что-то!

На 32-х килобайтном проекте получил почти пять килобайт выигрыша по объёму FLASH - это здорово (-Os)!

Просто перекомпилировал.

 

Попробовал с квалификатором __flash поиграться - странно, присвоение указателей на объекты с различием в этом квалификаторе не вызывает даже предупреждения... грустно. На "ручном управлении" работает, но это получается весьма опасный текст...

 

Не удаётся заставить работать из-под AvrStudio 4.19, только запуская make в каталоге проекта.

upd: заставил, только отключив использование AVR TOOLCHAIN и выбрав make из yagarto tools

Лучше иметь установленным atmel gnu tools поновее - gcc plugin поновее полезен.

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Напрасно расстраиваетесь, если нужна совместимость со старыми дедовскими методами нужно объявить глобально или до включения pgmspace.h

Да я не расстраиваюсь, наоборот, всячески приветствую появление __flash, учитывая то, что предлагая включить подобное расширение лет 8 назад, услышал много всякого в ответ.

 

А в режиме совместимости с первого раза не собралось, поэтому и "расстроился".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл ещё одну сборку - уже с инсталлятором -

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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я её тоже находил, но и также находил инфу что с ней что-то не так, возможно уже пофиксили.

В ней binutils какой-то экспериментальный

Binutils 2.22.52.20120702 (development snapshot)

и вот с ним что-то не совсем чисто.

Так что я бы её не советовал использовать в боевых условиях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я её тоже находил, но и также находил инфу что с ней что-то не так, возможно уже пофиксили.

В ней binutils какой-то экспериментальный

Binutils 2.22.52.20120702 (development snapshot)

и вот с ним что-то не совсем чисто.

Так что я бы её не советовал использовать в боевых условиях.

 

Эта сборка чуть похуже с объёмом FLASH обходится (на 32 кило - 300 байт проигрыша).

Она поновее (компилятор не пререлиз)...

Интересно, что не так... Вот у halfdoom проект не собрался в режиме совместимости - у меня собирался нормально...

 

Перевёл проект на использование __flash вместо pgm_read_xxx - в основном приводило к маленьким уменьшениям кода (на 4..10 байт на одну правку, если оптимизатор не мог использовать это. Если мог - до сотни байт). Иногда к увеличению на десяток байт. В основном уменьшает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю... У меня все проекты собираются.

Вы эти флаги пробовали применять? С ними ещё злее оптимизирует, правда мало шансов, что с -flto соберётся...

#CFLAGS += -flto
#CFLAGS += -mbranch-cost=
CFLAGS += -fno-tree-switch-conversion
CFLAGS += -mstrict-X 
CFLAGS += -maccumulate-args

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю... У меня все проекты собираются.

 

Так и уменя тоже - собираются. Это у halfdoom странная проблема - я к тому, что на developer release могли ругаться из-за каких то не тех проблем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так, все-таки, кто знает, как можно получить предупреждение компилятора в таких местах:

 

const __flash char * pcf1;
const char * pc2;

void test1(void)
{
    pcf1 = pc2;
}

void test2(void)
{
    pc2 = pcf1;
}

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем, собрал четыре проекта: самый маленький ~2КБ, на нем выигрыш составил 1.2%, самый большой - 29КБ, выигрыш 4.7%. Остальные где-то посередине. Оптимизация, в основном, коснулась избыточных загрузок регистров, заметно лучше используются X+ команды, в терминальных функциях теперь задействуется Y регистр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...