Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ GNU/OpenSource средства разработки _ свежак KGP win32/arm/avr/mips/m68k

Автор: klen Jan 19 2008, 21:36

Всем привет.
В ознаменовение нового года и открытия раздела выкладывается свежак.

binutils-2.18.50-20080115
gcc-4.3.0-20080111
avrlibc-20080116
newlib-20080115
gdb-20080117

все зажато в формат 7z
бросаете распакованное в любую папку, прописываете PATH папка/bin далее должно быть все бкз проблем, хидеры и либы должны сами находится и линковатся без дополнительных гимороев.

Win32:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_win32-bu2.18.50.20080115_gcc4.3.0.20080111.7z
здесь все, включая нидеры и либы, это то чем я собираю ВСЕ остальноя, включая драйверы для масдая. ~18Mb
работает, мин нет.

MIPS:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_mips-bu2.18.50.20080115_gcc4.3.0.20080111_newlib1.16.0.20080115_gdb6.7.50.20080117.7z
не тестировалось, нет платы.


m68k/ColdFire:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_m68k-bu2.18.50.20080115_gcc4.3.0.20080111_newlib1.16.0.20080115_gdb6.7.50.20080117.7z
собрал первый раз, возможны ошибки для m51qe, собирал ручками. Проверяйте, найдете неправильную кодогенерацию пишите поправлю компилер. Для остальных возможна ошибочная генерация в код FP инструкций(для тех которые не имеют FP), нада пробывать. Evgeny_CD так сказать инициировал интерес к данной сборке, ему и карты в руки.

avr:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-bu2.18.50.20080115_gcc4.3.0.20080111_avr-libc20080115.7z
Тут как обычно, работает тоже без мин, я веду рабочий проект на mega1280, девайсы не жужжат.
Новое - добавлена подархитектура avr35(usb82,usb162), поддерживается avr6 (m256x)

arm:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-bu2.18.50.20080115_gcc4.3.0.20080111_newlib1.16.0.20080115_gdb6.7.50.20080108.7z
тоде самое, веду проект, все скомпиленное работает.

спасиба за внимание.

Автор: oll Jan 22 2008, 15:52

2 Klen - a14.gif Спасибо. Тут меня на работе спросили (сам пользуюсь pn+make) как прикрутить Вашу сборку к AVR Studio вместо WinAVR - я предложил просто заменить файлы в папке WinAVR. Правильно ли это?
И еще - бывает ли GNU компилятор для 16 пиков?

Автор: Сергей Борщ Jan 22 2008, 18:49

Цитата(oll @ Jan 22 2008, 17:52) *
И еще - бывает ли GNU компилятор для 16 пиков?
Не из семейства GCC, но тоже под GPL - http://electronix.ru/redirect.php?http://sdcc.sourceforge.net/ Брать не релиз (который 2.7.0) - в нем нет библиотек для PIC18Fxxx, а http://electronix.ru/redirect.php?http://sdcc.sourceforge.net/snap.php#Windows (в нем еще и некоторые ошибки поправлены). Еще потребуются gputils, искать на sourceforge.net

Автор: Kirill Trusov Jan 22 2008, 19:05

а для чаво эта сборка ? т.е винавр хуже или в чем причина

Автор: klen Jan 22 2008, 19:09

Цитата(oll @ Jan 22 2008, 18:52) *
2 Klen - a14.gif Спасибо. Тут меня на работе спросили (сам пользуюсь pn+make) как прикрутить Вашу сборку к AVR Studio вместо WinAVR - я предложил просто заменить файлы в папке WinAVR. Правильно ли это?
И еще - бывает ли GNU компилятор для 16 пиков?


1. Затирать не надо, просто слейте все в любую папку.
2. Из переменной PATH перенаправте путь из ......WinAVR/bin в ....kgp/bin.

в таком случае Вы сможете переключать изспользуемые версии тулсов. Можно записать в PATH оба пути к bin , использоватся будет та которая первей стоить.

Цитата(Kirill Trusov @ Jan 22 2008, 22:05) *
а для чаво эта сборка ? т.е винавр хуже или в чем причина

WinAVR ядро avr35(usb82,usb162) поддерживает?

Автор: Kirill Trusov Jan 22 2008, 19:11

т.е если я еще на меге8 да 32 . то и не надо smile.gif

Автор: klen Jan 22 2008, 19:15

Цитата(Kirill Trusov @ Jan 22 2008, 22:11) *
т.е если я еще на меге8 да 32 . то и не надо smile.gif


необязательно smile.gif

Автор: AHTOXA Feb 9 2008, 20:02

Привет! Замечательная идея, собрать всё вместе. А то у меня MinGW, WinAVR, WinARm и msp-gcc стоят все порознь, и иногда между собой дерутся:-)

Скачал:

  1. KGP Win32
  2. KGP 8bit AVR
  3. KGP ARM

Создал папку kgp, распаковал всё туда. При распаковке оказалось, что файл lib/libiberty.a есть в каждом архиве, причём вроде разные. Это нормально?

Не нашёл make и пр.. Взял из winavr, закинул в bin.
Собрал проект на avr - размер прошивки ещё немного подрос :-(
На arm тоже собрал, работает:-)
Вот бы ещё и msp-gcc туда влить, а то он теперь у меня как белая ворона, да ещё и цыгвиновский:-)

Короче, респект за проделанную работу:-)

Автор: klen Feb 9 2008, 20:49

>Создал папку kgp, распаковал всё туда. При распаковке оказалось, что файл lib/libiberty.a есть в >каждом архиве, причём вроде разные. Это нормально?

на это забей

>Не нашёл make и пр.. Взял из winavr, закинул в bin.
вроде ложил...

>Вот бы ещё и msp-gcc туда влить, а то он теперь у меня как белая ворона, да ещё и цыгвиновский:-)
я подумаю над этим

Автор: gte Feb 28 2008, 07:00

Цитата(klen @ Jan 20 2008, 00:36) *
Win32:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_win32-bu2.18.50.20080115_gcc4.3.0.20080111.7z
здесь все, включая нидеры и либы, это то чем я собираю ВСЕ остальноя, включая драйверы для масдая. ~18Mb
работает, мин нет.


Остальные ссылки в сообщении работают, а эта дает ошибку. Можно поправить?

Автор: AHTOXA Feb 28 2008, 07:23

Цитата(gte @ Feb 28 2008, 12:00) *
Остальные ссылки в сообщении работают, а эта дает ошибку. Можно поправить?


Наверное потому, что есть более свежий свежак? :-)

Вот по этой ссылке: http://electronix.ru/forum/index.php?showtopic=43254

Автор: gte Feb 28 2008, 20:13

Цитата(AHTOXA @ Feb 28 2008, 10:23) *
Наверное потому, что есть более свежий свежак? :-)

Спасибо.

Автор: klen Mar 7 2008, 11:54

Всем привет очередно свежак для arm-elf.

binutils-2.18.50-cvs-20080307
gcc-4.4.0-snapshot-20080229 собрано для всех вариантов(multilib) кроме реализаций без умножителя
newlib-cvs-20080306
gdb-cvs-200800307
openocd-svn-20080307

формат 7z
бросаете распакованное в любую папку, прописываете PATH папка/bin далее должно быть все бкз проблем, хидеры и либы должны сами находится и линковатся без дополнительных гимороев.

arm:

http://electronix.ru/redirect.php?http://klen.org//Files/DevTools/kgp_arm-bu2.18.50.20080307_gcc4.4.0.20080229_newlib1.16.0.20080306_gdb6.7.50.20080307.7z

недолго тестил вроде бы FreeRTOS+lpc2148 задач под завязку- не жалуется, работает. gdb и openocd тоже работает, тестил с Eclipse

я наверно сюда сборки буду кидать, чтоб веток не плодить.

еще готово свежее для mingw, если кому срочно-интересно, то выложу

Автор: AHTOXA Mar 7 2008, 12:01

Цитата
я наверно сюда сборки буду кидать, чтоб веток не плодить.


И это верно:-) Вроде же было предложение закрепить тему?

Автор: umup Mar 7 2008, 12:13

как лучше работать с разными таргетами ? перед компиляцией добавлять к PATH путь к папке bin соответствующего компилятора ?

Автор: AHTOXA Mar 7 2008, 13:09

Цитата(umup @ Mar 7 2008, 17:13) *
как лучше работать с разными таргетами ? перед компиляцией добавлять к PATH путь к папке bin соответствующего компилятора ?


Нет. Там все таргеты свалены в папку bin. Просто путь к ней, и всё...

Автор: klen Mar 7 2008, 20:51

компиллеры к разным таргетам имеют разные префиксы arm-elf-* avr-* mips-linux-* i686-pc-mingw-*

валить в одну кучу и даприбудет с Вами сила

Автор: umup Mar 8 2008, 11:54

а в makefile задавать соотв. название компилятора ?
типа GCC=i686-pc-mingw32-gcc ?

Автор: klen Mar 8 2008, 15:10

Цитата(umup @ Mar 8 2008, 14:54) *
а в makefile задавать соотв. название компилятора ?
типа GCC=i686-pc-mingw32-gcc ?

ага
для mingw можно просто gcc as ld .....

Автор: COMA Apr 23 2008, 18:05

Вниз ушла. Может стоит закрепить?

Автор: klen Apr 24 2008, 17:22

Цитата(COMA @ Apr 23 2008, 22:05) *
Вниз ушла. Может стоит закрепить?

можна и закрепить.
на выходных попробую все пресобрать, а то чето пауза кокая то - работет типо все и так smile.gif ...

Автор: COMA Apr 24 2008, 20:09

Это было бы очень хорошо!

Автор: Andy Great Apr 25 2008, 06:37

Цитата(klen @ Apr 24 2008, 20:22) *
можна и закрепить.
на выходных попробую все пресобрать, а то чето пауза кокая то - работет типо все и так smile.gif ...

А можно ли попросить Вас сделать на сайте хотя бы просмотр каталога с тулчейнами? А то недавно срочно понадобилось проверить кое-что, Электроникс лег (тьфу-тьфу), пришлось ждать сутки.

Автор: AHTOXA Apr 25 2008, 16:50

Цитата(klen @ Apr 24 2008, 23:22) *
можна и закрепить.
на выходных попробую все пресобрать, а то чето пауза кокая то - работет типо все и так smile.gif ...


У меня тоже пожелание:-) openocd.exe там есть, а вот openocd-pp.exe - нету. Хотя это не очень важно:-)

А насчёт присоединить mspgcc пока никак?

Автор: klen Apr 26 2008, 15:46

Цитата(AHTOXA @ Apr 25 2008, 20:50) *
У меня тоже пожелание:-) openocd.exe там есть, а вот openocd-pp.exe - нету. Хотя это не очень важно:-)

А насчёт присоединить mspgcc пока никак?


я не помню, но вроде openocd собирал с поддержкой всего сразу, в т.ч и парпорта

msp - пробывать, времени не хватает

Автор: klen Apr 28 2008, 04:33

собрал свежак

bu 2.18.50.20080422
gcc 4.3.1.20080424
avr-libc1.6.2
newlib 20080424
gdb 6.8
openocd 20080428 (собрал наскоро с поддержкой d2xx чтоб проверить весь тулчейн, можно если надо по полной собрать)

AVR:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-bu2.18.50.20080422_gcc4.3.1.20080424_avr-libc1.6.2.7z


ARM:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-bu2.18.50.20080422_gcc4.3.1.20080424_newlib20080424_gdb6.8_openocd20080428.7z
собраны все конфигурации(точнее их перемножество ) be le fpu interwork thumb thumb2




пробуйте. арм сборка собрала мой проект, он заработал. авр не пробывал, нет под рукой платки.

дайте телнет на машину с 1 гигом для сборки и числом процессоров от 8 штук, а? если есть у кого не жалко? сборка для арм на двух процах дома занимает аж 6 часов - нервы портятся...

Автор: COMA Apr 28 2008, 17:52

на работе есть две машины работают круглосуточно.
на одном коре дуо 2 ггц и 4 г озу
на втором коре дуо 1.8 ггц и 1 г озу.
больше ничего нет sad.gif

Автор: klen Apr 28 2008, 18:21

Цитата(COMA @ Apr 28 2008, 21:52) *
на работе есть две машины работают круглосуточно.
на одном коре дуо 2 ггц и 4 г озу
на втором коре дуо 1.8 ггц и 1 г озу.
больше ничего нет sad.gif

да неа, спасиба, я у себя дома сам через distcc могу запряч 6 ядер в сумме - всеравно это крохи. хочется попробывать найти многопроцесорную машину, чтоб все процы на одной шине были .....

ну ниче, пока так поживем

Автор: klen Apr 29 2008, 09:09

сегодняшний OpenOCD
версии
Open On-Chip Debugger 1.0 (2008-04-29-09:06)


собран с ключами
--prefix= --enable-parport --enable-dummy --enable-ft2232_ftd2xx --enable-amtjtagaccel --enable-ep93xx --enable-at91rm9200 --enable-gw16012 --enable-ecosboard --enable-presto_ftd2xx --enable--oocd_trace

http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/openocd.exe

Автор: klen May 22 2008, 10:09

свежак для ARM

http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp-arm-elf_bu2.18.50.20080521_gcc4.4.0-20080516_newlib20080521_gdb6.8.7z

полный мультилиб, be/fpu/interwork/thumb/thumb2(для кортексов)

тестирую на lpc2148/FreeRTOS/12 задачек, динамическое выделение памяти и тд - работает без сбоев.

к выходным будет планируется всежак под mips64, avr, mingw32

Автор: Krom May 22 2008, 11:02

binutils-2.18.50 нормально собрались? Или пришлось пошаманить? У меня они собираться отказались, я пока ограничился 2.18.1

Автор: klen May 22 2008, 14:13

Цитата(Krom @ May 22 2008, 15:02) *
binutils-2.18.50 нормально собрались? Или пришлось пошаманить? У меня они собираться отказались, я пока ограничился 2.18.1

с BU давно никаких проблем нет, руками не трогаю. Что именно не компиляется/несобирается

Автор: Make_Pic May 22 2008, 19:15

Цитата(klen @ May 22 2008, 13:09) *
свежак для ARM

http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp-arm-elf_bu2.18.50.20080521_gcc4.4.0-20080516_newlib20080521_gdb6.8.7z

полный мультилиб, be/fpu/interwork/thumb/thumb2(для кортексов)

тестирую на lpc2148/FreeRTOS/12 задачек, динамическое выделение памяти и тд - работает без сбоев.

к выходным будет планируется всежак под mips64, avr, mingw32


А для MC68000/Coldfire не планируется?

Автор: Krom May 23 2008, 07:10

Цитата(klen @ May 22 2008, 18:13) *
с BU давно никаких проблем нет, руками не трогаю. Что именно не компиляется/несобирается

Конфигурирую со следующими опциями:
--prefix=${PREFIX} --target=${TARGET} --disable-nls --disable-shared --with-gnu-ld --with-gnu-as --enable-interwork --enable-multlib --with-float=soft

При сборке выдает следущее:
arlex.l: In function ‘yylex’:
arlex.l:44: error: ‘ADDLIB’ undeclared (first use in this function)
arlex.l:44: error: (Each undeclared identifier is reported only once
arlex.l:44: error: for each function it appears in.)
arlex.l:45: error: ‘ADDMOD’ undeclared (first use in this function)
arlex.l:46: error: ‘CLEAR’ undeclared (first use in this function)
arlex.l:47: error: ‘CREATE’ undeclared (first use in this function)
arlex.l:48: error: ‘DELETE’ undeclared (first use in this function)
arlex.l:49: error: ‘DIRECTORY’ undeclared (first use in this function)
arlex.l:50: error: ‘END’ undeclared (first use in this function)
arlex.l:51: error: ‘EXTRACT’ undeclared (first use in this function)
arlex.l:52: error: ‘FULLDIR’ undeclared (first use in this function)
arlex.l:53: error: ‘HELP’ undeclared (first use in this function)
arlex.l:54: error: ‘LIST’ undeclared (first use in this function)
arlex.l:55: error: ‘OPEN’ undeclared (first use in this function)
arlex.l:56: error: ‘REPLACE’ undeclared (first use in this function)
arlex.l:57: error: ‘VERBOSE’ undeclared (first use in this function)
arlex.l:58: error: ‘SAVE’ undeclared (first use in this function)
arlex.l:79: error: ‘yylval’ undeclared (first use in this function)
arlex.l:80: error: ‘FILENAME’ undeclared (first use in this function)
arlex.l:85: error: ‘NEWLINE’ undeclared (first use in this function)
arlex.c: At top level:
arlex.c:1856: warning: no previous prototype for ‘yyget_lineno’
arlex.c:1865: warning: no previous prototype for ‘yyget_in’
arlex.c:1873: warning: no previous prototype for ‘yyget_out’
arlex.c:1881: warning: no previous prototype for ‘yyget_leng’
arlex.c:1890: warning: no previous prototype for ‘yyget_text’
arlex.c:1899: warning: no previous prototype for ‘yyset_lineno’
arlex.c:1911: warning: no previous prototype for ‘yyset_in’
arlex.c:1916: warning: no previous prototype for ‘yyset_out’
arlex.c:1921: warning: no previous prototype for ‘yyget_debug’
arlex.c:1926: warning: no previous prototype for ‘yyset_debug’
arlex.c:1960: warning: no previous prototype for ‘yylex_destroy’
make[4]: *** [arlex.o] Ошибка 1
make[4]: Leaving directory `/usr/local/arm/src/build/binutils-2.18.50/binutils'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/usr/local/arm/src/build/binutils-2.18.50/binutils'
make[2]: *** [all] Ошибка 2
make[2]: Leaving directory `/usr/local/arm/src/build/binutils-2.18.50/binutils'
make[1]: *** [all-binutils] Ошибка 2
make[1]: Leaving directory `/usr/local/arm/src/build/binutils-2.18.50'
make: *** [all] Ошибка 2

Все тоже самое с binutils-2.18-1 проходит на ура

Автор: klen May 23 2008, 13:34

какойто рецидив... нипанятно че произошло.
вытяните исходники через CVS и попробуйте еще раз.

Автор: Krom May 23 2008, 13:52

Цитата(klen @ May 23 2008, 17:34) *
какойто рецидив... нипанятно че произошло.
вытяните исходники через CVS и попробуйте еще раз.

Да я вообще-то исходники с дебиана брал, может они там чего наворочали.

Автор: klen May 24 2008, 09:40

свежий OpenOCD сегодняшний

сконфигурен
--enable-parport --enable-dummy --enable-ft2232_ftd2xx --enable-amtjtagaccel --enable-ep
-93xx --enable-ecosboard --enable-at91rm9200 --enable-gw16012 --enable-presto_ftd2xx


http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/openocd.exe

Автор: Andy Great May 26 2008, 07:42

Цитата(klen @ May 24 2008, 12:40) *
свежий OpenOCD сегодняшний

сконфигурен
--enable-parport --enable-dummy --enable-ft2232_ftd2xx --enable-amtjtagaccel --enable-ep
-93xx --enable-ecosboard --enable-at91rm9200 --enable-gw16012 --enable-presto_ftd2xx
http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/openocd.exe

А поддержку JLink не проверяли?

Автор: klen May 26 2008, 08:17

Цитата(Andy Great @ May 26 2008, 11:42) *
А поддержку JLink не проверяли?

нужен? попробую с следующий раз

Автор: Andy Great May 26 2008, 09:08

Цитата(klen @ May 26 2008, 11:17) *
нужен? попробую с следующий раз

Интересно попробовать, развитие проекта я отслеживаю, но после очередной переустановки системы лень переустанавливать Autoconf, Perl etc. Или они есть для MinGW в простой упаковке?

Автор: klen May 26 2008, 16:34

Цитата(Andy Great @ May 26 2008, 13:08) *
Или они есть для MinGW в простой упаковке?

Есть конечно. тока я всеравно пол линухом для Mingw собираю (--host=i686-pc-mingw32)

Автор: klen Jun 2 2008, 19:26

Во ознаменование начала лета - летний свежак:

win32:
www.klen.org/Files/DevTools/kgp_win32_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531.7z
1. содержит большой набор барахла в виде библиотек.
2. теперь добавлена libpthread
3. можно извращатся с паралельным программированием, включена поддержка OpenMP (gcc собран с libgomp). в корне есть примерчик на эту тему с расчетом симла пи - gomp_test.c

arm-elf:
www.klen.org/Files/DevTools/kgp_arm-elf_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531_newlib-cvs20080531_openocd-svn20080602.7z
как всегда напихано все что может пригодится (multilib)

mips64-elf:
www.klen.org/Files/DevTools/kgp_mips64-elf_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531_newlib-cvs20080531.7z


avr:
www.klen.org/Files/DevTools/kgp_avr-elf_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531_avrlibc1.6.2.7z

Автор: Chak Jul 3 2008, 10:38

To klen

У Вас так легко все получается пересобрать что аж дух захватывает a14.gif .

А у меня при работе с mega2561 под WinAVR проблема которую Eric B. Weddington не хочет решать (пока). Я уже описывал ее в другой ветке но вкратце вот в чем вопрос: это касается поддержкой ядер AVR с размером памяти 256к. При обращении к библиотечным функциям с переменным числом параметров (например fprint) компилятор встраивает вызовы к встроенным макросам __prologue_saves__ / __epilogue_restores__ из библиотеки libgcc.a. Данные для этих макросов, которые готовятся на этапе вызова функций, совершенно не учитывают размера памяти больше чем 128к (64к слов), то есть, инициализируются регистры Z (ZH,ZL), а в макросах используеться инструкция EIJMP, для полноценной работы которой надо еще установить регистр EIND.
Вот и получается, что если библиотечные функции с переменным числов параметров располагаються в адресах выше чем 128к, то вся програма перестает работать.
А в Ваших сборках для AVR поддержка avr6 коректная? А если нет, то нельзя ли исправить?

Автор: klen Jul 22 2008, 13:37

свежак для арм

http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm-elf_bu2.18.50.20080720_gcc4.4.0.20080718_newlib-cvs20080720.7z

Автор: klen Aug 12 2008, 07:43

Ну че? продолжать?

ктонить пользует реально?

Автор: AHTOXA Aug 12 2008, 07:59

Цитата(klen @ Aug 12 2008, 13:43) *
Ну че? продолжать?
ктонить пользует реально?


Конечно продолжать! Использую под АРМ, АВР и i386, очень доволен. a14.gif

ЗЫ. Я вам http://electronix.ru/forum/index.php?showtopic=50612# ответил, может пригодится.

Автор: klen Aug 12 2008, 08:24

Цитата(AHTOXA @ Aug 12 2008, 11:59) *
ЗЫ. Я вам http://electronix.ru/forum/index.php?showtopic=50612# ответил, может пригодится.

дык тоже самое - в СВ не работает останов/запуск трассы. переодически проверяю билды для CВ.

седня наверно выложу сборку для win32

Автор: Andy Great Aug 18 2008, 11:06

Реально пока не пользую, но отслеживаю. Полезно очень, ИМХО, ибо начинающим сложно собрать всю систему (toolchain). Только повторно попрошу поправить сайт: сделать ссылки на свежие версии или хотя бы просмотр каталога файлов.

Автор: Сергей Борщ Aug 20 2008, 05:58

Цитата(Andy Great @ Aug 18 2008, 14:06) *
Полезно очень, ИМХО, ибо начинающим сложно собрать всю систему (toolchain).
Я думаю, что очень полезной даже для начинающих была бы максимально подробная пошаговая инструкция для такой сборки. Буквально начиная с "берем машину с только что установленной виндой и интернетом".

Автор: Andy Great Aug 20 2008, 07:09

ОФФ: вчера читал такого типа инструкцию для желающих смотреть сат ТВ на ПК. Сильно сомневаюсь в возможности удовлетворения всех "а почему у меня...". Проще (да и полезнее) делать как klen

Автор: Сергей Борщ Aug 20 2008, 08:09

Цитата(Andy Great @ Aug 20 2008, 10:09) *
ОФФ: вчера читал такого типа инструкцию для желающих смотреть сат ТВ на ПК. Сильно сомневаюсь в возможности удовлетворения всех "а почему у меня...". Проще (да и полезнее) делать как klen
Не соглашусь. Собирал mspgcc, ибо имевшаяся сборка устарела и надо было кое-что добавить (конструкторы, кое-что в инициализации). Набил некоторое количество шишек. Написал для себя инструкцию (где-то здесь выкладывал). Через некоторое время вышла официальная сборка с моими добавлениями. Снес все, что относилось к своей сборке. Теперь понадобилось добавить поддержку ядра MSP430X. Достал ту инструкцию, нашел в ней несколько пунктов, которые уже забыл и если бы она не сохранилась - наступил бы на те же грабли.

klen, безусловно, делает полезное дело. Но если кто-то "подсядет" на его сборки, а завтра klen решит (тьфу, тьфу, тьфу) оставить электронику (как Bill), то эти кто-то окажутся в тупике.

Автор: ukpyr Sep 2 2008, 18:34

Несколько вопросов. Компилирую для Mega48.
1. неправильно настраивается начало сегмента данных - компилятор настраивает на 0x60. Это обошел указанием линковщику вручную начало данных 0x100. В старой сборке 2006го года такого не было.
2. неправильно генерируется таблица векторов прерываний. фактически присутствуют только первые 10, дальше сразу идет начало программы. Соответственно включение прерываний TX, RX приводит к сбросу/зависанию программы. В старой сборке 2006го года такого тоже не было.
3. Новая версия от klen выдает ошибку при копиляции inline-ассемблерной функции - выдает что-то типа повторное определение меток, хотя в старых версиях такого не было.

И попутно - как правильно объявлять инициализированные переменные в .h файлах подключаемых библиотек - в .h объявление переменной, а в .С такое же объявление с присвоением значения и атрибутами-модификаторами ? А регистровые переменные ?

Автор: klen Sep 2 2008, 20:07

Цитата(ukpyr @ Sep 2 2008, 22:34) *
3. Новая версия от klen выдает ошибку при копиляции inline-ассемблерной функции - выдает что-то типа повторное определение меток, хотя в старых версиях такого не было.

И попутно - как правильно объявлять инициализированные переменные в .h файлах подключаемых библиотек - в .h объявление переменной, а в .С такое же объявление с присвоением значения и атрибутами-модификаторами ? А регистровые переменные ?


код в студию.
по поводу переменных вообще не понял в чем проблема.

Автор: haker_fox Sep 2 2008, 23:21

Цитата(Сергей Борщ @ Aug 20 2008, 17:09) *
оставить электронику (как Bill)

bb-offtopic.gif
Упс. А что случилось? Я-то и думаю, куда пропал этот человек?

Автор: COMA Sep 3 2008, 03:52

Насколько помню, писали что ушёл в сетевой маркетинг.

Автор: goodwin Sep 3 2008, 03:59

Цитата(COMA @ Sep 3 2008, 06:52) *
Насколько помню, писали что ушёл в сетевой маркетинг.


Ну это кто как склонен/предрасположен понимать...

Автор: Сергей Борщ Sep 3 2008, 07:28

Цитата(haker_fox @ Sep 3 2008, 02:21) *
Упс. А что случилось? Я-то и думаю, куда пропал этот человек?
Насколько я понял - кого-то из близких с того света вытащили и это на него сильно повлияло.

P.S. Вот, нашел http://electronix.ru/redirect.php?http://www.telesys.ru/wwwboards/mcontrol/1651/messages/68276.shtml на телесисах.

Автор: Make_Pic Sep 3 2008, 13:13

Цитата(Сергей Борщ @ Sep 3 2008, 10:28) *
Насколько я понял - кого-то из близких с того света вытащили и это на него сильно повлияло.

P.S. Вот, нашел http://electronix.ru/redirect.php?http://www.telesys.ru/wwwboards/mcontrol/1651/messages/68276.shtml на телесисах.


Да жаль, и SM то же видимо по тем же причинам перестал появляться на конфах. Жаль, время идет...

Автор: klen Sep 4 2008, 16:03

свежак для AVR

bu cvs 20080903
gcc 4.3.2 релиз
avrlibc 1.6.2
gdb6.8 cvs 20080904 - для сильных мужчин & моих соседей по палате
make sh rm - для подержки AVRStudio

http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-elf_bu2.18.50.20080903_gcc4.3.2_avrlibc1.6.2_gdb6.8.20080904.7z

чуток потестировал, вроде без косяков.
распаковываете куданить, тыкаете настроками проекта к avr-gcc и make. далее вы должны по идее забить про компиллер.

тем кто не вкурсе (или я ужо давно отстал) AVRS 4.14.589 AvrPluginavrgccplugin1.0.0.9 имеют косяк. Если вы используете float то разумно всегда подлинковывать libm, это позволяет ускорить скрость * операций до 144 а / до ~440 тактов для float. так вот AVRS не позволяет это сделать sad.gif как опцию -lm. точнее можно в опциях линкера но это ничего не даст, -lm должен быть к помандной строке после списка объектников приложения, таковы правила линковки LD. Я руками правлю xml файл проекта.
явно указывать libm.a некашерно потому что компиллер сам должен выбрать ее правильную версию...
если это все лечится прще - раскажите мне.

Автор: ukpyr Sep 25 2008, 05:11

Цитата
код в студию

отправил на почту

Автор: kimstik Sep 25 2008, 21:55

чтото проект не собиратеся под gcc 4.3.2 на at90usb162 - в либах путается
в kgp_avr-elf_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531_avrlibc1.6.2.7z все собирается на ура

avr-gcc -mmcu=at90usb162 -I. -gdwarf-2 -DF_CPU=8000000UL -DBOARD=BOARD_USBKEY -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED)" -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fpack-struct -fshort-enums -finline-limit=20 -Wall -Wstrict-prototypes -Wundef -Wa,-adhlns=CDC.o -I../../ -std=gnu99 -Wundef -MMD -MP -MF .dep/CDC.elf.d CDC.o Descriptors.o ../../MyUSB/Scheduler/Scheduler.o ../../MyUSB/Drivers/USB/LowLevel/LowLevel.o ../../MyUSB/Drivers/USB/LowLevel/Endpoint.o ../../MyUSB/Drivers/USB/LowLevel/DevChapter9.o ../../MyUSB/Drivers/USB/HighLevel/USBTask.o ../../MyUSB/Drivers/USB/HighLevel/USBInterrupt.o ../../MyUSB/Drivers/USB/HighLevel/Events.o ../../MyUSB/Drivers/USB/HighLevel/StdDescriptors.o --outp
ut CDC.elf -Wl,-Map=CDC.map,--cref -Wl,--relax -Wl,--gc-sections -lm
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr35/crtusb162.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:51 architecture of input file `CDC.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:51 architecture of input file `Descriptors.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Scheduler/Scheduler.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/LowLevel/LowLevel.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/LowLevel/Endpoint.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/LowLevel/DevChapter9.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/USBTask.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/USBInterrupt.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/Events.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/StdDescriptors.o' is incompatible with avr:3 output
make: *** [CDC.elf] Error 1

Автор: aesok Sep 26 2008, 05:08

Цитата(kimstik @ Sep 26 2008, 01:55) *
чтото проект не собиратеся под gcc 4.3.2 на at90usb162 - в либах путается

Код
make clean
make


Помогло?

Анатолий.

Автор: kimstik Sep 27 2008, 21:01

clean делал конечно же
не помогло
кстати и на kgp_avr-bu2.18.50.20080115_gcc4.3.0.20080111_avr-libc20080115.7z компилится на ура

Автор: aesok Sep 27 2008, 21:41

AT90USB162/82 не самое удачное название для этих чипов. Хотя их название
начинается с AT90 как у AT90USB128*, AT90PWM* и по аналогии могло показаться
что в них стоит ядро ATmega, но на самом деле они не имеют инструкций
умножения, в них стоит ядро как в новых ATtiny. AT90USB82 обладает еще одним
уникальным свойством, не смотря но то что он имеет всего 8 КВ флеш, в нем
работают инструкции JMP/CALL и вектора прерываний расположены со
смещением в 4 байта, а не два как у всех других контролеров с 8 и менее флеш.

AT90USB162/82 реально поддерживаются в GCC с версии 4.3.3
(может 4.3.2). И то для binutils 2.18 требуется небольшой патч.

Для работы я бы порекомендовал вам использовать WinAVR2080610. Если Вы будете
использовать другие сборки проверьте что компилятор не генерирует инструкции
умножения для этих контроллеров.

Анатолий.

PS: более ранние версии не будут использовать инструкцю MOVW для AT90USB162/82.

Автор: kimstik Sep 28 2008, 11:29

Цитата(aesok @ Sep 28 2008, 01:41) *
AT90USB162/82 не самое удачное название для этих чипов. Хотя их название
начинается с AT90 как у AT90USB128*, AT90PWM* и по аналогии могло показаться
что в них стоит ядро ATmega, но на самом деле они не имеют инструкций
умножения, в них стоит ядро как в новых ATtiny. AT90USB82 обладает еще одним
уникальным свойством, не смотря но то что он имеет всего 8 КВ флеш, в нем
работают инструкции JMP/CALL и вектора прерываний расположены со
смещением в 4 байта, а не два как у всех других контролеров с 8 и менее флеш.

AT90USB162/82 реально поддерживаются в GCC с версии 4.3.3
(может 4.3.2). И то для binutils 2.18 требуется небольшой патч.

Для работы я бы порекомендовал вам использовать WinAVR2080610. Если Вы будете
использовать другие сборки проверьте что компилятор не генерирует инструкции
умножения для этих контроллеров.

Анатолий.

PS: более ранние версии не будут использовать инструкцю MOVW для AT90USB162/82.


Все правильно написано.
Думаю это кому нибудь будет полезно.
прико в другом.
проект легко и непринужденно собирается этим:
kgp_avr-bu2.18.50.20080115_gcc4.3.0.20080111_avr-libc20080115.7z
kgp_avr-elf_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531_avrlibc1.6.2.7z
и собранное успешно работает в железе. <---

А 4.3.2 - не желает. И не в процессе выполнения, когда надо делать собственно умножение.
Возможно патчей каких не хватает. Мне сложно судить.
Проект кстати достаточно развитый http://electronix.ru/redirect.php?http://www.fourwalledcubicle.com/MyUSB.php

Автор: klen Oct 7 2008, 19:21

всем привет, временно осутцтвовал! мы таки выпустили LockOn Черную Акулу на моей второй основной работе beer.gif теперь чуток больше времени будет для творчества yeah.gif

свежак для arm

http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm-elf-bu2.19.50_20081005-gcc4.4.0_20081003-gdb6.8.0_20081005_newlib1.16.0.20081005.7z

Автор: klen Oct 13 2008, 10:32

свежак для avr

bu2.19.50_20081005
gcc4.4.0_20081003
avrlibc1.6.2

http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_avr-bu2.19.50_20081005-gcc4.4.0_20081003-avrlibc1.6.2.7z

Автор: klen Nov 6 2008, 13:12

ARM

http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-elf-bu2.19.50_20081106-gcc4.4.0_20081031-gdb6.8.0_20081106_newlib1.16.0.20081106.7z

кто нибудь использует bigendian, если да то где и в чем.

Автор: demiurg_spb Nov 6 2008, 14:43

Цитата(klen @ Oct 13 2008, 13:32) *
свежак для avr
bu2.19.50_20081005
gcc4.4.0_20081003
avrlibc1.6.2
Есть вопрос про файл iom88p.h
Это так и задумано?
Код
#define PORTB _SFR_IO8(0x05)
#define PORTB0 0
#define PORTB1 1
#define PORTB2 2
#define PORTB3 3
#define PORTB4 4
#define PORTB5 5
#define PORTB6 6
#define PORTB7 7

Вместо того как было раньше:
Код
#define PORTB _SFR_IO8(0x05)
#define PB0 0
#define PB1 1
#define PB2 2
#define PB3 3
#define PB4 4
#define PB5 5
#define PB6 6
#define PB7 7

Я считаю что это бред...

Автор: klen Nov 6 2008, 15:57

Цитата(demiurg_spb @ Nov 6 2008, 17:43) *
Есть вопрос про файл iom88p.h
Это так и задумано?
Код
#define PORTB _SFR_IO8(0x05)
#define PORTB0 0
#define PORTB1 1
#define PORTB2 2
#define PORTB3 3
#define PORTB4 4
#define PORTB5 5
#define PORTB6 6
#define PORTB7 7

Вместо того как было раньше:
Код
#define PORTB _SFR_IO8(0x05)
#define PB0 0
#define PB1 1
#define PB2 2
#define PB3 3
#define PB4 4
#define PB5 5
#define PB6 6
#define PB7 7

Я считаю что это бред...

Хехе, это не компиллер, это не комне smile.gif
позвонил другу брату и товарищу aesok, этот косяг и так быть не должно. должно быть и длинное и короткое определенее портов. Типа уже все поправлено, если все будеть нотмально то завтра получим свежак, с обновленным avrlibc1.6.3 там будет как раньше.

Автор: AHTOXA Nov 10 2008, 19:01

Цитата(klen @ Nov 6 2008, 19:12) *
ARM

http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-elf-bu2.19.50_20081106-gcc4.4.0_20081031-gdb6.8.0_20081106_newlib1.16.0.20081106.7z


Респект!
А он умеет компилировать под Cortex-M3? Попытался сейчас собрать мигающий светодиод для http://electronix.ru/redirect.php?http://olimex.com/dev/stm32-h103.html, и получил что-то типа
as : unknown option -mcpu=CortexM3 (не дословно).

И ещё маленькая просьба - собирать openocd с поддержкой параллельного портаsmile.gif

Автор: klen Nov 11 2008, 18:28

Свежак АRM
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-elf-bu2.19.50_20081108-gcc4.4.0_20081107-gdb6.8.0_20081108_newlib1.16.0.20081108.7z

Свежак AVR
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-bu2.19.50_20081108-gcc4.4.0_20081107-gdb6.8.0_20081108-avrlibc1.6.2.7z
компиллер теперь оптимизирует битовые сдвиги на предмен использования кинструкции swap, спасибо aesok

2_AHTOXA
-mcpu=CortexM3 я патсталом smile.gif
конечно умеет тока ему об этом нада сказать. рекомендую arm-kgp-elf-gcc --target-help и arm-kgp-elf-as --target-help поглядеть, там увидите опции платформо-специфичные
для GCC нада -mtumb -mcpu=cortex-m3 -mtune=cortex-m3 -march=armv7-m

вот пример исходника С:

Код
int mul (int x, int y)
{
  return x * y;
}
int div (int x, int y)
{
  return x / y;
}

выход для arm7tdmi: arm-kgp-elf-gcc -c a.c -mcpu=armv4t -S -Os
Код
    .file    "a.c"
    .text
    .align    2
    .global    mul
    .type    mul, %function
mul:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    mul    r0, r1, r0
    bx    lr
    .size    mul, .-mul
    .global    __divsi3
    .align    2
    .global    div
    .type    div, %function
div:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    str    lr, [sp, #-4]!
    bl    __divsi3
    ldr    pc, [sp], #4
    .size    div, .-div
    .ident    "GCC: (GNU) 4.4.0 20081107 (experimental)"


выход для cortex-m3: arm-kgp-elf-gcc -c a.c -mcpu=cortex-m3 -mthumb -Os -S
Код
    .syntax unified
    .thumb
    .file    "a.c"
    .text
    .align    2
    .global    mul
    .thumb
    .thumb_func
    .type    mul, %function
mul:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    mul    r0, r0, r1
    bx    lr
    .size    mul, .-mul
    .align    2
    .global    div
    .thumb
    .thumb_func
    .type    div, %function
div:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    sdiv    r0, r0, r1
    bx    lr
    .size    div, .-div
    .ident    "GCC: (GNU) 4.4.0 20081107 (experimental)"


во втором случае видно что используется аппаратный делитель целых типов
как проект соберется отпешитесь что все впорядке или не в порядке , сам хочу в терре купить олимекс
плату STM32-H103

попробывал тупо собрать проекты для этой платы с сайта олимекса, все собрались, тока нада чуток опции имя тулсов и опции objcopy поправить. зашить некуда. посмотрел исходники примеров и либ STM... у тех кто их писал видимо рак мозга, такого издевательства над языком С я даже от микрософта не видал.

Автор: AHTOXA Nov 11 2008, 20:14

Цитата(klen @ Nov 12 2008, 00:28) *
2_AHTOXA
-mcpu=CortexM3 я патсталом smile.gif

Я ж написал - не дословноsmile.gif Я тупо пытался скомпилить пример с олимекса, поправив имена компилятора и проч.
Цитата
для GCC нада -mtumb -mcpu=cortex-m3

Ну вот, на это и ругалосьsmile.gif
Цитата
как проект соберется отпешитесь что все впорядке или не в порядке , сам хочу в терре купить олимекс
плату STM32-H103

У меня как раз такая. Хорошо, завтра вечерком скачаю и отпишусь.
Цитата
попробывал тупо собрать проекты для этой платы с сайта олимекса, все собрались, тока нада чуток опции имя тулсов и опции objcopy поправить.

У меня вроде до objcopy дело не доходило... Хотя я не углублялся, решил сначала спросить, возможно ли это в принципе.
Цитата
посмотрел исходники примеров и либ STM... у тех кто их писал видимо рак мозга, такого издевательства над языком С я даже от микрософта не видал.

Это да, это очень сильно:-)))

Автор: AHTOXA Nov 12 2008, 16:23

Цитата(klen @ Nov 12 2008, 00:28) *
как проект соберется отпешитесь что все впорядке или не в порядке , сам хочу в терре купить олимекс
плату STM32-H103

попробывал тупо собрать проекты для этой платы с сайта олимекса, все собрались, тока нада чуток опции имя тулсов и опции objcopy поправить.


Докладываю, скомпилировалось. Но bin-файл получился за 500Мб:-) Что надо сказать objcopy?

Автор: klen Nov 12 2008, 18:13

Цитата(AHTOXA @ Nov 12 2008, 19:23) *
Докладываю, скомпилировалось. Но bin-файл получился за 500Мб:-) Что надо сказать objcopy?

Код
arm-kgp-elf-objcopy -O ihex ../../out/image.elf ../../out/image.hex
arm-kgp-elf-objcopy -O elf32-littlearm -S ../../out/image.elf ../../out/image.bin
arm-kgp-elf-objdump -x --syms ../../out/image.elf > ../../out/image.dmp
arm-kgp-elf-objdump -h -S ../../out/image.elf > ../../out/image.lss
arm-kgp-elf-size -B -t -x ../../out/image.elf

Автор: AHTOXA Nov 12 2008, 19:34

Цитата(klen @ Nov 13 2008, 00:13) *
Код
arm-kgp-elf-objcopy -O elf32-littlearm -S ../../out/image.elf ../../out/image.bin

Так bin получается маленький, но он получается не bin а elf sad.gif

Пока выкрутился так:
Код
$(OBJCOPY) -O binary -j .text -S $(ELF) $(BIN)


Светодиод моргает! smile.gif
Но это конечно не дело...

Автор: Rst7 Nov 13 2008, 06:49

Цитата(klen @ Nov 11 2008, 20:28) *
Свежак AVR
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-bu2.19.50_20081108-gcc4.4.0_20081107-gdb6.8.0_20081108-avrlibc1.6.2.7z
компиллер теперь оптимизирует битовые сдвиги на предмен использования кинструкции swap, спасибо aesok


Решил я опять помучать ГЦЦ. Вытащил по ссылке, начал пробовать. Появилась пара вопросов. Первый:

Код
test.c:

typedef unsigned char UREG;
typedef signed char REG;


static void _netw_memcpy(char *d, char *s, UREG l);

void netw_memcpy(void *d, void *s, UREG l)
{
  _netw_memcpy((char*)d,(char*)s,l);
}

static void _netw_memcpy(char *d, char *s, UREG l)
{
  char c;
  if (!l) return;
  do
  {
    c=*s++;
    *d++=c;
  }
  while(--l);
}


после gcc -O9 -S -mmcu=atmega168 test.c

Код
    .file    "test.c"
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
    .global __do_copy_data
    .global __do_clear_bss
    .text
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
    push r16
    push r17
    push r28
    push r29
/* prologue: function */
/* frame size = 0 */
    tst r20
    breq .L4
    ldi r18,lo8(0)
    ldi r19,hi8(0)
    subi r20,lo8(-(-1))
    mov r16,r20
    ldi r17,lo8(0)
    movw r28,r16
    adiw r28,1
.L3:
    movw r30,r24
    add r30,r18
    adc r31,r19
    movw r26,r22
    add r26,r18
    adc r27,r19
    ld r21,X
    st Z,r21
    subi r18,lo8(-(1))
    sbci r19,hi8(-(1))
    cp r18,r28
    cpc r19,r29
    brne .L3
.L4:
/* epilogue start */
    pop r29
    pop r28
    pop r17
    pop r16
    ret
    .size    netw_memcpy, .-netw_memcpy


Как-то IAR с этим справляется на ура:
Код
        RSEG CODE:CODE:NOROOT(1)
//    8 __x_z void netw_memcpy(void *d, void *s, UREG l)
netw_memcpy:
//    9 {
//   10   _netw_memcpy((char*)d,(char*)s,l);
        REQUIRE _netw_memcpy
       ;               // Fall through to label _netw_memcpy
//   11 }
//   12

        RSEG CODE:CODE:NOROOT(1)
//   13 static __x_z void _netw_memcpy(char *d, char *s, UREG l)
_netw_memcpy:
//   14 {
//   15   char c;
//   16   if (!l) return;
        TST     R16
        BREQ    ??_netw_memcpy_0
//   17   do
//   18   {
//   19     c=*s++;
??_netw_memcpy_1:
        LD      R17, Z+
//   20     *d++=c;
        ST      X+, R17
//   21   }
//   22   while(--l);
        DEC     R16
        BRNE    ??_netw_memcpy_1
??_netw_memcpy_0:
        RET
//   23 }


Вот и вопрос, ничего там в оптимизаторе случайно не сломали? А то что-то совсем мрачно. И вроде не было такого.

Теперь вопрос номер два. Сунул ему более глобальный файл. Получил вот такое
Код
F:\GCC\kgp_avr\avr-kgp-elf\bin>gcc -O9 -S network.c -mmcu=atmega168
network.c: In function 'INT_ETH_PROCESS_PKT2':
network.c:810: error: unable to find a register to spill in class 'POINTER_REGS'
network.c:810: error: this is the insn:
(insn 3268 2214 3269 284 network.c:88 (set (mem/c:QI (plus:HI (reg/f:HI 28 r28)
                (const_int 24 [0x18])) [27 S1 A8])
        (reg:QI 30 r30)) 4 {*movqi} (nil))
network.c:810: internal compiler error: in spill_failure, at reload1.c:2093
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

F:\GCC\kgp_avr\avr-kgp-elf\bin>


Баг-репорт отправлять прямо туда или Вам?

Автор: klen Nov 13 2008, 09:15

1. чтото мне тож это не нравица, есть о чем подумать
2. -O9 всетаки нет такого уровня оптимизации, поменяйте на 0,1,2,3,s. должен пережевать исходник.
3. ветка 4.4 нестабильная, вылазит гадость, болше чем из стабильных.

Автор: Rst7 Nov 13 2008, 09:22

Цитата
-O9 всетаки нет такого уровня оптимизации, поменяйте на 0,1,2,3,s. должен пережевать исходник.


-O3 тоже фаталити. То с девяткой я погорячился (пользуюсь то IAR'ом)

Автор: klen Nov 13 2008, 09:46

Цитата(Rst7 @ Nov 13 2008, 12:22) *
-O3 тоже фаталити. То с девяткой я погорячился (пользуюсь то IAR'ом)

кусок кода который роняет компиллер можете дать?

Автор: Rst7 Nov 13 2008, 10:02

Там почти что одна огромная функция. Набитая циклами, кейсами, goto и прочим. В личку могу дать.

Автор: klen Nov 13 2008, 10:03

Цитата(Rst7 @ Nov 13 2008, 13:02) *
Там почти что одна огромная функция. Набитая циклами, кейсами, goto и прочим. В личку могу дать.

давайте

Автор: AHTOXA Nov 13 2008, 10:09

А мне что-нить подскажете? smile.gif

Автор: demiurg_spb Nov 13 2008, 11:38

Цитата(klen @ Nov 13 2008, 12:15) *
1. чтото мне тож это не нравица, есть о чем подумать
Да и раньше было не сахар (я тут писал об оптимизации скорости вывода на дисплей).
Таким макаром циклы реализовывать это надо уметь.
Самое обидное, что ничего в этом направлении не меняется уже давно...

Автор: Rst7 Nov 13 2008, 11:51

Цитата
давайте


Могу, кстати, еще в досыл дать иаровский листинг, дабы было видно, куда стремиться wink.gif

Автор: AHTOXA Nov 13 2008, 19:44

Цитата(AHTOXA @ Nov 13 2008, 16:09) *
А мне что-нить подскажете? smile.gif


В общем, сделал пока так. Сравнил elf-ы, производимые arm-kgp-elf- и arm-none-eabi-, нашёл, что в arm-kgp-elf- есть "лишняя" секция .eh_frame. И скомандовал objcopy выкинуть эту секцию при формировании bin-файла. bin стал получаться нормального размера, светодиод мигает.
(Напомню, я пытаюсь работать с arm-kgp-elf- и stm32)
Я правильно сделал?

Автор: Petka Nov 13 2008, 22:59

Цитата(klen @ Nov 6 2008, 16:12) *
кто нибудь использует bigendian, если да то где и в чем.

XScale IXP4xx

Автор: klen Nov 14 2008, 06:52

Цитата(AHTOXA @ Nov 13 2008, 22:44) *
В общем, сделал пока так. Сравнил elf-ы, производимые arm-kgp-elf- и arm-none-eabi-, нашёл, что в arm-kgp-elf- есть "лишняя" секция .eh_frame. И скомандовал objcopy выкинуть эту секцию при формировании bin-файла. bin стал получаться нормального размера, светодиод мигает.
(Напомню, я пытаюсь работать с arm-kgp-elf- и stm32)
Я правильно сделал?


я также делаю, тока по другому
.eh_frame - секция исполняемого кода, содержит код относящийся к механизму обработки исключений, при компиляции языка С механизм исключения отсутствует, поэтому этот код ессесено не нужен. Текущее состояние компиллера таково что без разбора сует эту секцию всегда независимо от языка с которого компиляется исходник. Я использую С для армов, соответственно код этой мертвой секции тока бесполезна использует флеш. можно удалить ее как Вы предлагаете strip --remove-section=".eh_frame" , но проще ее просто не пропустить на выход линкера прописав в скрипте линкера :

SECTIONS
{
.......................
.......................

/DISCARD/ : /*секцию исключений ф топку*/
{
*(.eh_frame)
}

........................
........................

}

Если вы умудряетесь использовать C++ (я это делал тока для тестирования, кстата вшивалось в lpc2103? шмешно, правдв?) и возможно используете исключения то эту секцию удалять нельзя. Я даже боюсь предположить что будет если кинуть ексепшен smile.gif если соберется проект.

Автор: AHTOXA Nov 14 2008, 19:44

Цитата(klen @ Nov 14 2008, 12:52) *
я также делаю, тока по другому
.eh_frame - секция исполняемого кода, содержит код относящийся к механизму обработки исключений
Теперь стало понятнее. Указал линкеру, что эту секцию надо поместить в ROM:
Код
...
    *(.text)        /* Program code */
    *(.eh_frame)    /* exceptions */
    *(.rodata)      /* Read only data */
    } >rom

, всё стало нормально без выкидывания. Пусть будет, cpp я использовать собираюсь (scmRtos), правда, без exceptions наверное smile.gif
Цитата
Если вы умудряетесь использовать C++ (я это делал тока для тестирования, кстата вшивалось в lpc2103? шмешно, правдв?)

Тут люди в AVR-ках его используют, и ничего, нормуль:-)
Цитата
если соберется проект.

А что, есть сомнения? Вообще, что посоветуете использовать для cortex-m3, arm-kgp-elf- или arm-none-eabi- из Sourcery G++ ?

Автор: klen Nov 15 2008, 08:03

>А что, есть сомнения?

есть сомнения в целесообразности

>Вообще, что посоветуете использовать для cortex-m3, arm-kgp-elf- или arm-none-eabi- из Sourcery G+

выбери то что меньше глючить и дает лучший код

Автор: Сергей Борщ Nov 15 2008, 08:14

Цитата(klen @ Nov 14 2008, 08:52) *
Текущее состояние компиллера таково что без разбора сует эту секцию всегда независимо от языка с которого компиляется исходник.
А CFLAGS += -fno-exceptions не спасает?

Автор: klen Nov 15 2008, 10:27

Цитата(Сергей Борщ @ Nov 15 2008, 11:14) *
А CFLAGS += -fno-exceptions не спасает?

при компиляции С эта опция по умолчанию должна быть выключена, так написано в описании фронтэнда GCC. C++ по умолчанию включена.

Автор: AHTOXA Nov 15 2008, 12:26

Цитата(klen @ Nov 15 2008, 14:03) *
выбери то что меньше глючить и дает лучший код


Хорошо, спрошу иначе: какие потенциальные преимущества у arm-kgp-elf- перед arm-none-eabi- ? Кроме того, что свежак? smile.gif

Цитата(Сергей Борщ @ Nov 15 2008, 14:14) *
А CFLAGS += -fno-exceptions не спасает?


Да там чисто сишный примерчик. Но всё равно попробую.

Автор: ReAl Nov 15 2008, 13:23

Цитата(Rst7 @ Nov 13 2008, 08:49) *
Как-то IAR с этим справляется на ура:

бз-з-з-з...
Странно.
WinAVR-20060421 (3.4.6) -Os
Код
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
/* prologue: frame size=0 */
/* prologue end (size=0) */
    movw r26,r24
    movw r30,r22
.L7:
    tst r20
    breq .L1
    ld r24,Z+
    st X+,r24
    subi r20,lo8(-(-1))
    rjmp .L7
.L1:
    ret
/* epilogue: frame size=0 */


WinAVR-20060421 (3.4.6) -O2 и -O3
Код
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
/* prologue: frame size=0 */
/* prologue end (size=0) */
    movw r26,r24
    movw r30,r22
    rjmp .L7
.L9:
    ld r24,Z+
    st X+,r24
    subi r20,lo8(-(-1))
.L7:
    tst r20
    brne .L9
    ret
/* epilogue: frame size=0 */


WinAVR-20070525 (4.1.2) и WinAVR-20071221 (4.2.2) -Os, -O2 и -O3
Код
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
/* prologue: frame size=0 */
/* prologue end (size=0) */
    tst r20
    breq .L5
    movw r26,r22
    movw r30,r24
.L4:
    ld r24,X+
    st Z+,r24
    subi r20,lo8(-(-1))
    brne .L4
.L5:
    ret
/* epilogue: frame size=0 */


Что-то их не туда понесло в более свежих версиях sad.gif
То-то я не спешу менять...

Автор: klen Nov 16 2008, 21:12

получилось
опции -Os


Код
void cpy ( char* x , char* y , size_t s  )
{
  if ( !s ) return;
  size_t t = s;
  do
   {
     *(y++) = *(x++);
   }
  while( --t );
}


Код
000000DC:   01FC        MOVW      R30,R24        Copy register pair
000000DD:   01DB        MOVW      R26,R22        Copy register pair
22:         if ( !s ) return;
000000DE:   1541        CP        R20,R1         Compare
000000DF:   0551        CPC       R21,R1         Compare with carry
000000E0:   F029        BREQ      PC+0x06        Branch if equal
26:            *(y++) = *(x++);
000000E1:   9181        LD        R24,Z+         Load indirect and postincrement
000000E2:   938D        ST        X+,R24         Store indirect and postincrement
28:         while( --t );
000000E3:   5041        SUBI      R20,0x01       Subtract immediate
000000E4:   4050        SBCI      R21,0x00       Subtract immediate with carry
000000E5:   CFF8        RJMP      PC-0x0007      Relative jump
000000E6:   9508        RET                      Subroutine return


это вроде то что нужно
что характерно, при замене типа счетчика на char начинается маразм.

Автор: Rst7 Nov 16 2008, 21:45

Цитата(klen @ Nov 16 2008, 23:12) *
что характерно, при замене типа счетчика на char начинается маразм.

Дык надо лечить, тем более, что явно чтото сломали. Зачем мне int в счетчике, если нативный тип для AVR - unsigned char.

Вот приведенный выше результат после 4.1.2 и 4.2.2 - это то, что должно быть.

PS А что с падением? Или там совсем мрачно?

Автор: Rst7 Nov 17 2008, 06:03

Цитата
это вроде то что нужно


Кстати, и к этому коду есть вопросы. IAR
Код
        RSEG CODE:CODE:NOROOT(1)
//   27 __x_z void cpy ( char* x , char* y , size_t s  )
cpy:
//   28 {
        MOV     R19, R25
        MOV     R20, R24
//   29   if ( !s ) return;
        MOV     R18, R16
        OR      R18, R17
        BREQ    ??cpy_0
//   30   size_t t = s;
        MOVW    R25:R24, R17:R16
//   31   do
//   32    {
//   33      *(y++) = *(x++);
??cpy_1:
        LD      R16, X+
        ST      Z+, R16
//   34    }
//   35   while( --t );
        SBIW    R25:R24, 1
        BRNE    ??cpy_1
??cpy_0:
        MOV     R24, R20
        MOV     R25, R19
        RET
//   36 }


И тут есть куда копать...

Автор: klen Nov 17 2008, 11:31

Цитата(Rst7 @ Nov 17 2008, 09:03) *
Кстати, и к этому коду есть вопросы. IAR

какие? у ИАРа на две инструкции длинее. иар не смог сделать группировку и выполнить movw
причины почему падает не смотрел, я рабочие дни работаю, хобби только по выходным

Автор: Rst7 Nov 17 2008, 11:45

Цитата
иар не смог сделать группировку и выполнить movw


Зато GCC перестарался с циклом - лишних 3 такта на итерацию. Что суть более зло. Правда, я там видел у Вас -Os, а что будет с -O3?

Автор: ukpyr Nov 19 2008, 17:49

вопрос к klen : на какую папку настроена ваша сборка avr-gcc ?
при запуске avr-gcc выдает сообщение что не находит сс1.
при добавлении пути к сс1 в %PATH% ругается что не находит какой-то библиотечный .o файл.
в сборках WinAVR этого не было.

Автор: klen Nov 21 2008, 07:12

Цитата(ukpyr @ Nov 19 2008, 20:49) *
вопрос к klen : на какую папку настроена ваша сборка avr-gcc ?
при запуске avr-gcc выдает сообщение что не находит сс1.
при добавлении пути к сс1 в %PATH% ругается что не находит какой-то библиотечный .o файл.
в сборках WinAVR этого не было.

это косяг, такого не должно быть. Как Вы его устанавливали?
1. распаковываете архив.
2. кладете содержимое в отдельную папку XXX .
3. прописываете путь к XXX\bin

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

Автор: ukpyr Nov 21 2008, 09:28

так и сделал. не работает :

Цитата
cc1 -quiet -v -I. -Ilib -imultilib avr5 -iprefix e:\work\tools\prg\lng\c\gcc\avr\bin\../lib/gcc/avr/4.4.0/ -MD out\obj\skss_01.d -MF E:\work\projects\outcome\delta\skss_01\src\out\.dep\skss_01.o.d -MP -MQ out\obj\skss_01.o -DF_CPU=1000000UL -include skss_01.h skss_01.c -quiet -dumpbase skss_01.c -mmcu=atmega16 -auxbase-strip out\obj\skss_01.o -gdwarf-2 -Os -Wall -Wstrict-prototypes -Wundef -std=gnu99 -version -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -ffunction-sections -o c:\windows\Temp/ccTaTY11.s
avr-gcc: CreateProcess: No such file or directory


WinAVR 4.1.1 из той же папки компилирует нормально.

и еще бинарные файлы вашей сборки намного больше чем у WinAVR : avr/bin занимает 33М против 6М.

Автор: klen Nov 22 2008, 09:08

2_ukpyr
1. какой архив используете.
2. по размеру. я собираю все библиотеи с отладочной информацией. вдруг понадобится. в прошивку всервно идет только целевой код.

Автор: ukpyr Nov 22 2008, 17:25

Цитата
1. какой архив используете.

kgp_avr-bu2.19.50_20081005-gcc4.4.0_20081003-avrlibc1.6.2.7z

с последним WinAVR то же самое, пока не могу понять в чем причина.

Цитата
по размеру. я собираю все библиотеи с отладочной информацией. вдруг понадобится. в прошивку всервно идет только целевой код

просто собираю флешку портабельного софта для работы на выездах, приходится экономить объем.

Автор: klen Nov 24 2008, 08:25

Цитата(ukpyr @ Nov 22 2008, 20:25) *
kgp_avr-bu2.19.50_20081005-gcc4.4.0_20081003-avrlibc1.6.2.7z

с последним WinAVR то же самое, пока не могу понять в чем причина.
просто собираю флешку портабельного софта для работы на выездах, приходится экономить объем.

я себе такую тоже сделал.
для этого сделал себе MinGW с динамической конфигурацией путей в момент загрузки консоли.
в пакете всегда есть msys, и все тулсы для сборки проектов win32,AVR,ARM
с эклипсом трудно - на машине в которую воткнуто флеш должна быть еще и ява машина.

если хотите могу выложть - переделаете под себя.

Автор: mikel Dec 8 2008, 11:29

Сергей, а KGP-ARM по идее поддерживает VFP в ARM926EJ-S в отличии от CodeSourcery Lite? Я что-то ни одной готовой тулчейн с поддержкой vfp не нашел.

Автор: ukpyr Dec 12 2008, 09:36

Цитата
вопрос к klen : на какую папку настроена ваша сборка avr-gcc ?
при запуске avr-gcc выдает сообщение что не находит сс1.
при добавлении пути к сс1 в %PATH% ругается что не находит какой-то библиотечный .o файл. в сборках WinAVR этого не было.

хм, заработало после создания сист.переменных GCC_EXEC_PREFIX (путь к сс1), LIBRARY_PATH (пути к lib, lib/gcc/avr/4..).
gcc вроде должен находить сам, нет ?

Автор: IgorKossak Dec 12 2008, 10:06

Цитата(ukpyr @ Dec 12 2008, 11:36) *
хм, заработало после создания сист.переменных GCC_EXEC_PREFIX (путь к сс1), LIBRARY_PATH (пути к lib, lib/gcc/avr/4..).
gcc вроде должен находить сам, нет ?

Это зависит от установщика пакета. Прописывает ли он автоматически все нужные пути и переменные. Не все установщики это делают.
Кроме того пользователь может установить тулчейны для разных платформ. Как быть в таком случае?

Автор: ukpyr Dec 12 2008, 11:41

Цитата
Кроме того пользователь может установить тулчейны для разных платформ. Как быть в таком случае?

у меня так и сделано - на флешке тулчейны для AVR,ARM,Win32.
так вот некоторым версиям достаточно добавить путь к папке bin нужного тулчейна в начале скрипта компиляции. В новых это не проходит - ругается что не находит cc1, crt*.o и т.п. Если дополнительно прописать пути к этим файлам в переменные GCC_EXEC_PREFIX, LIBRARY_PATH в скрипте, то компилирует нормально. Непонятно почему gcc не может находить эти пути самостоятельно ?

Автор: Сергей Борщ Dec 12 2008, 11:48

Цитата(IgorKossak @ Dec 12 2008, 12:06) *
Кроме того пользователь может установить тулчейны для разных платформ. Как быть в таком случае?
В таком случае все действия делают через вызов <имя_платформы>-gcc.exe, а уже он находит необходимые as, cc1, ld и библиотеки. Ищет как по некоторым абсолютным путям, так и по относительным путям от того места, где лежит сам. По-моему так. Можно запустить его на компиляцию с ключем -v и он расскажет где что искал и где что нашел.

Автор: ukpyr Dec 12 2008, 14:05

Цитата
Ищет как по некоторым абсолютным путям, так и по относительным путям от того места, где лежит сам
так вот вопрос - почему не ищет и не находит ?

Автор: Сергей Борщ Dec 12 2008, 14:18

Цитата(ukpyr @ Dec 12 2008, 16:05) *
так вот вопрос - почему не ищет и не находит ?
Так покажите, что пишет -v, подумаем. Попробуйте для WinAVR и сборки klen-а, сравним.
Код
echo int main() {return 0;} > test.c && gcc -v test.c >log.txt 2>&1

Автор: klen Dec 12 2008, 17:35

я давно порпавил код чтоб ничего прописывать не надобыло. вся путевая адресация относительно корневой директории пакетка.
это какой то глюк давайте разбиратся.
покажите что напишет сс1 -v


на выходных пересоберу все - еще раз проверим все. все работало уде давно и долго - я и проверять престал.

Автор: ukpyr Dec 12 2008, 18:10

о, собралось.
не знаю что за глюк был.

запуск компилятора :

Цитата
set PATH=%GCC_ROOT%\avr_kgp\bin;%PATH%
avr-gcc -v main.c >1.txt 2>2.txt

pause



вывод :
Цитата
Using built-in specs.
Target: avr-kgp-elf
Configured with: ../../src/gcc-4.4-20081107/configure --prefix=/kgp_avr --target=avr-kgp-elf --disable-nls --enable-languages=c,c++ -v
Thread model: single
gcc version 4.4.0 20081107 (experimental) (GCC)
Klen's GCC package (KGP) for 8-bit AVR/elf platform
see latest build in www.klen.orgCOLLECT_GCC_OPTIONS='-v'
e:/work/tools/prg/lng/c/gcc/avr_kgp/libexec/gcc/avr-kgp-elf/4.4.0/cc1.exe -quiet -v -iprefix e:\work\tools\prg\lng\c\gcc\avr_kgp\bin\../lib/gcc/avr-kgp-elf/4.4.0/ main.c -quiet -dumpbase main.c -auxbase main -version -o c:\windows\Temp/cco66buf.s
ignoring nonexistent directory "e:/work/tools/prg/lng/c/gcc/avr_kgp/avr-kgp-elf/sys-include"
#include "..." search starts here:
#include <...> search starts here:
e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/include
e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/include-fixed
e:/work/tools/prg/lng/c/gcc/avr_kgp/avr-kgp-elf/include
End of search list.
GNU C (GCC) version 4.4.0 20081107 (experimental) (avr-kgp-elf)
compiled by GNU C version 4.3.2, GMP version 4.2.4, MPFR version 2.3.2.
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: ecd85a928d73c60df54246d38c43bb7a
COLLECT_GCC_OPTIONS='-v'
e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/../../../../avr-kgp-elf/bin/as.exe -o c:\windows\Temp/ccgV11Cj.o c:\windows\Temp/cco66buf.s
COMPILER_PATH=e:/work/tools/prg/lng/c/gcc/avr_kgp/libexec/gcc/avr-kgp-elf/4.4.0/;e:/work/tools/prg/lng/c/gcc/avr_kgp/libexec/gcc/;e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/../../../../avr-kgp-elf/bin/
LIBRARY_PATH=e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/;e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/;e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/../../../../avr-kgp-elf/lib/
COLLECT_GCC_OPTIONS='-v'
e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/../../../../avr-kgp-elf/bin/ld.exe -m avr2 e:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/../../../../avr-kgp-elf/lib/crts8515.o -Le:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0 -Le:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc -Le:/work/tools/prg/lng/c/gcc/avr_kgp/lib/gcc/avr-kgp-elf/4.4.0/../../../../avr-kgp-elf/lib c:\windows\Temp/ccgV11Cj.o -lgcc -lc -lgcc


проверю на других таргетах.

Автор: klen Dec 13 2008, 08:43

Цитата(mikel @ Dec 8 2008, 14:29) *
Сергей, а KGP-ARM по идее поддерживает VFP в ARM926EJ-S в отличии от CodeSourcery Lite? Я что-то ни одной готовой тулчейн с поддержкой vfp не нашел.

вопрос не понял.

Автор: KanKan Dec 14 2008, 16:11

Цитата(klen @ Dec 13 2008, 11:43) *
вопрос не понял.


Ну вообще меня интересовало будет ли gcc генерить hardware VFP/FPU код для LPC3180 при использовании -mfpu=vfp. Как я понял, в LPC3180 есть "стандартный" армовский сопроцессор VFP9-S (VFPv2).

Я вроде-бы где-то читал что халявная Codesourcery Lite не генерит hardware vfp код. Мол только платные версии это могут.
Хотя теперь уже сомневаюсь... Может имелись ввиду старые версии codesourcery с GCC до 4.0 которые не поддерживали VFP вообще. А может писали про то что библиотеки в Lite версиях собраны без поддержки VFP а а новые Pro версии включают newlib которая"optimized for vfp".
Меня интересует возможность использования сопроцессора в своем (не библиотечном) C-коде.

Извиняюсь за непонятность вопроса smile.gif Для меня это все несколько в новинку - что ARM что GNU toolchain.

PS: задавая вопрос случайно зашел под старым (забытым) ником mikel.

Автор: klen Dec 15 2008, 09:44

2_KanKan

код test.c

Код
double D(double a , double b)
{
  return (a - b) + 0.5*(a-b)*(a-b) + 0.25*(a-b)*(a-b)*(a-b);
}


$ arm-kgp-elf-gcc -S test.c -mfloat-abi=softfp -mfpu=vfp

Код
    .file    "test.c"
    .text
    .align    2
    .global    D
    .type    D, %function
D:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    fmdrr    d4, r0, r1
    fmdrr    d5, r2, r3
    fsubd    d7, d4, d5
    fldd    d6, .L3
    fldd    d5, .L3+8
    fmuld    d6, d7, d6
    fmuld    d5, d7, d5
    fcpyd    d4, d7
    fmuld    d5, d7, d5
    fmacd    d4, d7, d6
    fmacd    d4, d7, d5
    fmrrd    r0, r1, d4
    bx    lr
.L4:
    .align    2
.L3:
    .word    0
    .word    1071644672
    .word    0
    .word    1070596096
    .size    D, .-D
    .comm    z,8,4
    .ident    "GCC: (GNU) 4.4.0 20081003 (experimental)"


оно? все инструкции начинающиеся с "f" относятся ксопроцессору VFP

Автор: KanKan Dec 15 2008, 11:08

Цитата(klen @ Dec 15 2008, 12:44) *
2_KanKan

.......

оно? все инструкции начинающиеся с "f" относятся ксопроцессору VFP


Ну да, вроде оно!
Народ на других форумах правда упоминает некотрые странности/баги gcc-шного кода для VFP, но это уже баги gcc а не конкретной сборки, да и к томуже старых версий.
Спасибо. Я сам пока разбираюсь с армами на примере ARM7 и Cortex-M3, до 9-го и сопроцессора еще не добрался, но уже давно лежит плата на lpc3180 которую надо запустить с поддержкой vfp для одного хобби-проекта.

Автор: ukpyr Dec 17 2008, 12:32

ошибка в файле avr/wdt.h:133:5: error: operator '||' has no left operand :

Код
#if || defined(__AVR_ATxmega64A1__) \
|| defined(__AVR_ATxmega64A3__) \
|| defined(__AVR_ATxmega128A1__) \
|| defined(__AVR_ATxmega128A3__) \
|| defined(__AVR_ATxmega256A3__) \
|| defined(__AVR_ATxmega256A3B__)

Автор: ukpyr Dec 17 2008, 12:32

?

Автор: klen Dec 21 2008, 20:15

убрать нада первый || и все.

#if || defined(__AVR_ATxmega64A1__) \

поменять на

#if defined(__AVR_ATxmega64A1__) \

Автор: klen Dec 23 2008, 15:00

свежак для AVR

bu2.19.51_20081223
gcc4.4.0_20081223
gdb6.8.0_20081223
avrlibc1.6.4

 kgp_avr_bu2.19.50_20081223_gcc4.4.0_20081223_gdb6.8.0_20081223_avrlibc1.6.4.7z ( 8.8 мегабайт ) : 57
 

Автор: kimstik Dec 25 2008, 12:02

Цитата(klen @ Dec 23 2008, 18:00) *
свежак для AVR

bu2.19.51_20081223
gcc4.4.0_20081223
gdb6.8.0_20081223
avrlibc1.6.4

проверил на LUFA(MyUSB) - работает
код просел на 22 байта в сравнении gcc4.4.0.20080530 smile.gif

Автор: ikX Dec 25 2008, 13:37

Нельзя ли в одной из следующих сборок (если таковы конечно будут) gdb собрать с поддержкой TUI-режима ? Или такой режим не работает в Win32?

Автор: klen Dec 25 2008, 21:31

Цитата(ikX @ Dec 25 2008, 16:37) *
Нельзя ли в одной из следующих сборок (если таковы конечно будут) gdb собрать с поддержкой TUI-режима ? Или такой режим не работает в Win32?

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

а зачем собсно? окна это зло!

Автор: ukpyr Dec 25 2008, 21:59

опа, в этой версии опять вылезло :
сс1 : avr-gcc: CreateProcess: No such file or directory

Код
Using built-in specs.
Target: avr
Configured with: ../../../src/gcc/configure --prefix=/opt/home/cross-mingw/distr-avr --target=avr --disable-threads --disable-shared --enable-multilib --disable-libssp --disable-libmudflap --disable-libgomp --enable-languages=c,c++ --host=i686-pc-mingw32 -v
Thread model: single
gcc version 4.4.0 20081223 (experimental) (GCC)
COLLECT_GCC_OPTIONS='-v'
cc1 -quiet -v -iprefix e:\work\tools\prg\lng\c\gcc\avr_kgp\bin\../lib/gcc/avr/4.4.0/ main.c -quiet -dumpbase main.c -auxbase main -version -o c:\windows\Temp/cccJAn6a.s
avr-gcc: CreateProcess: No such file or directory

Автор: klen Dec 26 2008, 08:00

Цитата(ukpyr @ Dec 26 2008, 00:59) *
опа, в этой версии опять вылезло :
сс1 : avr-gcc: CreateProcess: No such file or directory

Код
Using built-in specs.
Target: avr
Configured with: ../../../src/gcc/configure --prefix=/opt/home/cross-mingw/distr-avr --target=avr --disable-threads --disable-shared --enable-multilib --disable-libssp --disable-libmudflap --disable-libgomp --enable-languages=c,c++ --host=i686-pc-mingw32 -v
Thread model: single
gcc version 4.4.0 20081223 (experimental) (GCC)
COLLECT_GCC_OPTIONS='-v'
cc1 -quiet -v -iprefix e:\work\tools\prg\lng\c\gcc\avr_kgp\bin\../lib/gcc/avr/4.4.0/ main.c -quiet -dumpbase main.c -auxbase main -version -o c:\windows\Temp/cccJAn6a.s
avr-gcc: CreateProcess: No such file or directory

вопрос , а почему не у всех вылазит???

1. какая ос
1б. куда распакован пакет.
1в. переменная PATH ?
2. командную строку комЭпиляции ?
3. лог FileMon'а отом как avr-gcc ищет сс1
4. проверте сс1, он должен вообще быть и запускатся (неиспорченый бинарник), \libexec\gcc\avr\4.4.0\cc1.exe

может это глюки. ниче не понимаю. а много у кого такиеже проблемы с моей сборкой?

Автор: ukpyr Dec 26 2008, 08:17

система - XP SP3
распакован в : e:\work\tools\prg\lng\c\gcc\avr_kgp

скрипт компиляции :

Код
set PATH=%GCC_ROOT%\avr_kgp\bin;%PATH%
avr-gcc -v main.c >1.txt 2>2.txt
pause


переменная GCC_ROOT=e:\work\tools\prg\lng\c\gcc

Автор: kimstik Dec 26 2008, 11:26

Цитата(ukpyr @ Dec 26 2008, 11:17) *
система - XP SP3
распакован в : e:\work\tools\prg\lng\c\gcc\avr_kgp

скрипт компиляции :
Код
set PATH=%GCC_ROOT%\avr_kgp\bin;%PATH%
avr-gcc -v main.c >1.txt 2>2.txt
pause


переменная GCC_ROOT=e:\work\tools\prg\lng\c\gcc

Может у тебя переменная GCC_EXEC_PREFIX есть? Её ругают.
У меня нет ни одной переменной от GCC, только в PATH путь до бинарника.

Автор: ukpyr Dec 26 2008, 11:51

Цитата
Может у тебя переменная GCC_EXEC_PREFIX есть?

нет

предыдущей сборкой компилируется...

Автор: klen Dec 28 2008, 20:23

Всех коллег с наступающим!
Большой новогодний мегапак!

все сегодняшнее свежее высасонное через cvs или svn. допиленое и собранное


свежак для avr
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-bu2.19.51_20081227-gcc4.4.0_20081227-gdb6.8.0_20081227-avrlibc1.6.4_20081227.7z
проверено на рабочем проекте c atmega64

свежак для arm
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-elf-bu2.19.51_20081227-gcc4.4.0_20081227-gdb6.8.0_20081227_newlib1.16.0_20081227_openocd1.0_svn1281.7z
проверено на рабочем проекте c Olimex STM32-H103
проверено на рабочем проекте c Olimex LPC-H2148


свежак для win32 которым собрано самое себя и все что выше нарисовано
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_win32_20081227.7z
собрано с библой OpenMP для паралельных вычислений
собран libglew32 для тех кто пишит исползует OpenGL
собран libpthread для поддержки OpenMP и ваще нужно иногда
ежедневно тестируеццо на больших рабочих проектах

за сим откланяюсь до следующего года
послезавтра суточное дежурство по зашите Родины, а потом.... на охоту до 10 числа,
Я 12 ДНЕЙ НЕ УВИЖУ КОМПЬТОРА!!! ЭЛЕКТРИЧЕСТВА!!! МОБИЛУ В ТОПКУ!!! ТОКА РУЖЖО ПАТРОНЫ ГОНЧАГ КОНЬЯК КОСТЕР ЛУНКА УДОЧКА МОТЫЛЬ ОКУНЬ ПОЛЯ ЗАЙЦЫ ТОПОР СЕНО КОРОВА НАВОЗ ЕЛКИ ПАЛКИ СЛЕДЫ НА СНЕГУ РИСОВАНИЕ АКВАРЕЛЬЮ ФОТО!!!

спасибо Всем кто использует GNU GCC в общем и KGP в частности. Наш труд не пропадет. 1111493779.gif

всем счастья в новом... santa2.gif

Автор: S.R. Jan 14 2009, 20:02

Прошу заранее извинить, если ошибся темой smile.gif

Пользуюсь сборками от klen для компиляции и сборки проектов под BREW SDK 3.1.5. В данный момент установлена последняя (1228) сборка с gcc 4.4.0.
Вылез интересный баг с компиляцией операторов <<.

В BREW SDK есть макрос:
typedef uint32 RGBVAL;
#define MAKE_RGB(r, g, cool.gif (RGBVAL) ( ((uint32)® << 8) + ((uint32)(g) << 16) + ((uint32)(cool.gif << 24) )
Есть код его использующий:
pSkin->colorText = MAKE_RGB( color.valR, color.valG, color.valB );
где valR, valG, valB - uint8, colorText - RGBVAL.

При выполнении на устройстве возникли трудности, т.к. текст выводился не заданным цветом, а каким-то другим. При отладке в лог обнаружилось, что переменная colorText содержит значение отличающееся от ожидаемого. Так, при считывании из ресурса чисел FF,1,1 в переменной оказывается не 0101FF00, а 0101FFFF... Т.е. в младшем байте (прозрачность) неизвестно откуда появились неизвестные FF...

При компиляции и сборке используются следующие ключи
CODE = -mlittle-endian -fshort-enums -fshort-wchar -fno-builtin -ffunction-sections -Wall
CPU = -mcpu=arm7tdmi
ROPI =
TARG = -mapcs-frame
INTRWK =
DYNAPP = -DDYNAMIC_APP
OPT = -Os
INC = -I$(AEEINCPATH) $(APP_INCLUDES)
LIBDIRS = -L$(GCC_LIBPATH)
OUT = -c
LINK_CMD = --gc-sections --emit-relocs -Map $(TARGET).map
LIBS = -lgcc
BINFORMAT = -O binary
CFLAGS = $(OUT) $(DYNAPP) $(CPU) $(ROPI) $(TARG) $(INTRWK) $(CODE) $(INC) $(OPT)

Летом, в предыдущей версии проекта, видимо использовался gcc 4.2 или 4.3 и там этой ошибки не было. Но, как оказалось, у меня нет привычки сохранять старые версии компиляторов...

Автор: klen Feb 11 2009, 08:57

свежак

АVR:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-bu2.19.51.20090207-gcc4.4.0.20090210-gdb6.8.0.20090207-avrlibc1.7.0.20090205.7z


ARM:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-elf-bu2.19.51.20090207-gcc4.4.0.20090207_gdb6.8.0.20090207_newlib1.16.0.20090207_openocd1.0.20090210.7z
дособрал сюда фортран, прикольно! работает, можно скомпилять считалку и запустить на микроконтроллере. нынешние мк круче давнишних суперкомпъюторов!

обновил свож среду сборки kgp-mingw32, это то чем все собирается вышеперчисленное, если кому нада тоже выложу.

Автор: demiurg_spb Feb 11 2009, 12:14

Цитата(klen @ Feb 11 2009, 11:57) *
обновил свож среду сборки kgp-mingw32, это то чем все собирается вышеперчисленное, если кому нада тоже выложу.
А тожsmile.gif

Автор: kimstik Feb 11 2009, 12:17

супер smile.gif
А можете выложить подробную инструкцию как вы это собираете?

Автор: alx2 Feb 12 2009, 09:58

Цитата(kimstik @ Feb 11 2009, 17:17) *
А можете выложить подробную инструкцию как вы это собираете?
Инструкции есть в дистрибутивах.

Автор: kimstik Feb 12 2009, 11:40

Цитата(alx2 @ Feb 12 2009, 12:58) *
Инструкции есть в дистрибутивах.

Ок, спасибо. Я умею собирать под Mingw. Но это все происходит с бубнами. Все время не хватает библиотек/ чтото надо патчить/ ключи компиляции полезные.
То, что все это после затрат некоторого времени, правильную или близкую к правильной последовательность можно найти в сети все знают...

Перефразирую. Многим было бы полезно знать как на пустой машине собрать это. То есть откуда что взять, что пропатчить, какие ключи, ...

ps: OMP рулит smile.gif

Автор: alx2 Feb 13 2009, 12:35

Цитата(kimstik @ Feb 12 2009, 16:40) *
Ок, спасибо. Я умею собирать под Mingw. Но это все происходит с бубнами. Все время не хватает библиотек/ чтото надо патчить/ ключи компиляции полезные.
Хм. Тогда не знаю. Не знал, что при сборке под mingw требуется что-то дополнительно...

Автор: kimstik Feb 17 2009, 11:17

Последняя сборка под винду при любом подключении
#include <mmintrin.h>
дает кучу ошибок в нем
Так что интринсики использовать нельзя sad.gif
Так что я пока откатился на 4.3

Автор: klen Feb 17 2009, 12:00

Цитата(kimstik @ Feb 17 2009, 14:17) *
Последняя сборка под винду при любом подключении
#include <mmintrin.h>
дает кучу ошибок в нем
Так что интринсики использовать нельзя sad.gif
Так что я пока откатился на 4.3


посмотрим.
я вооьщето пробывал неделю назад SSE3 использовать - получалось.
в любом случае погляжу

Автор: Make_Pic Feb 26 2009, 11:22

Цитата(klen @ Feb 11 2009, 11:57) *
свежак

АVR:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_avr-bu2.19.51.20090207-gcc4.4.0.20090210-gdb6.8.0.20090207-avrlibc1.7.0.20090205.7z


ARM:
http://electronix.ru/redirect.php?http://klen.org/Files/DevTools/kgp_arm-elf-bu2.19.51.20090207-gcc4.4.0.20090207_gdb6.8.0.20090207_newlib1.16.0.20090207_openocd1.0.20090210.7z
дособрал сюда фортран, прикольно! работает, можно скомпилять считалку и запустить на микроконтроллере. нынешние мк круче давнишних суперкомпъюторов!

обновил свож среду сборки kgp-mingw32, это то чем все собирается вышеперчисленное, если кому нада тоже выложу.


Уважаемый klen! Может вы все таки соберете последний GCC под 68000 и ColdFire ? Пожалуйста - прошу вас!!!

Автор: klen Feb 26 2009, 21:09

Цитата(Make_Pic @ Feb 26 2009, 14:22) *
Уважаемый klen! Может вы все таки соберете последний GCC под 68000 и ColdFire ? Пожалуйста - прошу вас!!!

я на выходных попробую. если невыложу в воскресение - напомните в личку

Автор: Make_Pic Feb 27 2009, 06:13

Цитата(klen @ Feb 27 2009, 00:09) *
я на выходных попробую. если невыложу в воскресение - напомните в личку


Хорошо - заранее спасибо!

Автор: klen Feb 27 2009, 10:41

2_Make_Pic
как Вы просили собрал для m68k/ColdFire m68k-elf
bu
gcc
newlib
gdb

все сегодняшнее

к себе на FTP пожже выложу если протестируете и оно работать будет

 kgp_m68k_20090227.7z ( 8.91 мегабайт ) : 44
 

Автор: Make_Pic Feb 27 2009, 19:30

Цитата(klen @ Feb 27 2009, 13:41) *
2_Make_Pic
как Вы просили собрал для m68k/ColdFire m68k-elf
bu
gcc
newlib
gdb

все сегодняшнее

к себе на FTP пожже выложу если протестируете и оно работать будет


Спасибо - попытаюсь в эти выходные протестировать.

Автор: klen Feb 28 2009, 08:27

Цитата(kimstik @ Feb 17 2009, 14:17) *
Последняя сборка под винду при любом подключении
#include <mmintrin.h>
дает кучу ошибок в нем
Так что интринсики использовать нельзя sad.gif
Так что я пока откатился на 4.3

Пересобрал Давайте свой тестовый кусок кода. Бум проверять.

Автор: klen Mar 6 2009, 05:59

В KGP добавлен GNAT
если кто желает писать и отлаживатся на АДА - пожалуйста..

www.klen.org/Files/DevTools/KGP_i686-pc-mingw32_GNAT_Eclipse-Europe.7z

читать README в архиве


2_Make_Pic
Выходные уже кончились? вернее уже опять почти начались. получилось потестировать сборку кода для m68k/ColdFire ?

Автор: Make_Pic Mar 7 2009, 09:06

Цитата(klen @ Mar 6 2009, 08:59) *
...
2_Make_Pic
Выходные уже кончились? вернее уже опять почти начались. получилось потестировать сборку кода для m68k/ColdFire ?


Только начал, пока простой проект прошел без проблем, до сложного не дошел - слег с гриппом, выздоровлю - продолжу!

Вдогонку - есть проект opensource BDM для ColdFire и MC68000 под Linux - я хочу его подправить на предмет работы через USB BDM - поможите его потом собрать под WIN?

Автор: klen Mar 7 2009, 22:24

попробуем

Автор: klen Mar 24 2009, 19:54

Свежак для AVR

bu 2.19.51_20090323
gcc 4.4.0 20090323
avrlibc 20090323

компиляю довольно сложный проект на меге128, пока все работает.

www.klen.org/Files/DevTools/kgp_avr-bu2.19.51_20090323-gcc4.4.0_20090323-avrlibc-20090323.7z

Автор: klen Apr 14 2009, 19:05

свежак для Coretex-M3

довольно много свежего :
ветка gcc 4.5.0
новый релиз newlib 1.17.0

от себя добавил мультилиб специально оптимизированый под Cortex-M3, в нем немного поэксперементировал с оптимизацией
Недельку потестил на stm32f103rbt, крутим подтюненый FreeRTOS 5.2.0 c 6 задачками USB,UART, софтварный ARINC, debug trace facility... все работает без глюков.
пробуйте smile.gif

http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_cortex_m3-elf-bu2.19.51.20090408-gcc4.5.0.20090408_gdb6.8.0.20090409_newlib1.17.0.20090327_openocd1.0.20090413.7z

поскольку сборка только для кодогенерации под Cortex-M3 был проделан эксперемент : максимально компактный дистрибутив, для этого удалено все лишнее. В итоге сборка весит всего 7.07 мегабайт.

Автор: AHTOXA May 30 2009, 19:29

Что-то ругается он у меня, пишет

Код
ld.exe: cannot find -lgcc


Пустой проект, никаких инклюдов.

Автор: ukpyr May 31 2009, 16:34

а нельзя ли собирать и под Linux ?

Автор: klen May 31 2009, 19:21

2_AHTOXA
проверьте наличие файла libgcc.a в дериктории
ZZZ\lib\gcc\arm-kgp-elf\4.5.0\cortex-m3
где ZZZ - то куда Вы из архива все сложили.

2_ukpyr
в каком смысле под Linux, linux-target GCC или linux-host ?
короче для какой платформы код генерить это таргет, а на какой это хост.

Автор: ukpyr May 31 2009, 19:45

smile.gif хост конечно. Linux x86-32bit.
сейчас пользуюсь этим : http://electronix.ru/redirect.php?http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite

Автор: AHTOXA May 31 2009, 22:37

Цитата(klen @ Jun 1 2009, 01:21) *
2_AHTOXA
проверьте наличие файла libgcc.a в дериктории
ZZZ\lib\gcc\arm-kgp-elf\4.5.0\cortex-m3
где ZZZ - то куда Вы из архива все сложили.


Хм. Всё заработало... Наверное я в прошлый раз плохо вычистил предыдущую версию:-)
Прошу прощения за ложную тревогу.

Автор: AHTOXA Jun 3 2009, 16:12

Продолжаю ковыряния:-) Дошёл до C++. Не работаетsad.gif

Код
>arm-kgp-elf-g++ -v -c main.cpp
Using built-in specs.
Target: arm-kgp-elf
Configured with: ../../src/gcc/configure ../../src/gcc/configure --prefix=/kgp_arm
--target=arm-kgp-elf --host=i686-pc-mingw32 --build=i686-pc-mingw32
--disable-nls --disable-shared --disable-threads --disable-libssp
--disable-libmudflap --disable-libgomp --enable-interwork --enable-multilib
--with-newlib --with-headers=../../src/newlib/newlib/libc/include
--with-float=soft --enable-languages=c,c++,fortran -v CC='distcc gcc -pipe'
Thread model: single
gcc version 4.4.0 20090207 (experimental) (GCC)
Klen's GCC package (KGP) for ARM/elf platform
see latest build in www.klen.orgCOLLECT_GCC_OPTIONS='-v' '-c' '-mfloat-abi=soft'

cc1plus -quiet -v -iprefix d:\kgp\bin\../lib/gcc/arm-kgp-elf/4.4.0/
-D__USES_INITFINI__ main.cpp -quiet -dumpbase main.cpp -mfloat-abi=soft -auxbas
e main -version -o C:/Temp/cci3DU9c.s
arm-kgp-elf-g++.exe: CreateProcess: No such file or directory


cc1plus-а нет в наборе. И почему 4.4.0 ?


Очень бы хотелось чтоб это заработало, потому что с Вашей сборкой у меня складываются отношения гораздо более удачно, чем со сборкой от CodeSourcery:)

------------
Ага, вот оно что. Вернул из заначки папки
\lib\gcc\arm-kgp-elf\4.4.0\
и
\libexec\gcc\arm-kgp-elf\4.4.0\

и файлы

\arm-kgp-elf\lib\libc.a
\arm-kgp-elf\lib\libm.a
\arm-kgp-elf\lib\libstdc++.a

- заработало. Даже ножкой дрыгаетsmile.gif
Но меня немного смущает вся эта мешанина.

Автор: AHTOXA Jun 3 2009, 19:10

Цитата(AHTOXA @ Jun 3 2009, 22:12) *
- заработало. Даже ножкой дрыгает smile.gif


Не, это я поспешил. Объекты не создаются, конструкторы не вызываются... Ножкой дрыгает только до первого обращения к какому-либо объекту.
sad.gif

Автор: Сергей Борщ Jun 3 2009, 20:25

Цитата(AHTOXA @ Jun 3 2009, 22:10) *
Не, это я поспешил. Объекты не создаются, конструкторы не вызываются...
Объекты глобальные? Если да, то стартап свой или есть что-то в библиотеке? Если свой - есть ли в нем собственно вызов конструкторов?

Автор: AHTOXA Jun 3 2009, 20:59

Объекты глобальные. Стартап свой, вернее, из примера 4-BlinkLeds порта scmRTOS под STM32 под gcc. (который c http://electronix.ru/redirect.php?http://mercurial.intuxication.org/hg/scmrtos-cm3-gcc). Конструкторы вызываются. При компиляции тулчейном от CodeSourcery (arm-none-eabi-) пример даже работает, правда только с оптимизацией -O0. Меня это смущаетsmile.gif

А arm-kgp-elf- здесь оплошал. ( Или яsmile.gif )

Автор: klen Jun 4 2009, 03:23

Цитата(AHTOXA @ Jun 4 2009, 00:59) *
Объекты глобальные. Стартап свой, вернее, из примера 4-BlinkLeds порта scmRTOS под STM32 под gcc. (который c http://electronix.ru/redirect.php?http://mercurial.intuxication.org/hg/scmrtos-cm3-gcc). Конструкторы вызываются. При компиляции тулчейном от CodeSourcery (arm-none-eabi-) пример даже работает, правда только с оптимизацией -O0. Меня это смущаетsmile.gif

А arm-kgp-elf- здесь оплошал. ( Или яsmile.gif )


не удивительно
я C++ ниразу не тестировал - тока C/fortran в реальных текущих разработках.
МЫСЛЬ испоьзовать С++ в микроконтроллерах просто ниразу НЕ ВЛЕЗЛА В МОЙ МОСК - РАЗМЕР ПРЕВЫШАЕТ ... куда катится мир?

итак. невызываются конструкторы? конструкторы каких объектов, как размещаете - cтатически или new?
посмотрим щас..

-------------------------------------------------

посмотрел:

#include "cplus_test.h"

#include "stm32f10x_gpio.h"

extern uint32_t _bss_end_ ;
uint32_t end = _bss_end_ ;

class blinker
{
private:
uint32_t ftimeout ;
uint32_t ftick_count ;

public:
blinker(uint32_t timeaut)
{
ftimeout = timeaut ;
}

~blinker()
{
};

void count_loop(uint32_t count)
{
ftick_count = xTaskGetTickCount();
for ( uint32_t acount = 0 ; acount < count ; acount ++ )
{
GPIOC->BRR = 0x0001000;
vTaskDelayUntil( &ftick_count , ftimeout);
GPIOC->BSRR = 0x0001000;
vTaskDelayUntil( &ftick_count , ftimeout);
}
}

void permanent_loop()
{
ftick_count = xTaskGetTickCount();
while(1)
{
GPIOC->BRR = 0x0001000;
vTaskDelayUntil( &ftick_count , ftimeout);
GPIOC->BSRR = 0x0001000;
vTaskDelayUntil( &ftick_count , ftimeout);
}
}
};


void test_constr_destr()
{
NOP();
blinker bl(50) ;
bl.count_loop(100) ;
NOP();
}

volatile portTickType tick_count ;
xTaskHandle cplus_debug_led_task_handle ;
void cplus_debug_led_task_code (void* param)
{
(void)param ;
blinker bl(250) ;
NOP();
test_constr_destr() ;
NOP();
bl.permanent_loop() ;


}


вот этот код работает
объекты статически создаются (в таком случае явно вызывается конструктор)
и даже работают
деструкторы не вызываются при выходе из функции в стеке которых они создались (причины на то есть)

тоесть глобальные оъекты можно использовать. тока зачем это нада? если все доелать(деструкторы) то в флеш еще потянется куча кода из libstdc++ и libsupc++ который обеспечивает например вызов деструкторов оъектов созданых в стеке функций... с этого места начнется полный завал.

Автор: AHTOXA Jun 4 2009, 06:48

Цитата(klen @ Jun 4 2009, 09:23) *
не удивительно
я C++ ниразу не тестировал - тока C/fortran в реальных текущих разработках.
МЫСЛЬ испоьзовать С++ в микроконтроллерах просто ниразу НЕ ВЛЕЗЛА В МОЙ МОСК - РАЗМЕР ПРЕВЫШАЕТ ... куда катится мир?

Ненене:-) Если аккуратно, то ничего не превышает, даже наоборот! Минимальный пример scmRTOS сильно меньше минимального примера FreeRtos:) Объекты -- статические, глобальные. В смысле - совсем глобальные, когда объект объвлен вне функции. То есть должен создаваться при инициализации. Плюс маленькие объектики на стеке, типа TCritSect. Они, конечно, должны разрушаться при выходе из функции. По-моему, стандартные библиотеки тут не при делах.
Цитата
вот этот код работает
объекты статически создаются (в таком случае явно вызывается конструктор)
и даже работают
деструкторы не вызываются при выходе из функции в стеке которых они создались (причины на то есть)

Как компилировали? Голым свежаком 4.5.0? Или с либами от 4.4.0? То, что не вызываются деструкторы - это грустно. Если уж для MSP или даже для AVR это не является слишком тяжёлым бременем, то уж для АРМов-то это вообще семечкиsmile.gif
Цитата
тоесть глобальные оъекты можно использовать. тока зачем это нада? если все доелать(деструкторы) то в флеш еще потянется куча кода из libstdc++ и libsupc++ который обеспечивает например вызов деструкторов оъектов созданых в стеке функций... с этого места начнется полный завал.

Почему "доделывать"? Я не очень понимаю всю кухню, но разве в gcc этого нет?

Автор: Сергей Борщ Jun 4 2009, 07:21

Цитата(klen @ Jun 4 2009, 06:23) *
если все доелать(деструкторы) то в флеш еще потянется куча кода из libstdc++ и libsupc++ который обеспечивает например вызов деструкторов оъектов созданых в стеке функций... с этого места начнется полный завал.
Этот код тянется для деструкторов глобальных объектов. Почему именно этот код - не спрашивайте, не знаю. Там, действительно, подтягиваются и функции работы с файлами и куча еще всего кило на 20 примерно. Но обходится это довольно просто - не нужно делать деструкторы в глобальных объектах. Ибо они и не нужны - нормальная embedded-программа из main() не выходит и, значит, деструкторы никогда и не будут вызваны.

Автор: klen Jun 4 2009, 12:26

Цитата(Сергей Борщ @ Jun 4 2009, 11:21) *
Этот код тянется для деструкторов глобальных объектов. Почему именно этот код - не спрашивайте, не знаю. Там, действительно, подтягиваются и функции работы с файлами и куча еще всего кило на 20 примерно. Но обходится это довольно просто - не нужно делать деструкторы в глобальных объектах. Ибо они и не нужны - нормальная embedded-программа из main() не выходит и, значит, деструкторы никогда и не будут вызваны.


по поводу деструкторов погляжу как это все работает.

я уверен что все работает тока нада уметь ему об этом сказать!

Автор: klen Jun 7 2009, 20:00

потратил время исследования вопросов from AHTOXA

как и я думал все работает, а именно:
глобальные объекты работают.
локальыне на стеке работают
динамические оъекты ТОЖЕ работают (new/delete). сделел обертки для api FreeRTOS, собрал и протестил на олимексовской STM32-H103

под словом работают имеется ввиду вызов конструктора и деструктора в соответствующие моменты.

чтоб все это заработала нада сделать определенные подготовительние телодвижения, по объему превышающие оные для проекта на чистом C.

в ближайште дни выложу свежак в котором будет новый фича - оптимизатор циклов Graphite. заодно распишу че де как C++ заюзать.

Автор: AHTOXA Jun 8 2009, 13:05

Цитата(klen @ Jun 8 2009, 02:00) *
потратил время исследования вопросов from AHTOXA
как и я думал все работает, а именно:

Ну, вы немного лукавите конечно, ибо в последнем свежаке нет нужных либ и cc1plus.exe, но новость всё равно радостная:-)
Цитата
в ближайште дни выложу свежак в котором будет новый фича - оптимизатор циклов Graphite. заодно распишу че де как C++ заюзать.


Жду с нетерпением smile.gif

Автор: klen Jun 8 2009, 20:21

Цитата(AHTOXA @ Jun 8 2009, 17:05) *
Ну, вы немного лукавите конечно, ибо в последнем свежаке нет нужных либ и cc1plus.exe, но новость всё равно радостная:-)


не лувлю!
это у вас он свежак, а у меня он уже лежалая колбаса

Автор: Mitsufan Jun 10 2009, 15:16

Klen, можете собрать ветку 4.5 для MIPS ELF под Win32 хост?

Автор: klen Jun 12 2009, 08:07

Цитата(Mitsufan @ Jun 10 2009, 19:16) *
Klen, можете собрать ветку 4.5 для MIPS ELF под Win32 хост?

ок.

Автор: klen Jun 16 2009, 15:39

Свежак для ARM
все компоненты сегодняшние 20090616:
binutils
gcc
gdb
newlib
oocd

http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm-elf-bu2.19.51_20090616-gcc4.5.0_20090616-gdb6.8.0_20090616-newlib1.16.0.20090616-oocd_20090616.7z

протестил на терровском махаоне - FreeRTOS, 3 задачи для светодиодов, 1 задача USB, 1 задача работа с SD карточкой, в целях тестиования код смешанный С/Fortran/C++ для проверки C++, как то работа конструкторов деструкторов new и delete и прочее. если кому нада выложу.

все target-либы собраны с флагами -g0 -Os -fomit-frame-pointer -ffunction-sections -fdata-sections -funroll-loops -fgraphite
для для cortex-m3 дополнително присунут -mfix-cortex-m3-ldrd

прикручен оптимизатор Graphite, который базируется на ClooG ( http://electronix.ru/redirect.php?http://www.cloog.org/ ) , для задействования этой оптимизации нужно присунуть ключ -fgraphite

Автор: AHTOXA Jun 16 2009, 16:20

Цитата(klen @ Jun 16 2009, 21:39) *
Свежак для ARM


arm-kgp-elf-g++ не находит libiconv-2.dll sad.gif

Цитата
протестил на терровском махаоне - FreeRTOS, 3 задачи для светодиодов, 1 задача USB, 1 задача работа с SD карточкой, в целях тестиования код смешанный С/Fortran/C++ для проверки C++, как то работа конструкторов деструкторов new и delete и прочее. если кому нада выложу.


Конечно надо! smile.gif

----------
Нашёл libiconv-2.dll http://electronix.ru/redirect.php?http://sourceforge.net/project/showfiles.php?group_id=114505&package_id=147572&release_id=356820. Вроде компилится теперьsmile.gif Будем смотреть дальшеsmile.gif

Автор: klen Jun 16 2009, 17:04

Цитата(AHTOXA @ Jun 16 2009, 20:20) *
arm-kgp-elf-g++ не находит libiconv-2.dll sad.gif

мдя.... действительно. лохонуло меня чето, пересабиру статически ее залинкую или вообще выкину.

Автор: oll Jun 16 2009, 18:56

Цитата(klen @ Jun 16 2009, 22:04) *
мдя.... действительно. лохонуло меня чето, пересабиру статически ее залинкую или вообще выкину.

СПАСИБО, уже скачал - свистните когда пересобирете.

Автор: forever failure Jun 17 2009, 04:13

Речь, конечно идёт про сборку под богомерзкую дефолт-ось, что уже, видимо, считается само-собой очевидным.

Автор: klen Jun 17 2009, 05:06

обновил архив, добавил в него libiconv-2.dll, теперь не должно быть проблем


Цитата(forever failure @ Jun 17 2009, 08:13) *
Речь, конечно идёт про сборку под богомерзкую дефолт-ось, что уже, видимо, считается само-собой очевидным.

конечно!!
под богопристойную ось любой дурак собрать сможет, иначе как он вообще в нее залез??
когда то.... не сейчас, чтоб заставить работать Linux так как тебе нада, нельзя было пройти мимо gcc и сборки много чего прикручиваемого. поэтому мне трудно представить человека который рабоет на пингвине и не умеет собрать компиллер, че он вообще тогда от пингвина хочет? если я не прав то опишите мне как бывает по другому.

если нада то могу выкладывать архив и под линукс. всеравно сначала собирается версия под него а потом на нем кросс(таргет)-крос(хост)-тулсы под ВЫНь.

Цитата(forever failure @ Jun 17 2009, 08:13) *
что уже, видимо, считается само-собой очевидным

не у всех но у большинства
у меня убунта по умолчанию везде грузится, масдай для игрушек используеццо. и для разработки LockOn.

Автор: alex1979 Jun 17 2009, 07:10

Цитата(klen @ Jun 17 2009, 08:06) *
если нада то могу выкладывать архив и под линукс. всеравно сначала собирается версия под него а потом на нем кросс(таргет)-крос(хост)-тулсы под ВЫНь.


Было бы интерестно посмотреть на применяемые вами патчи и команды конфигурирования и компиляции под линукс

Автор: oll Jun 18 2009, 13:06

Вопрос 2 Klen.
У меня на работе народ пользует AVR Studio+последний WinAVR-20090313 - всем довольны (наверное).
Попросили прикрутить к AVR Studio Вашу сборку для AVR для тестирования.
На диске С: создал папку kgp_avr и скопировал туда Вашу сборку. Пути не прописывал.
В AVR Studio в External Tools убрал птицу UseWinAVR и прописал пути:
C:\kgp_avr\bin\avr-gcc.exe
make.exe у Вас не нашел - прописал C:\WinAVR\utils\bin\make.exe.
Запускаем на компиляцию проект работающий в WinAVR - получили:
avr-size: invalid option -- C
Usage: avr-size [option(s)] [file(s)]
Displays the sizes of sections inside binary files
If no input file(s) are specified, a.out is assumed
The options are:
-A|-B --format={sysv|berkeley} Select output style (default is berkeley)
-o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex
-t --totals Display the total sizes (Berkeley only)
--common Display total size for *COM* syms
--target=<bfdname> Set the binary file format
@<file> Read options from <file>
-h --help Display this information
-v --version Display the program's version

avr-size: supported targets: elf32-avr elf32-little elf32-big srec symbolsrec tekhex binary ihex
make: *** [size] Error 1

из чего вроде понятно что в Вашей сборке нет для avr-size опции -- C.
Поясните как состыковать - хочется людям использовать стандартный make file AVR Studio.

Автор: Сергей Борщ Jun 18 2009, 13:22

Цитата(oll @ Jun 18 2009, 16:06) *
из чего вроде понятно что в Вашей сборке нет для avr-size опции -- C.
Она идет отдельным патчем, который klen, по видимому, не наложил.
Цитата(oll @ Jun 18 2009, 16:06) *
Поясните как состыковать - хочется людям использовать стандартный make file AVR Studio.
Возьмите avr-size от WinAVR.

Автор: oll Jun 19 2009, 04:13

Цитата(Сергей Борщ @ Jun 18 2009, 18:22) *
Она идет отдельным патчем, который klen, по видимому, не наложил.Возьмите avr-size от WinAVR.

СПАСИБО - работает

Автор: klen Jun 19 2009, 18:23

Цитата(Сергей Борщ @ Jun 18 2009, 17:22) *
Она идет отдельным патчем, который klen, по видимому, не наложил.Возьмите avr-size от WinAVR.


а где патч лежит, посмотрю, добавлю
лень было раньше искать и тд. поскольку есть своя утилитка была написана которая размеры секций вычислет проценты от размеров флеш и озу показывает

Автор: Сергей Борщ Jun 20 2009, 14:21

Цитата(klen @ Jun 19 2009, 21:23) *
а где патч лежит, посмотрю, добавлю
Где в нете - не скажу. Есть в комплекте WinAVR в директории source.

Автор: AHTOXA Jul 21 2009, 19:07

Обнаружил непорядок с arm-kgp-elf (c++).
При использовании pure virtual функций

Код
class foo
{
        virtual void bar() =0;

видимо подключается обработка exceptions, несмотря на флаг -fno-exceptions. В результате тянется malloc, который ругается на неопределённый символ end в _sbrk при линковке.

Хотелось бы этого избежатьsmile.gif

Пока вышел из положения, объявив функции пустыми:
Код
class foo
{
        virtual void bar() {}


Но, может, я что-то упустил из виду?

Автор: klen Jul 22 2009, 03:58

Цитата(AHTOXA @ Jul 21 2009, 23:07) *
Обнаружил непорядок с arm-kgp-elf (c++).
При использовании pure virtual функций
Код
class foo
{
        virtual void bar() =0;

видимо подключается обработка exceptions, несмотря на флаг -fno-exceptions. В результате тянется malloc, который ругается на неопределённый символ end в _sbrk при линковке.

Хотелось бы этого избежатьsmile.gif

Пока вышел из положения, объявив функции пустыми:
Код
class foo
{
        virtual void bar() {}


Но, может, я что-то упустил из виду?



а что стандарт говорит по этому поводу?

нада смотреть. скорее всего можно закомпилять libstdc++ так чтобы вообще исключений не использовались.

у меня в проектке есть virtual void bar() =0, и все линкуется. new и delete переопределены с использованием собственых malloc и free (свой менеждер кучи)

в любом случае спасибо. -fno-exception уменьшило размер .text в 2! раза lol.gif век учись - дураком помреш,

Автор: AHTOXA Jul 22 2009, 06:57

Цитата(klen @ Jul 22 2009, 09:58) *
а что стандарт говорит по этому поводу?


Сомневаюсь, что там это есть. Как должна реагировать программа при вызове чисто виртуальной функции? Видимо в arm-gcc решили это через какой-то специальный эксепшн. Наверное это не считается обычным exception-ом, и поэтому не регулируется флагом -fno-exceptions. Само по себе это неважно, мне не нравится что тянется malloc. Кто его знает, сколько оно там отожрёт хипаsmile.gif

В msp-gcc использование pure virtual не тянет за собой malloc. Надо проверить на avr-gcc...

Цитата
нада смотреть. скорее всего можно закомпилять libstdc++ так чтобы вообще исключений не использовались.

Даже не знаю, надо ли это... Думаю, что правильнее сделать, чтобы флаг -fno-exceptions действовал более чёткоsmile.gif
Цитата
в любом случае спасибо. -fno-exception уменьшило размер .text в 2! раза lol.gif


biggrin.gif

Автор: klen Jul 22 2009, 10:40

Цитата(AHTOXA @ Jul 22 2009, 10:57) *
Сомневаюсь, что там это есть. Как должна реагировать программа при вызове чисто виртуальной функции? Видимо в arm-gcc решили это через какой-то специальный эксепшн. Наверное это не считается обычным exception-ом, и поэтому не регулируется флагом -fno-exceptions. Само по себе это неважно, мне не нравится что тянется malloc. Кто его знает, сколько оно там отожрёт хипаsmile.gif

В msp-gcc использование pure virtual не тянет за собой malloc. Надо проверить на avr-gcc...


Даже не знаю, надо ли это... Думаю, что правильнее сделать, чтобы флаг -fno-exceptions действовал более чёткоsmile.gif


biggrin.gif


что то я вообще сомневаюсь что для arm-elf вообще механизм эксепшенов реализован, так .. хвосты..
нада изучать вопрос и ковырятся...

Автор: Сергей Борщ Jul 22 2009, 11:01

Цитата(AHTOXA @ Jul 22 2009, 09:57) *
Сомневаюсь, что там это есть. Как должна реагировать программа при вызове чисто виртуальной функции?
Должна вызвать переопределенную версию этой функции. Функция переопределяется в классе-потомке. Если в классе-потомке функция не переопределена, то попытка создания объекта такого класса должна вызывать ошибку на этапе компиляции.

Автор: AHTOXA Jul 22 2009, 11:20

Цитата(Сергей Борщ @ Jul 22 2009, 17:01) *
Должна вызвать переопределенную версию этой функции. Функция переопределяется в классе-потомке. Если в классе-потомке функция не переопределена, то попытка создания объекта такого класса должна вызывать ошибку на этапе компиляции.


Точно, не компилится. Я почему-то был уверен, что там будет только warning. С дельфями перепуталsmile.gif
Тогда вообще непонятно, зачем цепляются исключения...

Автор: alx2 Jul 22 2009, 14:17

Цитата(klen @ Jul 22 2009, 15:40) *
что то я вообще сомневаюсь что для arm-elf вообще механизм эксепшенов реализован, так .. хвосты..
Оп-па... А что такое там с исключениями? А то я ими довольно широко пользуюсь, до сих пор на неприятности не нарывался... Считаете, на них нельзя так смело полагаться?

Автор: klen Jul 23 2009, 07:55

Цитата(alx2 @ Jul 22 2009, 18:17) *
Оп-па... А что такое там с исключениями? А то я ими довольно широко пользуюсь, до сих пор на неприятности не нарывался... Считаете, на них нельзя так смело полагаться?


а у Вас все работает? smile.gif
поделитесь опытом, как это происходит.

я довольно смутно представляю как работает С++ в плане исключений применительно к мелким контролерам. поэтому и написал что "неуверен...", нада было написать "незнаю"


2_AHTOXA
и должна вроде..
виртуальные функции работают, тут все ок. я имел ввиду только исключения! VMT как и положено в классах кладется по нулевому смещению, в классе потомке выбирается адресс из нее и все работает, у меня так обертка к задачам FreeRTOS сделана., функцияя кода задачи чисто виртуальная в базовом классе. А вот исключения дело темное!

например происходит обращение к NULL или вообще за диапазоном адресации какойнить шины - ядро генерит чтото типа bus abort а дальше то че? Вот тут видимо в обработчике и нада руками приуручивать механизм обработки исключений(библиотечные вызовы ) к конкретному механизму их генерации (аппаратные прервыания по косякам с памятью например).

для "не сильно мелких процов" типа ARM720... далее, хде есть MMU, Linux, и тд как я думаю эта прикрутка уже сделано в ядре линуха так как ядро и реализация libc конфигуртся под конкретный проц! я хрюнделем хорошо перерыд ядро линуха и uLibc когда делал девас на Тионе c EP9312, там видать в исходниках все это, и как системные вызовы прикручены к железке и тд.

для armv4 armv7 такого нет, может есть? и все работает как у alx2??? мне очень иньтересно smile.gif

короче говоря я так это понимаю, если не прав то поправте.

в студию приглашаются специалисты по внутренней реализации C++ и отдельно к микрофону alx2, расказать как у него работают С++ исключения и собсно на чем?

Автор: Сергей Борщ Jul 23 2009, 08:13

Цитата(klen @ Jul 23 2009, 10:55) *
например происходит обращение к NULL или вообще за диапазоном адресации какойнить шины
Тут вы смешали в кучу исключения ядра ARM и плюсОвые исключения, которые генерятся программистом посредством ключевого слова throw.

Автор: AHTOXA Jul 23 2009, 09:18

Цитата(klen @ Jul 23 2009, 13:55) *
виртуальные функции работают, тут все ок. я имел ввиду только исключения! VMT как и положено в классах кладется по нулевому смещению, в классе потомке выбирается адресс из нее и все работает, у меня так обертка к задачам FreeRTOS сделана., функцияя кода задачи чисто виртуальная в базовом классе. А вот исключения дело темное!


Непонятно только, почему при упоминании чисто виртуальных функций подтягивается malloc? Вот что меня волнует более всегоsmile.gif

Про исключения - Сергей Борщ уже сказал, это не те исключения.

Автор: alx2 Jul 23 2009, 11:35

Цитата(klen @ Jul 23 2009, 12:55) *
а у Вас все работает? smile.gif
поделитесь опытом, как это происходит.
Да, работает. throw исключение кидает, catch его ловит. Все в соответствии с правилами языка...

Автор: klen Jul 25 2009, 10:43

свежак для ARM
все кроме openocd 20090724
в OOCD чето сломали, падает при записи в флеш, поэтому положил предыдущую сборку.


www.klen.org/Files/DevTools/kgp_arm_cortex-m3_20090724.7z - обрезанна, для кортекса.
www.klen.org/Files/DevTools/kgp_arm_full_20090724.7z - полня


свежак для win32
также 20090724
www.klen.org/Files/DevTools/kgp_mingw32_20090724.7z

Автор: AHTOXA Sep 1 2009, 18:04

Цитата(AHTOXA @ Jul 23 2009, 15:18) *
Непонятно только, почему при упоминании чисто виртуальных функций подтягивается malloc?


Посмотрел более предметно. Подтягивается не только malloc, подтягиваются-таки и исключения, как я и предполагал.
От банальной замены
Код
    virtual void putch(char ch) { (void)ch; }

на
Код
    virtual void putch(char ch) = 0;

мой 14-килобайтный проект подрос до 66К sad.gif

Подтягивается некая __cxa_pure_virtual, за ней write и std::terminate().
А уж из std::terminate() - кранты, _Unwind_SjLj_Register, __cxa_begin_catch, __cxa_end_catch и вся остальная кампания, вплоть до RTTI smile.gif

Сдаётся мне, что это всё-таки баг, ибо флаг -fno-exceptions запрещает исключения.

ЗЫ. Получается, всё же есть возможность создать экземпляр класса с чисто виртуальной функцией?

Автор: klen Sep 2 2009, 11:40

Цитата(AHTOXA @ Sep 1 2009, 22:04) *
Посмотрел более предметно. Подтягивается не только malloc, подтягиваются-таки и исключения, как я и предполагал.
От банальной замены
Код
    virtual void putch(char ch) { (void)ch; }

на
Код
    virtual void putch(char ch) = 0;

мой 14-килобайтный проект подрос до 66К sad.gif

Подтягивается некая __cxa_pure_virtual, за ней write и std::terminate().
А уж из std::terminate() - кранты, _Unwind_SjLj_Register, __cxa_begin_catch, __cxa_end_catch и вся остальная кампания, вплоть до RTTI smile.gif

Сдаётся мне, что это всё-таки баг, ибо флаг -fno-exceptions запрещает исключения.

ЗЫ. Получается, всё же есть возможность создать экземпляр класса с чисто виртуальной функцией?


laughing.gif
зато работают исключения (которые нам нах ненужны на контроллерах)

будет время залезу внутрь и посмотрю че происходит по fno-exceptions, во всяком случае после прересборки мои проекы на 600% ужались.


про malloc в эксепшенах мне уже просветили.
как минимум исключение пытаеся дернуть память чтоб сообщение(или контекст исключения) создать которое передается обработчику.

нахер все это нада вырубать.

ктонить объяснит? есть ситуации когда без исключений не написать кода?

Автор: AHTOXA Sep 2 2009, 19:58

Цитата(klen @ Sep 2 2009, 17:40) *
laughing.gif
зато работают исключения (которые нам нах ненужны на контроллерах)

smile.gif Не, исключения - штука в принципе отличная. Но места и памяти - жалко.
Цитата
будет время залезу внутрь и посмотрю че происходит по fno-exceptions, во всяком случае после прересборки мои проекы на 600% ужались.

Если бы оно (fno-exceptions) всегда работало, всё было бы чудесно. Хочет человек эксепшны - пожалуйста, не хочет - не надо. Но этот pure virtual портит всю малину.
Цитата
нахер все это нада вырубать.

Ну, совсем-то наверное не надоsmile.gif А вот по fno-exceptions - да.
Цитата
ктонить объяснит? есть ситуации когда без исключений не написать кода?

В принципе исключения - это стандарт Си++. Обойтись без них можно, видимо просто в недрах стандартных библиотек они в каком-то месте используются безусловно.

Автор: klen Sep 3 2009, 06:25

Цитата(AHTOXA @ Sep 2 2009, 23:58) *
В принципе исключения - это стандарт Си++. Обойтись без них можно, видимо просто в недрах стандартных библиотек они в каком-то месте используются безусловно.


О! идея.
попробую библиотеки скомпилять без исключений. посмотрим что тагда будет. как вариант сборки.

Автор: Terminator Sep 3 2009, 06:48

я добавил к проекту следующие файлы и с no-exception, no-rtti ничего лишнего не подключается.

malloc и free свои

 sys.zip ( 560 байт ) : 75
 

Автор: klen Sep 3 2009, 07:15

Цитата(Terminator @ Sep 3 2009, 10:48) *
я добавил к проекту следующие файлы и с no-exception, no-rtti ничего лишнего не подключается.

malloc и free свои


у меня также, после введения в проекте синонимов malloc free на свои реализации. я писал что -600% по размеру.
остается вопрос - если эксепщены и RTTI выключены то кто malloc free тянет?
я всетаки соберу две версии libctdc++ одну нормально а вторую с no-exception, no-rtti. а там сравним че получится.

Автор: AHTOXA Sep 3 2009, 07:50

Цитата(Terminator @ Sep 3 2009, 12:48) *
я добавил к проекту следующие файлы и с no-exception, no-rtti ничего лишнего не подключается.


О, супер! Хватило только первого файла (sys.c), и всё стало отлично.

2 klen: наверное так и должны выглядеть эти __cxa_xx() при -fno-exceptions. Остальное, судя по всему, в либах правильно.

Автор: klen Sep 3 2009, 19:59

свежак для ARM

www.klen.org/Files/DevTools/kgp_arm_cortex-m3_20090901.7z - обрезанна, для кортекса.
www.klen.org/Files/DevTools/kgp_arm_full_20090901.7z - полня

Автор: alexander iz Sep 14 2009, 15:15

Цитата(klen @ Sep 3 2009, 23:59) *
свежак для ARM

www.klen.org/Files/DevTools/kgp_arm_cortex-m3_20090901.7z - обрезанна, для кортекса.
www.klen.org/Files/DevTools/kgp_arm_full_20090901.7z - полня


Ситуация такая:
установлен WinAVR.
PATH сначала указывает на кучку свежаков, потом на winavr.
С крайтим свежаком для arm при сборке проекта вываливается mkdir с ошибкой обращения к памяти. С предыдущей сборкой такой ошибки нет, проект собирается корректно (mkdir.exe подсасывается из winavr\utils\bin определённо, потому что более его нигде нет).

C AVR досадно, но не работает avr-size из крайней сборки для avr (хотя, из winavr считает объёмы корректно).

c:\gcc\bin\avr-size.exe: unrecognized option `--mcu=atmega324p'
Usage: c:\gcc\bin\avr-size.exe [option(s)] [file(s)]
Displays the sizes of sections inside binary files
If no input file(s) are specified, a.out is assumed
The options are:
-A|-B --format={sysv|berkeley} Select output style (default is berkeley)
-o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex
-t --totals Display the total sizes (Berkeley only)
--common Display total size for *COM* syms
--target=<bfdname> Set the binary file format
@<file> Read options from <file>
-h --help Display this information
-v --version Display the program's version

Как-то так.

Определённо, я что-то делаю не так. Только не пойму, что именно.

ЗЫ можно, для облегчения жизни, бросать ссылки на крайние сборки в первый пост?

Автор: ReAl Sep 14 2009, 19:31

Цитата(alexander iz @ Sep 14 2009, 18:15) *
C AVR досадно, но не работает avr-size из крайней сборки для avr (хотя, из winavr считает объёмы корректно).
...
Определённо, я что-то делаю не так. Только не пойму, что именно.
Просто при сборке WinAVR донакладывают свои патчи. Почему (из каких соображений) они не попадают в ствол - я не знаю. Способность avr-size принимать конкретный тип контроллера и выдавать с процентом использования - один из таких давно существующих патчей.

Автор: alexander iz Sep 14 2009, 20:47

Цитата(ReAl @ Sep 14 2009, 23:31) *
Просто при сборке WinAVR донакладывают свои патчи. Почему (из каких соображений) они не попадают в ствол - я не знаю. Способность avr-size принимать конкретный тип контроллера и выдавать с процентом использования - один из таких давно существующих патчей.


Спасибо.
Подумаю, как лучше поступить..

А с mkdir решилось установкой winavr от 20090313 (был 200812xx).
Компилируется теперь без косяков.
Остаётся понять, в чём была проблема.

Автор: NikAn Sep 21 2009, 19:26

Уважаемый Klen

Скажите, пожалуйста, для чего нужна libiconv-2.dll, и, как сделать так, чтобы arm-kgp-elf-g++.exe её находил.

Также буду весьма благодарен, если Вы выложите примеры make-файлов, который можно использовать для
компиляции standalone-приложений (.bin) для процессоров ARM7 (LPC2478) и Cortex-M3 (LPC1768)

И еще вопрос: поддерживает ли предложенный Вами openocd примитивный программатор типа Wiggler?


Заранее благодарен

Автор: klen Sep 23 2009, 06:31

>Скажите, пожалуйста, для чего нужна libiconv-2.dll, и, как сделать так, чтобы arm-kgp-elf-g++.exe её находил.
это внешняя библа для того подержки кодировок разных языков
тут написано http://electronix.ru/redirect.php?http://www.gnu.org/software/libiconv/
вообщето я ее в архив кладу(но мог както пропустить). оно должно лежать в /bin

>Также буду весьма благодарен, если Вы выложите примеры make-файлов, который можно использовать для
>компиляции standalone-приложений (.bin) для процессоров ARM7 (LPC2478) и Cortex-M3 (LPC1768)

..ммм .. я даже не знаю че сказать unsure.gif
мэйкфайлы вообщето не для процессоров а для сборки конкретного приложения и у всех они могут быть разными.

максимум чем я могу помоч так это отослать вас к манам по make и положить пример для STM32F103RET6 в котором демонстрируется в числе прочего как юзать функциональность make. но МАНЫ ВПЕРЕД!!!


>И еще вопрос: поддерживает ли предложенный Вами openocd примитивный программатор типа Wiggler?
ага, сам виглером шил поначалу. есть особенность. Вы должны поставить стронние дрова для паралельного порта. это процедура в инете описана.

Автор: NikAn Sep 29 2009, 13:24

Добрый вечер (ночь/утро/день) !

Цитата(klen @ Sep 23 2009, 10:31) *
..ммм .. я даже не знаю че сказать unsure.gif
мэйкфайлы вообщето не для процессоров а для сборки конкретного приложения и у всех они могут быть разными.


Я не правильно поставил вопрос. Я хотел узнать ключи компилятора, по которым он определяет для какого процессора
генерировать код. Это конечно можно в интернете узнать и проверить на железке, но как раз ее у меня пока инет.

Цитата
ага, сам виглером шил поначалу. есть особенность. Вы должны поставить стронние дрова для паралельного порта. это процедура в инете описана.


У меня в конфигурационном файле для openocd есть такие слова:
#interface
interface parport
parport_port 0x378
parport_cable wiggler

На этот конфиг, я натравливал приложение с именем openocd-pp.exe. И драйвер какой-то был установлен.
Теперь, если запустить Ваш openocd, появляется сообщение:
Error: The specified JTAG interface was not found (parport)
The following JTAG interfaces are available:
1: ft2232
2: presto

То есть параллельный порт как бы и не подразумевается этим openocd, если я правильно понял.
Непонятно. Нужна такая dll'ка, чтобы параллельный порт "прикинулся" ft2232, что ли?
Вы говорите, что "эта процедура в инете описана". Напишите ссылку, пожалуйста.

Заранее благодарен

Автор: klen Oct 1 2009, 18:48

увидите какие ключи говорят для какого проца компилить
arm-kgp-elf-gcc --target-help

косяг у меня - я конфигурил oocd без поддержки LPT.
дособираю новую сборку - там будет oocd рулить lpt. Вы как раз и протестируете.

Автор: NikAn Oct 19 2009, 19:29

Цитата(klen @ Oct 1 2009, 22:48) *
увидите какие ключи говорят для какого проца компилить
arm-kgp-elf-gcc --target-help

косяг у меня - я конфигурил oocd без поддержки LPT.
дособираю новую сборку - там будет oocd рулить lpt. Вы как раз и протестируете.



Добрый вечер (ночь/утро/день)!

Как у Вас обстоят дела с новой сборкой? Не терпится протестировать!

Автор: klen Oct 20 2009, 05:40

Цитата(NikAn @ Oct 19 2009, 23:29) *
Добрый вечер (ночь/утро/день)!

Как у Вас обстоят дела с новой сборкой? Не терпится протестировать!

хорошо обстоят дела - проблема в одном. нада напрячся и нажать на кнопки файлзиллы чтоб положить все на фтп smile.gif

я щас добавляю LTO оптимизацию для mingw32-host arm-target порта GCC. тут есть проблемки - нада ручками писать код - релизовать врапер unix системных вызовов из sys/mman.h ( mmap() munmap() mlock()..... ) средствами Win32 API. это отображение механизм файлов. Если кто знает готовый врапер для mingw32 тыкните носом - дело ускорится.

результатом будет оптимизация при линковке (LinkTimeOptimization - LTO ), поидее еще болще мусора должно выкидыватся но самое главное линкер сможет двигать куски кода более свободно, например рядом распологать взаимосвязанные функции и и спользовать короткие и более быстрые вызовы, капример rcall вместо call в AVR или чтото в этом роде. Нада разбиратся детально как это с умом приложить http://electronix.ru/redirect.php?http://gcc.gnu.org/wiki/LinkTimeOptimization

Автор: AHTOXA Oct 30 2009, 20:15

У меня вопрос про arm-kgp, в части Cortex-M3.
Компиляю им проект под scmRTOS, на плюсах.
Есть класс-критическая секция:

Код
class TCritSect
{
public:
    TCritSect () : StatusReg(__get_interrupt_state()) { __disable_interrupt(); }
     ~TCritSect() { __set_interrupt_state(StatusReg); }
private:
     TStatusReg StatusReg;
};

И есть некая использующая эту критическую секцию функция класса:
Код
        INLINE byte GetCount() const { TCritSect cs; return count; }

То есть, идея такая: при входе в функцию создаётся объект TCritSect, при создании запрещаются прерывания, потом выполняется тело функции, и при выходе из неё объект TCritSect разрушается, восстанавливая состояние прерываний.
Так вот, её вызов компилится при помощи arm-kgp в следующий код:
Код
     mrs    r3, PRIMASK    
      cpsid    i          
      msr    PRIMASK, r3    
      ldrb    r0, [r0, #8]
      bx    lr

Здесь две первые строчки - конструктор TCritSect (сохранение PRIMASK и запрет прерываний), третья строчка - деструктор TCritSect (разрешение прерываний), и только четвёртая строчка - чтение переменной. То есть, работает не так, как мне бы хотелось.
CodeSourcery g++ компилит это вот так:
Код
     mrs    r3, PRIMASK    
      cpsid    i          
      ldrb    r0, [r0, #6]
      msr    PRIMASK, r3    
      bx    lr

, то есть, как мне нужно - запрет прерываний, чтение переменной, восстановление прерываний.

Вопрос в следующем: как они этого добились? Делали специальный патч, или просто задали какие-то параметры при сборке? Вернее, вопрос состоит в другом: а нельзя ли сделать как они? smile.gif

ЗЫ. Вопрос о том, как положено по стандарту - неясен, долгие баталии по этому поводу не дали однозначного ответа. Но, имхо, для эмбеддед приложений второй вариант предпочтительней.

Автор: ReAl Oct 31 2009, 07:50

Цитата(AHTOXA @ Oct 30 2009, 22:15) *
ЗЫ. Вопрос о том, как положено по стандарту - неясен, долгие баталии по этому поводу не дали однозначного ответа.
Эт с какой точки зрения смотреть. С моей -
Цитата
если count (который изменяется где-то независимо от данного участка кода) объявлен как volatile, то всё должно быть нормально в данном случае, так как порядок доступа к volatile-переменным нарушаться не может, а если не volatile, то компилятор вправе двигать
- звучит достаточно однозначно :-).
И count должен быть volatile в любом случае, а TCritSect обеспечивает только атомарность доступа к нему.
Насколько я помню, по итогам обсуждения системный счётчик тиков в scmRTOS стал volatile :-)
Неужели тут count квалифицирован как volatile и всё равно бяка?

Автор: AHTOXA Oct 31 2009, 08:22

Цитата(ReAl @ Oct 31 2009, 12:50) *
Эт с какой точки зрения смотреть. С моей - - звучит достаточно однозначно :-).

Я потерял ссылку на это обсуждение, потому цитировал по памятиsmile.gif
Цитата
И count должен быть volatile в любом случае, а TCritSect обеспечивает только атомарность доступа к нему.

Ну, атомарность тут обеспечивается архитектурой процессора. То есть, в данном случае критическая секция и не нужна.
Цитата
Насколько я помню, по итогам обсуждения системный счётчик тиков в scmRTOS стал volatile :-)
Неужели тут count квалифицирован как volatile и всё равно бяка?

Это TChannel.GetCount(). То есть, там на самом деле не
Код
return count;

а
Код
return Cbuf.get_count();


Где Cbuf - TCbuf, и в нём
Код
byte get_count() const { return count; }
...
volatile byte count;

То есть, таки volatile.

Автор: ReAl Oct 31 2009, 09:35

Цитата(AHTOXA @ Oct 31 2009, 10:22) *
Код
byte get_count() const { return count; }
...
volatile byte count;

То есть, таки volatile.
Тогда, на мой взгляд, это баг.
Чтение count и запись назад в статус менять местами нельзя.

Автор: AHTOXA Oct 31 2009, 10:15

Цитата(ReAl @ Oct 31 2009, 14:35) *
Тогда, на мой взгляд, это баг.


Согласен. А не напомните ссылочку на то обсуждение?

---
Хотя...
Запись статуса реализована как
Код
INLINE inline void __set_interrupt_state(TStatusReg status)
{
    __asm__ __volatile__ (
        "MSR PRIMASK, %0\n"
        : : "r"(status)
    );
}


Мне не совсем понятно, является ли в этом случае PRIMASK volatile?

Автор: ReAl Oct 31 2009, 14:13

Цитата(AHTOXA @ Oct 31 2009, 12:15) *
Согласен. А не напомните ссылочку на то обсуждение?
Да оно как-то частично по аськам... Выплеснулось на "исходники.ру", сейчас попробую найти

Цитата(AHTOXA @ Oct 31 2009, 12:15) *
Код
INLINE inline void __set_interrupt_state(TStatusReg status)
{
    __asm__ __volatile__ (
        "MSR PRIMASK, %0\n"
        : : "r"(status)
    );
}
Мне не совсем понятно, является ли в этом случае PRIMASK volatile?
Хм... а поставьте-ка в clobbered list "memory" в качестве барьера...


upd: вопрос и обсуждение на "исходниках.ру" http://electronix.ru/redirect.php?http://forum.sources.ru/index.php?showtopic=201904&hl=volatile
а история аськи уже утеряна

upd2: хм, а там модераторы работают, знатно тему почистили, в конце выстрижены все посты кроме моих ответов с примерами кода

Автор: AHTOXA Oct 31 2009, 19:04

Цитата(ReAl @ Oct 31 2009, 19:13) *
Хм... а поставьте-ка в clobbered list "memory" в качестве барьера...


Да, так всё в порядке. Непонятно только, откуда сборка от CodeSourcery сразу знала про волатильность PRIMASK? smile.gif
Интересная штука с размером кода получается.
Для arm-kgp-elf при внесении "memory" в clobbered list размер моего проекта подрос с 14200 до 14368.
А вот для arm-none-eabi- - наоборот, сократился с 15924 до 15812.
Первое понятно, отключилась какая-то оптимизация. А вот второе просто удивительноsmile.gif

Цитата
upd: вопрос и обсуждение на "исходниках.ру" http://electronix.ru/redirect.php?http://forum.sources.ru/index.php?showtopic=201904&hl=volatile

Ага, оно. Большое спасибо!

---
Да, забыл главное написать. 2 klen - вопрос снят, ваша сборка -- лучшаяsmile.gif

Автор: ReAl Oct 31 2009, 21:12

Цитата(AHTOXA @ Oct 31 2009, 21:04) *
Да, так всё в порядке.
Ну, в общем-то, этот "ломовой" способ должен бы работать и при всех не-volatile (т.е. шо PRIMASK, шо count).

Автор: klen Oct 31 2009, 21:13

Цитата(AHTOXA @ Oct 31 2009, 22:04) *
Да, забыл главное написать. 2 klen - вопрос снят, ваша сборка -- лучшаяsmile.gif


стараимсо!
Кстате, как Вы это измеряете?


собрал компиллер и бинутилс с поддержкой link time optimization (LTO) - но чето пока никак не пойму как это работает, код в 10 раз больше в бинарь суется(мож это и не код). разберусь - выложу свежак. главно что заработало, дальше посмотрим че не так.

Автор: AHTOXA Oct 31 2009, 21:47

Цитата(ReAl @ Nov 1 2009, 02:12) *
Ну, в общем-то, этот "ломовой" способ должен бы работать и при всех не-volatile (т.е. шо PRIMASK, шо count).

Ну а как ещё сказать компилеру, что PRIMASK волатильный? Поправил порт для кортекса на всякий случай, закоммитил.

Цитата(klen @ Nov 1 2009, 02:13) *
стараимсо!
Кстате, как Вы это измеряете?


На глазокsmile.gif Вот на два поста выше привёл размер кода в сравнении с CodeSourcery.

Цитата
собрал компиллер и бинутилс с поддержкой link time optimization (LTO) - но чето пока никак не пойму как это работает, код в 10 раз больше в бинарь суется(мож это и не код). разберусь - выложу свежак. главно что заработало, дальше посмотрим че не так.


Посмотримsmile.gif Но самое главное в новых фичах -- это чтоб их можно было отключитьsmile.gif

Автор: klen Nov 16 2009, 17:35

свежак для мелких arm

полный мультитлиб
http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm_full_20091116.7z

обрезок от полного до cortex-m3
http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm_cortex-m3_20091116.7z
напоминаю, что эти тулсы только компилируя с опцией -mcpu=cortex-m3

мои проекты уменьшились на 1% smile.gif

есть подержка LTO, но както оно странно (не)работает, короче ее не использовать, а то в флеш не вместится результат.

брат друг и товаришь по форуму Doka сообщил что ему требуется все тоже самое на хосте x86-64. учитывая что сборка происходит на убунте, если требуется кому, могу выкладывать архивы для нинукса. только свисните.

Автор: Jat Nov 18 2009, 08:37

Уважаемый klen!
Спасибо большое за Вашу работу по GCC.
Сейчас это лучшая сборка по ARM.
И хочется, чтобы работа с битовыми полями была лучше.

Если приведенный ниже пример поможет Вам - буду рад.

Пример кода (перекодировка по табличкам)

Cortex-M3 -Os

CODE

extern unsigned char const k[8][16];

typedef union
{
struct
{
unsigned y0: 4;
unsigned y1: 4;
unsigned y2: 4;
unsigned y3: 4;
unsigned y4: 4;
unsigned y5: 4;
unsigned y6: 4;
unsigned y7: 4;
} y;
unsigned int x;
} var;

unsigned int func( var v )
{
v.y.y0 = k[0][v.y.y0];
v.y.y1 = k[1][v.y.y1];
v.y.y2 = k[2][v.y.y2];
v.y.y3 = k[3][v.y.y3];
v.y.y4 = k[4][v.y.y4];
v.y.y5 = k[5][v.y.y5];
v.y.y6 = k[6][v.y.y6];
v.y.y7 = k[7][v.y.y7];
return v.x;
}


GCC: (Sourcery G++ Lite 2009q3-68) 4.4.1

CODE

20 func:
24 0000 1A4B ldr r3, .L3
25 0002 00F00F02 and r2, r0, #15
26 0006 9A5C ldrb r2, [r3, r2] @ zero_extendqisi2
27 0008 62F30300 bfi r0, r2, #0, #4
28 000c C0F30312 ubfx r2, r0, #4, #4
29 0010 9A18 adds r2, r3, r2
30 0012 127C ldrb r2, [r2, #16] @ zero_extendqisi2
31 0014 62F30710 bfi r0, r2, #4, #4
32 0018 C0F30322 ubfx r2, r0, #8, #4
33 001c 9A18 adds r2, r3, r2
34 001e 92F82020 ldrb r2, [r2, #32] @ zero_extendqisi2
35 0022 62F30B20 bfi r0, r2, #8, #4
36 0026 C0F30332 ubfx r2, r0, #12, #4
37 002a 9A18 adds r2, r3, r2
38 002c 92F83020 ldrb r2, [r2, #48] @ zero_extendqisi2
39 0030 62F30F30 bfi r0, r2, #12, #4
40 0034 C0F30342 ubfx r2, r0, #16, #4
41 0038 9A18 adds r2, r3, r2
42 003a 92F84020 ldrb r2, [r2, #64] @ zero_extendqisi2
43 003e 62F31340 bfi r0, r2, #16, #4
44 0042 C0F30352 ubfx r2, r0, #20, #4
45 0046 9A18 adds r2, r3, r2
46 0048 92F85020 ldrb r2, [r2, #80] @ zero_extendqisi2
47 004c 62F31750 bfi r0, r2, #20, #4
48 0050 C0F30362 ubfx r2, r0, #24, #4
49 0054 9A18 adds r2, r3, r2
50 0056 92F86020 ldrb r2, [r2, #96] @ zero_extendqisi2
51 005a 62F31B60 bfi r0, r2, #24, #4
52 005e 03EB1073 add r3, r3, r0, lsr #28
53 0062 93F87030 ldrb r3, [r3, #112] @ zero_extendqisi2
54 0066 63F31F70 bfi r0, r3, #28, #4
55 006a 7047 bx lr


GCC: (Klen's GCC package (KGP) for ARM/elf platform) 4.5.0 20091115 (experimental)

CODE

10 func:
13 0000 F3B5 push {r0, r1, r4, r5, r6, r7, lr}
14 0002 1E4B ldr r3, .L2
15 0004 00F00F0C and ip, r0, #15
16 0008 C0F30311 ubfx r1, r0, #4, #4
17 000c 13F80C60 ldrb r6, [r3, ip] @ zero_extendqisi2
18 0010 5918 adds r1, r3, r1
19 0012 C0F30322 ubfx r2, r0, #8, #4
20 0016 91F810C0 ldrb ip, [r1, #16] @ zero_extendqisi2
21 001a 9A18 adds r2, r3, r2
22 001c C0F30351 ubfx r1, r0, #20, #4
23 0020 C0F30335 ubfx r5, r0, #12, #4
24 0024 C0F30344 ubfx r4, r0, #16, #4
25 0028 1C19 adds r4, r3, r4
26 002a 0091 str r1, [sp, #0]
27 002c C0F30367 ubfx r7, r0, #24, #4
28 0030 03EB1071 add r1, r3, r0, lsr #28
29 0034 92F82020 ldrb r2, [r2, #32] @ zero_extendqisi2
30 0038 5D19 adds r5, r3, r5
31 003a 66F30300 bfi r0, r6, #0, #4
32 003e 95F83050 ldrb r5, [r5, #48] @ zero_extendqisi2
33 0042 6CF30710 bfi r0, ip, #4, #4
34 0046 94F840C0 ldrb ip, [r4, #64] @ zero_extendqisi2
35 004a 009C ldr r4, [sp, #0]
36 004c 62F30B20 bfi r0, r2, #8, #4
37 0050 0191 str r1, [sp, #4]
38 0052 65F30F30 bfi r0, r5, #12, #4
39 0056 1919 adds r1, r3, r4
40 0058 91F85020 ldrb r2, [r1, #80] @ zero_extendqisi2
41 005c DB19 adds r3, r3, r7
42 005e 6CF31340 bfi r0, ip, #16, #4
43 0062 DDF804C0 ldr ip, [sp, #4]
44 0066 93F86010 ldrb r1, [r3, #96] @ zero_extendqisi2
45 006a 62F31750 bfi r0, r2, #20, #4
46 006e 9CF87030 ldrb r3, [ip, #112] @ zero_extendqisi2
47 0072 61F31B60 bfi r0, r1, #24, #4
48 0076 63F31F70 bfi r0, r3, #28, #4
49 007a FCBD pop {r2, r3, r4, r5, r6, r7, pc}

Автор: klen Dec 1 2009, 09:37

свежак

теперь тулсы будут собиратся c EABI, это дает лучший код.

че это такое и очем речь можно по диагоняли посмотреть тут http://electronix.ru/redirect.php?http://infocenter.arm.com/help/topic/com.arm.doc.ihi0036b/IHI0036B_bsabi.pdf

www.klen.org/Files/DevTools/kgp_arm_eabi_20091127.7z

2_Jat
с EABI стало лучше, Вами предложенный код компиляется на 2 инструкции длинне чем у Sourcery G++ Lite 2009q3-68.
это скотино зачемто сохраняет в стек регистры которые можно неиспользовать. отсюда удлиннение. курю и думаю.
кстате это к работе с битами никакого отношения не имеет. толко к registers usage. Работа с битами очень даже хорошо для кортеха генерится.

Автор: dimka76 Dec 1 2009, 11:10

2 klen

а для AVR вы сборки не делаете?

Автор: klen Dec 1 2009, 18:10

Цитата(dimka76 @ Dec 1 2009, 14:10) *
2 klen

а для AVR вы сборки не делаете?


делаю

Автор: dimka76 Dec 2 2009, 05:19

Цитата(klen @ Dec 1 2009, 21:10) *
делаю


А скачать откуда можно? На вашем сайте последняя сборка для AVR от 2006 года.

Автор: Jat Dec 2 2009, 07:20

Цитата(klen @ Dec 1 2009, 15:37) *
с EABI стало лучше, Вами предложенный код компиляется на 2 инструкции длинне чем у Sourcery G++ Lite 2009q3-68.
это скотино зачемто сохраняет в стек регистры которые можно неиспользовать. отсюда удлиннение. курю и думаю.
кстате это к работе с битами никакого отношения не имеет. толко к registers usage.


Спасибо большое!
Скачал, проверил - все великолепно!

Кстати, если в том коде результат собирать в промежуточной переменной, вот так

CODE
unsigned int func( var v )
{
var vv;

vv.y.y0 = k[0][v.y.y0];
vv.y.y1 = k[1][v.y.y1];
vv.y.y2 = k[2][v.y.y2];
vv.y.y3 = k[3][v.y.y3];
vv.y.y4 = k[4][v.y.y4];
vv.y.y5 = k[5][v.y.y5];
vv.y.y6 = k[6][v.y.y6];
vv.y.y7 = k[7][v.y.y7];
return vv.x;
}


то код компилится лучше, чем у CS. На 1 инструкцию (4 байта) меньше.
И push/pop нет совсем.

Автор: klen Dec 2 2009, 10:06

Цитата(Jat @ Dec 2 2009, 10:20) *
Спасибо большое!
Скачал, проверил - все великолепно!

Кстати, если в том коде результат собирать в промежуточной переменной, вот так

CODE
unsigned int func( var v )
{
var vv;

vv.y.y0 = k[0][v.y.y0];
vv.y.y1 = k[1][v.y.y1];
vv.y.y2 = k[2][v.y.y2];
vv.y.y3 = k[3][v.y.y3];
vv.y.y4 = k[4][v.y.y4];
vv.y.y5 = k[5][v.y.y5];
vv.y.y6 = k[6][v.y.y6];
vv.y.y7 = k[7][v.y.y7];
return vv.x;
}


то код компилится лучше, чем у CS. На 1 инструкцию (4 байта) меньше.
И push/pop нет совсем.


вот я этого и добивался!
я не знаю как там IAR и иже с ними, но если для GCC код С писать c пониманием во что и как это переваривается - можно недетски оптимизатору помочь. Но.. для этого нада спецнавыки и знания навыки.

2_dimka76
седня-завтра пересоберу выложу.


2_All_кому_нада _avr
ктонить тыкнет носом в патч который avr-size заставляет знать размеры ОЗУ и FLASH микросхем. лень искать и лень самому писать.

Автор: Andrew2000 Dec 2 2009, 11:42

Цитата(klen)
вот я этого и добивался!

выкладывайте, пожалуйста, линуксячие сборки (32бит) - раз уж все равно собираете...

Автор: klen Dec 2 2009, 12:11

Цитата(Andrew2000 @ Dec 2 2009, 14:42) *
выкладывайте, пожалуйста, линуксячие сборки (32бит) - раз уж все равно собираете...

я 64битные собираю. 32битные не кашерно. Это сильно старый комп должен быть чтоб на него нельзя было поставить 64биный линукс.

Автор: faa Dec 2 2009, 13:52

Цитата(klen @ Dec 2 2009, 15:11) *
я 64битные собираю.

А где?
На http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/ ошибка 403.

Автор: klen Dec 2 2009, 17:10

Цитата(faa @ Dec 2 2009, 16:52) *
А где?
На http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/ ошибка 403.

во первых их там еще нет. я их собираю но не складываю туда.
во вторых у Вас нет прав на просмотр www.klen.org/Files/DevTools

при следеющей пересборке выложу линуксовую сборку.

Автор: Andrew2000 Dec 2 2009, 17:19

Цитата(klen @ Dec 2 2009, 15:11) *
Это сильно старый комп должен быть чтоб на него нельзя было поставить 64биный линукс.

да, старенький;
тогда, если не сложно, архив Ваших src, или изменения относительно оригинальных исходников, ну или краткую инструкцию по сборке (я уже спрашивал через личку - не пришло сообщение?).
(хотя, жаль что нет 32бит - уж больно долго все это добро собирается)

Автор: klen Dec 2 2009, 20:42

Цитата(Andrew2000 @ Dec 2 2009, 20:19) *
да, старенький;
тогда, если не сложно, архив Ваших src, или изменения относительно оригинальных исходников, ну или краткую инструкцию по сборке (я уже спрашивал через личку - не пришло сообщение?).
(хотя, жаль что нет 32бит - уж больно долго все это добро собирается)

все что я правил уже в транке, я с транка собираю
http://electronix.ru/redirect.php?http://gcc.gnu.org/svn.html

Автор: Andrew2000 Dec 2 2009, 20:54

Цитата(klen @ Dec 2 2009, 23:42) *
все что я правил уже в транке, я с транка собираю
http://electronix.ru/redirect.php?http://gcc.gnu.org/svn.html

еще вопросы:
- в gcc/config/arm/t-arm-elf какие-нить изменения вносите для полного мультилиба?
- gmp- и mpfr- нужно скачивать отдельно, или они вообще не нужны?

Автор: faa Dec 2 2009, 21:25

Цитата(klen @ Dec 2 2009, 20:10) *
при следеющей пересборке выложу линуксовую сборку.

Если Вас не затруднит. И очень желательно бы с исходниками.
А если все будет еще и скриптами обернуто, как, например, в crunch-tools/cross-tool/buildroot/ptxdist/oe и т.п. (специфические патчи, откуда брать исходники и скрипты для сборки).
А то пока со всех ресурсов все соберешь в кучу - столько времени и сил уходит smile.gif
Причем, прекрасно знаешь/понимаешь, что кто-то это уже сделал или делает в этот же момент либо занят чем-то другим и ждет, кто быстрее его патч прикрутит к более свежей версии, если этот патч в транк/бранч не вошел.
ЗЫ: Машины линуксовые есть - и 32 и 64. Можно хоть каждую ночь собирать на автомате.

Автор: klen Dec 3 2009, 14:38

свежак для avr
www.klen.org/Files/DevTools/kgp_avr_20091202_i686-pc-mingw32.7z

1. Исходники ко всему берутся из cvs репозиториев (binutils,gdb,avr-libc,newlib), svn trunk для gcc, поэтому Вы сами можете их и без меня забрать.
2. скрипта сборки у меня нет. делаю все руками.
3. по поводу сборки для линукс. пока ниче не получится. потому что тулсы тянут кучу системных и сторонних (пересобранных мной) либ. если их тупо скопировать хрен это заработает.
в следующий раз попытаюсь скомпилять тулсы статически. если получится то буду выкладывать. сейчас к примеру сс1 тянет
klen@klen-dev:/opt/kgp_avr/libexec/gcc/avr/4.5.0$ ldd /opt/kgp_arm_eabi/libexec/gcc/arm-kgp-eabi/4.5.0/cc1plus
linux-vdso.so.1 => (0x00007fff043ff000)
libcloog.so.0 => /opt/kgp_linux64/lib/libcloog.so.0 (0x00007fa56c78e000)
libppl_c.so.2 => /opt/kgp_linux64/lib/libppl_c.so.2 (0x00007fa56c242000)
libppl.so.7 => /opt/kgp_linux64/lib/libppl.so.7 (0x00007fa56bf7a000)
libgmpxx.so.4 => /opt/kgp_linux64/lib/libgmpxx.so.4 (0x00007fa56bd76000)
libmpfr.so.1 => /opt/kgp_linux64/lib/libmpfr.so.1 (0x00007fa56bb27000)
libgmp.so.3 => /opt/kgp_linux64/lib/libgmp.so.3 (0x00007fa56b8ca000)
libdl.so.2 => /lib/libdl.so.2 (0x00007fa56b6c6000)
libelf.so.0 => /opt/kgp_linux64/lib/libelf.so.0 (0x00007fa56cb97000)
libc.so.6 => /lib/libc.so.6 (0x00007fa56b357000)
libstdc++.so.6 => /opt/kgp_linux64/lib/libstdc++.so.6 (0x00007fa56b030000)
libm.so.6 => /lib/libm.so.6 (0x00007fa56adac000)
libgcc_s.so.1 => /opt/kgp_linux64/lib/libgcc_s.so.1 (0x00007fa56ab95000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa56c9b0000)

4. mpfr и gmp необходимы для сборки gcc, если их нет gcc не соберется
http://electronix.ru/redirect.php?http://gcc.gnu.org/install/prerequisites.html здесь написано что необходимо.
Вы должные скачать готовые либы и ниделы для своей платформы или скачать исходники их собрать.

5. мануал я писать как собирать все это барохло я не буду. никаких ''сИкретов" нет. все патчи уже содержатся в trunk.

Автор: dimka76 Dec 4 2009, 05:47

Цитата(klen @ Dec 3 2009, 17:38) *
свежак для avr
www.klen.org/Files/DevTools/kgp_avr_20091202_i686-pc-mingw32.7z


Вы свою сборку с WinAVR не сравнивали ?
Например, на предмет оптимальности получаемого кода.

Автор: klen Dec 4 2009, 09:29

Цитата(dimka76 @ Dec 4 2009, 08:47) *
Вы свою сборку с WinAVR не сравнивали ?
Например, на предмет оптимальности получаемого кода.


неа, уверен Вы сравните и раскажете. А че? плохой код выдает?
а что такое "оптимальный получаймый код" я незнаю ? скорость, компактность, объем потребного озу, скорость кодогенерации. это все взаимоисключающие критерии. какой из них для Вас "оптимальный" smile.gif Вот например для индусов оптимальный код - тот который написан за один час и имеет 1000 строк кода и похер как работает.

для меня "оптимальный получаймый код" - быстрые циклы ручками на асме, прарывания жЁско на асме, все остальное С-код GCC по любому пережует неплохо. Главное чтоб глюков небыло.

Автор: dimka76 Dec 4 2009, 09:56

Цитата(klen @ Dec 4 2009, 12:29) *
а что такое "оптимальный получаймый код" я незнаю ?


это - скорость, компактность, объем потребного озу, скорость кодогенерации в одном флаконе biggrin.gif

просто если все (и вы и создатели WinAVR, в том числе) собирают из одних исходников, то какая разница.
этот вопрос и для ARM(ов) справедлив.

Автор: klen Dec 4 2009, 10:15

Цитата(dimka76 @ Dec 4 2009, 12:56) *
это - скорость, компактность, объем потребного озу, скорость кодогенерации в одном флаконе biggrin.gif

просто если все (и вы и создатели WinAVR, в том числе) собирают из одних исходников, то какая разница.
этот вопрос и для ARM(ов) справедлив.


разница есть и их 2 штуки минимум.
1. сам компиллер и библиотеки можно собирать с мулионом вариантов 0пций компиляции и получить разный выходной бинарный код. исходнички то одни ....
2. я компиляю свежие исходники с оперативными изменеиями, которые в релизы еще не вошли. WinAVR раз в год опоросяеццо... или реже? исходнички то разные ....

но по большому счету наверно в 99% проектов это незаметно. для энтузиастов-исследователей интересно поглядеть какой на выходе асм , а просто разработчиком это паралельно

Автор: Andrew2000 Dec 8 2009, 02:09

2 klen
Спасибо за ответы!
остался без внимания вопрос:
- в gcc/config/arm/t-arm-elf какие-нить изменения вносите для полного мультилиба?

Автор: klen Dec 8 2009, 15:09

"полный" это относительное понятие
модете еще дораскоментировать некоторве секции

Код
# For most CPUs we have an assembly soft-float implementations.
# However this is not true for ARMv6M.  Here we want to use the soft-fp C
# implementation.  The soft-fp code is only build for ARMv6M.  This pulls
# in the asm implementation for other CPUs.
LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
    _call_via_rX _interwork_call_via_rX \
    _lshrdi3 _ashrdi3 _ashldi3 \
    _arm_negdf2 _arm_addsubdf3 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
    _arm_fixdfsi _arm_fixunsdfsi \
    _arm_truncdfsf2 _arm_negsf2 _arm_addsubsf3 _arm_muldivsf3 \
    _arm_cmpsf2 _arm_unordsf2 _arm_fixsfsi _arm_fixunssfsi \
    _arm_floatdidf _arm_floatdisf _arm_floatundidf _arm_floatundisf \
    _clzsi2 _clzdi2

MULTILIB_OPTIONS     = marm/mthumb
MULTILIB_DIRNAMES    = arm thumb
MULTILIB_EXCEPTIONS  =
MULTILIB_MATCHES     =

MULTILIB_OPTIONS      += march=armv7
MULTILIB_DIRNAMES     += armv7
MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
MULTILIB_MATCHES      += march?armv7=march?armv7-a
MULTILIB_MATCHES      += march?armv7=march?armv7-r
MULTILIB_MATCHES      += march?armv7=march?armv7-m
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4

MULTILIB_OPTIONS      += mcpu=cortex-m3
MULTILIB_DIRNAMES     += cortex-m3
MULTILIB_EXCEPTIONS   += mcpu=cortex-m3* *march=armv7*/mcpu=cortex-m3*  marm/*mcpu=cortex-m3*
MULTILIB_MATCHES      += mcpu?cortex-m3=mtune?cortex-m3


# Not quite true.  We can support hard-vfp calling in Thumb2, but how do we
# express that here?  Also, we really need architecture v5e or later
# (mcrr etc).
#MULTILIB_OPTIONS       += mfloat-abi=hard
#MULTILIB_DIRNAMES      += fpu
#MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*

# MULTILIB_OPTIONS    += mcpu=ep9312
# MULTILIB_DIRNAMES   += ep9312
# MULTILIB_EXCEPTIONS += *mthumb/*mcpu=ep9312*
#     
#MULTILIB_OPTIONS     += mlittle-endian/mbig-endian
#MULTILIB_DIRNAMES    += le be
#MULTILIB_MATCHES     += mbig-endian=mbe mlittle-endian=mle
#
#MULTILIB_OPTIONS    += mhard-float/msoft-float
#MULTILIB_DIRNAMES   += fpu soft
#MULTILIB_EXCEPTIONS += *mthumb/*mhard-float*
#
MULTILIB_OPTIONS    += mno-thumb-interwork/mthumb-interwork
MULTILIB_DIRNAMES   += normal interwork
#
# MULTILIB_OPTIONS    += fno-leading-underscore/fleading-underscore
# MULTILIB_DIRNAMES   += elf under
#
# MULTILIB_OPTIONS    += mcpu=arm7
# MULTILIB_DIRNAMES   += nofmult
# MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=arm7*
# # Note: the multilib_exceptions matches both -mthumb and
# # -mthumb-interwork
# #
# # We have to match all the arm cpu variants which do not have the
# # multiply instruction and treat them as if the user had specified
# # -mcpu=arm7.  Note that in the following the ? is interpreted as
# # an = for the purposes of matching command line options.
# # FIXME: There ought to be a better way to do this.
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7d
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7di
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm70
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm700
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm700i
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm710
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm710c
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7100
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7500
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7500fe
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm6
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm60
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm600
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm610
# MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm620

EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o

# If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here
# EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o

LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

# Currently there is a bug somewhere in GCC's alias analysis
# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
# Disabling function inlining is a workaround for this problem.
TARGET_LIBGCC2_CFLAGS = -fno-inline

# Assemble startup files.
$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
    $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
    -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm

$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)
    $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
    -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm

Автор: Andrew2000 Dec 9 2009, 00:52

Цитата(klen @ Dec 8 2009, 18:09) *
"полный" это относительное понятие

Спасибо!

Автор: ReAl Dec 16 2009, 19:13

Цитата(klen @ Dec 2 2009, 12:06) *
2_All_кому_нада _avr
ктонить тыкнет носом в патч который avr-size заставляет знать размеры ОЗУ и FLASH микросхем. лень искать и лень самому писать.

http://electronix.ru/redirect.php?https://winavr.svn.sourceforge.net/svnroot/winavr/trunk/patches/binutils/2.19/30-binutils-2.19-avr-size.patch

Автор: klen Dec 16 2009, 23:59

Цитата(ReAl @ Dec 16 2009, 22:13) *
http://electronix.ru/redirect.php?https://winavr.svn.sourceforge.net/svnroot/winavr/trunk/patches/binutils/2.19/30-binutils-2.19-avr-size.patch

спасибо. при следующей сборке постараюсь прикрутить.

Автор: klen Jan 24 2010, 19:21

с замиранием дыхания констатирую окончание "праздников", с чем и поздравляю, неее.. ребята, с этим нада что то делать. так мы новое прекрасное общество с таким календарем не построим


итак, оправившись от тяжелейшего отдыха, сравнимого по воздействию на организм с жеским стресом, выкатываю свежую сборку для мелкоармов
http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm_eabi_20100119.7z
оставлен GDB 6.8, новый 7.0-ой тоже есть, но c ним есть эклипс регистры не кажет - перцы из eclipse.org тупят и не патчат CTD+JTAG/gdb плагины.
должен сказать что openocd растет как на дрожжах - позитиф! за месяц нового много функционала.

собрал сборку под мипсы с ньюлибом. нада комунить?

для авыэров будет пожже. хочу закрыть все накопившиеся вопросы с avr32, atxmega, avr-size

Автор: AHTOXA Jan 29 2010, 06:20

Цитата(klen @ Jan 25 2010, 00:21) *
выкатываю свежую сборку для мелкоармов
http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm_eabi_20100119.7z


Ура!

Но... чего-то не хватаетsmile.gif

Первое критично, остальное пофигsmile.gif

Автор: inco Jan 29 2010, 18:10

Тоже подтверждаю. Версия не рабочая. Проект собранный на версии kgp_arm_eabi_20091127 с новой версией не собирается! Ассемблерные файлы не компилируются (startup) и на файлы c++ тоже ругается.

Автор: klen Jan 30 2010, 00:35

завтра (тоесть утром) починим.
про libstdc++-6.dll я сам уже заметил. перенес на другой комп.

2_inco
а дайте этот асмовый файл, я погляжу про че там ругаеццо.

тем немение этой сборкой собрал проетик с stm32f107vct + rtl8201cp + uIP , заработало! это первое мое железо с эзернетом. зайти броузером на платку и выставить светодиоды - это приятно.

зы. яж выше писал - выход из праздников вещь тяяяжелоая cranky.gif

Автор: inco Jan 30 2010, 08:22

Так давать нечего стандартный startup_stm32f10x_hd.S из библиотек STM32 а вот как ругается уже не помню. После того как выяснил что не работает вернулся на предыдущую версию.

Автор: klen Feb 1 2010, 22:56

свежая сборка для мелкоармов
http://electronix.ru/redirect.php?http://www.klen.org/Files/DevTools/kgp_arm_eabi_20100201.7z

вроде теперь все "дээллэлки" положил smile.gif

openocd собран "ширше и глубже":
--enable-ft2232_ftd2xx
--enable-ep93xx
--enable-at91rm9200
--enable-presto_ftd2xx
--enable-parport-giveio
--enable-amtjtagaccel
--enable-jlink
--enable-rlink
--enable-arm-jtag-ew
должны работать не только прикрутки на ftdi. проверьте у кого есть RLink и JLink.

проверил на своих проекта на stm32f107 и lpc2103, девайсы работают исправно.

2_inco асм компиляет и для того и для другого.

Автор: dimka76 Feb 2 2010, 05:34

Цитата(klen @ Feb 2 2010, 01:56) *
свежая сборка для мелкоармов


Что означает термин "мелкоармы" ?

Автор: Сергей Борщ Feb 2 2010, 09:30

Цитата(dimka76 @ Feb 2 2010, 07:34) *
Что означает термин "мелкоармы" ?
Рискну предположить, что это Little-endian ARM. Правильно догадался?

Автор: AHTOXA Feb 2 2010, 09:38

Цитата(Сергей Борщ @ Feb 2 2010, 14:30) *
Рискну предположить, что это Little-endian ARM. Правильно догадался?


Сдаётся мне, что нетsmile.gif
Моё предположение - это голые армы (без оси), первая строчка в http://electronix.ru/redirect.php?http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite от CS.

Автор: dimka76 Feb 2 2010, 09:44

Цитата(AHTOXA @ Feb 2 2010, 12:38) *
Сдаётся мне, что нетsmile.gif
Моё предположение ....


Наверное достоверно на этот вопрос только klen сможет.

Автор: inco Feb 2 2010, 10:04

А у меня всё равно не работает ассемблер!
Вот что выдаёт:
Assembling: Startup/startup_stm32f10x_md.S
arm-kgp-eabi-g++ -c -mthumb -mcpu=cortex-m3 -mthumb-interwork -I. -x assembler-with-cpp -D VECT_TAB_RAM -Wa,-adhlns=List/startup_stm32f10x_md.lst,--gdwarf-2 Startup/startup_stm32f10x_md.S -o obj/startup_stm32f10x_md.o
make: *** [Startup/startup_stm32f10x_md.o] Error 1

При этом версия kgp_arm_eabi_20091127 всё ест спокойно без возмущения
Assembling: Startup/startup_stm32f10x_md.S
arm-kgp-eabi-g++ -c -mthumb -mcpu=cortex-m3 -mthumb-interwork -I. -x assembler-with-cpp -D VECT_TAB_RAM -Wa,-adhlns=List/startup_stm32f10x_md.lst,--gdwarf-2 Startup/startup_stm32f10x_md.S -o obj/startup_stm32f10x_md.o

Просто заменяю в директории WinARM файлы из одного или другого архива. С проектом и исходниками при этом ничего не делаю!

Автор: klen Feb 2 2010, 17:22

2_AHTOXA
Вы правы, под мелкоармами я понимаю то что называют "микроконтроллеры" - тоесть то где нет MMU, из того что я знаю это микрухи с флеш и озу в нутрях на arm7tdmi и cortex-m3. нада сказать что дело не вкомпиллере - он под любой cpu сможет генерить, дело в библиотеках и ld который нужный формат бинаря выдает.

2_inco
Вы совершенно правы - еще косяг выщемил. забыл еще одну библу в дистрибутиив положить. в атаче зажатая архиватором 7z библы libgcc_s_dw2-1.dll и libgfortran-3.dll
киньте в bin, все должно заработать.
у меня
arm-kgp-eabi-g++ -c -mthumb -mcpu=cortex-m3 -mthumb-interwork -I. -x assembler-with-cpp -D VECT_TAB_RAM -Wa,-adhlns=List/startup_stm32f10x_md.lst,--gdwarf-2 Startup/startup_stm32f10x_md.S -o obj/startup_stm32f10x_md.o
нормально генерить асм. посмотрел filemon'ом - грузится libgcc_s_dw2-1.dll которую заюыл положить


извиняюсь. издержки експеремента по переходу со статической на сборку с дллэлками - это должно снизить размер дистрибутива. не критично при современных скоростях интернета но давно хотел для красоты сделать. вот и вылазит что чтото забыл положить.

во втором архиве еще libgfortran-3.dll, не проверял, пока допишите в bin если на фортране компиляееть собираетесь

 libgcc_s_dw2_1.7z ( 48.43 килобайт ) : 34
 bin.7z ( 326.61 килобайт ) : 38
 

Автор: Genadi Zawidowski Feb 2 2010, 17:44

За свовременно выложенную dll спасибо.

А что делать вот с этим:

Цитата
c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: error: no memory region specified for loadable section `.ARM.exidx.text.__gnu_ldivmod_helper'


В смысле, какой паттерн описать чтобы всё подобное попало куда надо?
Мой скрипт выглядит так:
CODE
SEARCH_DIR(.)

/*
* Define stack size here
*/
FIQ_STACK_SIZE = 0x0100;
IRQ_STACK_SIZE = 0x0100;
ABT_STACK_SIZE = 0x0100;
UND_STACK_SIZE = 0x0100;
SVC_STACK_SIZE = 0x0400;


MEMORY
{
rom : org = 0x00100000, len = 64k
ram : org = 0x00200000, len = 16k
}

/*
* Do not change the next code
*/
SECTIONS
{
.text :
{
*(.vectors);
. = ALIGN(4);
*(.init);
. = ALIGN(4);
*(.text.*);
. = ALIGN(4);
*(.rodata);
. = ALIGN(4);
*(.rodata*);
. = ALIGN(4);
*(.glue_7t);
. = ALIGN(4);
*(.glue_7);
/*
. = ALIGN(4);
KEEP (*(.eh_frame))
*/
. = ALIGN(4);
etext = .;
} > rom

.data : AT (ADDR (.text) + SIZEOF (.text))
{
PROVIDE (__data_start = .);
*(.ramfunc)
. = ALIGN(4);
*(.data)
. = ALIGN(4);
edata = .;
_edata = .;
PROVIDE (__data_end = .);
} > ram

.bss :
{
PROVIDE (__bss_start = .);
*(.bss)
*(COMMON)
. = ALIGN(4);
PROVIDE (__bss_end = .);

. = ALIGN(256);

PROVIDE (__stack_start = .);

PROVIDE (__stack_fiq_start = .);
. += FIQ_STACK_SIZE;
. = ALIGN(4);
PROVIDE (__stack_fiq_end = .);

PROVIDE (__stack_irq_start = .);
. += IRQ_STACK_SIZE;
. = ALIGN(4);
PROVIDE (__stack_irq_end = .);

PROVIDE (__stack_abt_start = .);
. += ABT_STACK_SIZE;
. = ALIGN(4);
PROVIDE (__stack_abt_end = .);

PROVIDE (__stack_und_start = .);
. += UND_STACK_SIZE;
. = ALIGN(4);
PROVIDE (__stack_und_end = .);

PROVIDE (__stack_svc_start = .);
. += SVC_STACK_SIZE;
. = ALIGN(4);
PROVIDE (__stack_svc_end = .);
PROVIDE (__stack_end = .);
PROVIDE (__heap_start = .);
} > ram

/DISCARD/ :
{
*(.eh_frame_hdr)
*(.eh_frame)
}

}

Автор: AHTOXA Feb 2 2010, 18:23

Цитата(Genadi Zawidowski @ Feb 2 2010, 22:44) *
какой паттерн описать чтобы всё подобное попало куда надо?


Вставьте
Код
    __exidx_start = .;
    .ARM.exidx :
    {
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    } >rom


куда-нибудь после glue_7t, но до etext.

Автор: Genadi Zawidowski Feb 2 2010, 18:38

А эту куда?

.ARM.extab.text.unwind_phase2_forced

Описывал всё подряд... получил

Цитата
c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: .text has both ordered [`.ARM.exidx.text.__gnu_ldivmod_helper' in c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0\libgcc.a(bpabi.o)] and unordered [`.ARM.extab.text.__gnu_ldivmod_helper' in c:/kgp_arm_eabi/bin/../lib/
gcc/arm-kgp-eabi/4.5.0\libgcc.a(bpabi.o)] sections
c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: final link failed: Bad value
collect2: ld returned 1 exit status


Есть у компилятора ключи чтобы не клал все функции в отдельные сеции?
Или в каком порядке и где должны быть .ARM.extab.text.* и .ARM.exidx.text.*

И ещё - надо ли ставить точку перед звёздочкой (в смысле - включать ли точку в шаблон) всяких имён секций .bss.*, .data.* и .text.* - что ещё можно встретить?

ps: до этого исользовал сборку yagarto - решл попробовать...

зы2: в конце теперь так
Цитата
c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: .text has both
ordered [`.ARM.exidx.text.__gnu_ldivmod_helper' in c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0\l
ibgcc.a(bpabi.o)] and unordered [`.rodata._global_impure_ptr' in c:/kgp_arm_eabi/bin/../lib/gcc/arm-kg
p-eabi/4.5.0/../../../../arm-kgp-eabi/lib\libc.a(lib_a-impure.o)] sections
c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: final link fail
ed: Bad value


АНТОХА, можете свой скрипт работающий с KGP выложить?

Автор: AHTOXA Feb 2 2010, 18:59

Цитата(Genadi Zawidowski @ Feb 2 2010, 23:38) *
А эту куда?
.ARM.extab.text.unwind_phase2_forced


А эту просто в текст:
Код
    .text :
    {
        __ctors_start__ = .;
        KEEP(SORT(*)(.ctors))
        __ctors_end__ = .;
        __dtors_start__ = .;
        __dtors_end__ = .;
        
        . = ALIGN(4);
        *(.text)                   /* remaining code */
        *(.text.*)                   /* remaining code */
        *(.rodata)                 /* read-only data (constants) */
        *(.rodata*)

        *(.eh_frame_hdr)
        *(.eh_frame)
        *(.ARM.extab* .gnu.linkonce.armextab.*)
        *(.gcc_except_table)
        *(.eh_frame_hdr)
        *(.eh_frame)

        *(.glue_7)
        *(.glue_7t)
        . = ALIGN(4);
    } >rom

    __exidx_start = .;
    .ARM.exidx :
    {
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    } >rom

    __exidx_end = .;
    .text.align :
    {
        . = ALIGN(8);
        _etext = .;
        _sidata = _etext;
    } >rom

    .data  : AT ( _sidata )
...


Цитата
Есть у компилятора ключи чтобы не клал все функции в отдельные сеции?


Для этих - вряд ли, это какие-то специальные секции.

Цитата
И ещё - надо ли ставить точку перед звёздочкой (в смысле - включать ли точку в шаблон) всяких имён секций .bss.*, .data.* и .text.* - что ещё можно встретить?


Вот bss:
Код
    .bss :
    {
        . = ALIGN(4);
        _sbss = .; /* Used by the startup in order to initialize the .bss section */
         *(.bss)
         *(.bss.*)
         *(COMMON)
        . = ALIGN(4);
        _ebss = .; /* Used by the startup in order to initialize the .bss section */
        _end = .;
        __end = .;
    } >RAM


Цитата
ps: до этого исользовал сборку yagarto - решл попробовать...


Ягарто старое совсем. Лучше http://electronix.ru/redirect.php?http://www.codesourcery.com/sgpp/lite/arm/portal/release830, а ещё лучше - сборки klensmile.gif
Рабочие варианты скриптов для этих двух сборок можно посмотреть http://electronix.ru/redirect.php?http://scmrtos.svn.sourceforge.net/viewvc/scmrtos/trunk/Samples/CortexM3/GCC/1-EventFlag/prj/. Там для кортексов, но не суть.

Автор: klen Feb 2 2010, 19:40

это у меня для кортекса работает

Код
/*ENTRY(Reset_Handler)*/
OUTPUT_FORMAT ("elf32-littlearm")

MEMORY
{
  flash   (rx)  : ORIGIN = 0x08000000, LENGTH = 256K
  ram    (rwx)  : ORIGIN = 0x20000000, LENGTH = 64K
}

/* define a global symbol _stack_end  */
_stack_end_ = 0x2000ffff;


/* now define the output sections  */
SECTIONS
{
    . = 0;                                /* set location counter to address zero  */

    .text :                                /* collect all sections that should go into FLASH after startup  */
    {
        . = ALIGN(4);
        KEEP(*(.flash_vec_table))
        *(.text)
        *(.text*)                        /* all .text sections (code)  */
        *(.rodata)                        /* all .rodata sections (constants, strings, etc.)  */
        *(.rodata*)                        /* all .rodata* sections (constants, strings, etc.)  */
        *(.glue_7)                        /* all .glue_7 sections  (no idea what these are) */
        *(.glue_7t)                        /* all .glue_7t sections (no idea what these are) */
        *(.gnu*)
        *(.gcc*)
        . = ALIGN(4);
        _text_end_ = .;                    /* define a global symbol _etext just after the last code byte */
    } >flash                            /* put all the above into FLASH */

  
    _ram_vec_load_start_ = _text_end_;
    .ram_vec :                                
    {
        . = ALIGN(4);
        _ram_vec_start_ = .;                
        KEEP(*(.ram_vec))
        _ram_vec_end_ = ALIGN( . , 4);                    
    }  >ram    AT> flash
     _ram_vec_load_end_ = _ram_vec_load_start_ + SIZEOF(.ram_vec);                

   _data_load_start_ = _ram_vec_load_end_;
   .data :                                /* collect all initialized .data sections that go into RAM  */
    {
        . = ALIGN(4);
        _data_start_ = .;                        /* create a global symbol marking the start of the .data section  */
        *(.data)                        /* all .data sections  */
        *(.data*)
        _data_end_ = ALIGN( . , 4);                            /* define a global symbol marking the end of the .data section  */
    } >ram AT >flash                    /* put all the above into RAM (but load the LMA copy into FLASH) */
  _data_load_end_ = _data_load_start_ +  SIZEOF(.data);    
  
   _fast_load_start_ = _data_load_end_;
   .fast :
   {
     . = ALIGN(4);
     _fast_start_ = .;
     *(.fast)
     *(.fast*)
     _fast_end_ = ALIGN( . , 4);
   } >ram AT >flash
   _fast_load_end_ = _fast_load_start_ +  SIZEOF(.fast);
   _flash_end_ = _fast_load_end_;
    
    
    .bss :    
    {
        . = ALIGN(4);
        _bss_start_ = .;
        *(.bss)                    
        *(.bss*)
        _bss_end_ = .;
    } >ram    

   DISCARD :
    {
     libc.a ( * )
     libm.a ( * )
     libgcc.a ( * )
     }    
    
    /* Stabs debugging sections.  */
    .stab          0 : { *(.stab) }
    .stabstr       0 : { *(.stabstr) }
    .stab.excl     0 : { *(.stab.excl) }
    .stab.exclstr  0 : { *(.stab.exclstr) }
    .stab.index    0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) }
    .comment       0 : { *(.comment) }
    /* DWARF debug sections.
       Symbols in the DWARF debugging sections are relative to the beginning
       of the section so we begin them at 0.  */
    /* DWARF 1 */
    .debug          0 : { *(.debug) }
    .line           0 : { *(.line) }
    /* GNU DWARF 1 extensions */
    .debug_srcinfo  0 : { *(.debug_srcinfo) }
    .debug_sfnames  0 : { *(.debug_sfnames) }
    /* DWARF 1.1 and DWARF 2 */
    .debug_aranges  0 : { *(.debug_aranges) }
    .debug_pubnames 0 : { *(.debug_pubnames) }
    /* DWARF 2 */
    .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
    .debug_abbrev   0 : { *(.debug_abbrev) }
    .debug_line     0 : { *(.debug_line) }
    .debug_frame    0 : { *(.debug_frame) }
    .debug_str      0 : { *(.debug_str) }
    .debug_loc      0 : { *(.debug_loc) }
    .debug_macinfo  0 : { *(.debug_macinfo) }
    /* SGI/MIPS DWARF 2 extensions */
    .debug_weaknames 0 : { *(.debug_weaknames) }
    .debug_funcnames 0 : { *(.debug_funcnames) }
    .debug_typenames 0 : { *(.debug_typenames) }
    .debug_varnames  0 : { *(.debug_varnames) }
      
}


это у меня для arm7tdmi, подянял старый проект персобрал свежаком.. тут вообще примитивный скрипт. собирается. попробуйте ...мож получится, тока карту памяти измените под себя
Код
/* identify the Entry Point  */
/*ENTRY(_vectors)*/


/* specify the LPC2148 memory areas  */
MEMORY
{
    flash                 : ORIGIN = 0,          LENGTH = 512K    /* FLASH ROM                                */    
    ram_vec             : ORIGIN = 0x40000000, LENGTH = 64      /* vec table in RAM                         */
    ram_isp_low(A)        : ORIGIN = 0x40000120, LENGTH = 223        /* variables used by Philips ISP bootloader    */        
    ram                   : ORIGIN = 0x40000200, LENGTH = 32513   /* free RAM area                            */
    ram_isp_high(A)        : ORIGIN = 0x40007FE0, LENGTH = 32        /* variables used by Philips ISP bootloader    */
    ram_usb_dma            : ORIGIN = 0x7FD00000, LENGTH = 8192    /* on-chip USB DMA RAM area (not used)      */
}


/* define a global symbol _stack_end  */
_stack_end = 0x40007EDC;



/* now define the output sections  */
SECTIONS
{
    . = 0;                                /* set location counter to address zero  */
    
    _vec_load_start_ = .;
    .vec :
    {
     KEEP(*(.vec*))
    } >flash        /* the startup code goes into FLASH */
    _vec_load_end_ =  _vec_load_start_  + SIZEOF(.vec);
    
    

    .text :                                /* collect all sections that should go into FLASH after startup  */
    {
        *(.text*)                        /* all .text sections (code)  */
        *(.rodata*)                        /* all .rodata* sections (constants, strings, etc.)  */
        *(.glue_7)                        /* all .glue_7 sections  (no idea what these are) */
        *(.glue_7t)                        /* all .glue_7t sections (no idea what these are) */
        _text_end = .;                    /* define a global symbol _etext just after the last code byte */
    } >flash                            /* put all the above into FLASH */
    
   .fast_vec :
   {
     _fast_vec_start_ = .;
     _fast_vec_end_ =  _fast_vec_start_ + SIZEOF(.vec);
   } >ram_vec
  
  
   _fast_load_start_ = ALIGN ( _text_end , 4 );
   .fast :
   {
     _fast_start_ = .;
     *(.fast)
     _fast_end_ = .;
   } >ram AT >flash
   _fast_load_end = _fast_load_start_ + SIZEOF(.fast);
    
   _data_load_start_ = ALIGN ( _fast_load_end , 4 );
    .data :                                /* collect all initialized .data sections that go into RAM  */
    {
        _data_start_ = .;                        /* create a global symbol marking the start of the .data section  */
        *(.data)                        /* all .data sections  */
        _data_end_ = .;                        /* define a global symbol marking the end of the .data section  */
    } >ram AT >flash                    /* put all the above into RAM (but load the LMA copy into FLASH) */
   _data_load_end_ = _data_load_start_ + SIZEOF(.data);
  
  

    .bss :                                /* collect all uninitialized .bss sections that go into RAM  */
    {
        _bss_start = .;                    /* define a global symbol marking the start of the .bss section */
        *(.bss)                            /* all .bss sections  */
    } >ram                                /* put all the above in RAM (it will be cleared in the startup code */

    . = ALIGN(4);                        /* advance location counter to the next 32-bit boundary */
    _bss_end = .;                        /* define a global symbol marking the end of the .bss section */
    


}
    _end = .;                            /* define a global symbol marking the end of application RAM */

Автор: Genadi Zawidowski Feb 2 2010, 19:53

Насчёт ягарто... обновлялся в декабре 2009-го года.

Цитата
C:\user\dds2\TC1\at91sam7s>arm-elf-gcc --version
arm-elf-gcc.EXE (GCC) 4.4.2


Ваш скрипт попробую применить - на работающем проекте (arm7tdmi, AT91SAM7Sxxx).

Автор: inco Feb 2 2010, 21:49

Спасибо! Теперь действительно работает!

Автор: Genadi Zawidowski Feb 2 2010, 23:47

Похоже, я нарвался на какой-то старый баг:
http://electronix.ru/redirect.php?http://www.mail-archive.com/bug-binutils@gnu.org/msg01065.html

Только сейчас, он конечно более детальную диагностику вызывает - но от этого не легче - имедж не собирается.

Проект в аттачменте, в каталоге at91sam7s находится Makefile. В нём прописан путь к месту, где находится "свежак KGP". Кто-нибудь может понять, почему этот комплект не собирает?

Автор: AHTOXA Feb 3 2010, 06:51

Цитата(Genadi Zawidowski @ Feb 3 2010, 04:47) *
Кто-нибудь может понять, почему этот комплект не собирает?


Потому что вы сделали не так, как я писалsmile.gif

Вот, поправил:  sam7x64_rom.zip ( 1.54 килобайт ) : 114


(Обратите внимание, что откуда-то подтягивается вызов malloc.)

Автор: Genadi Zawidowski Feb 3 2010, 17:54

Цитата(AHTOXA @ Feb 3 2010, 09:51) *
Потому что вы сделали не так, как я писалsmile.gif

Вот, поправил:  sam7x64_rom.zip ( 1.54 килобайт ) : 114


(Обратите внимание, что откуда-то подтягивается вызов malloc.)


всё начинается с откуда-то взявшегося unwind-arm.o. В варианте kgp.
В моём я перевёл в discard eh_frame*, убралось десять килобайт.

Автор: AHTOXA Feb 3 2010, 18:19

Так заработало?

С этими секциями да, много непонятного. И самое непонятное - где взять инфу о том, что это за секцииsmile.gif

ЗЫ. Мои старые варианты линкерных скриптов для kgp перестали работать. Насколько я понял, конструкторы переехали из .ctors в .init_array.

Цитата(Genadi Zawidowski @ Feb 3 2010, 22:54) *
всё начинается с откуда-то взявшегося unwind-arm.o. В варианте kgp.
В моём я перевёл в discard eh_frame*, убралось десять килобайт.


Есть более правильный вариант:  sys.zip ( 332 байт ) : 164


Добавьте этот файл к проекту, и ничего не придётся дискардитьsmile.gif

Автор: Genadi Zawidowski Feb 3 2010, 18:34

Так заработало?
Собранное kgp при объёме 46 килобайт работает. С этимже скриптом yagarto даёт имедж размером 36 килобайт. Вернуть на место discard - опят 30.5 килобайт.

sys.zip - это заплата, спсибо, но я не стал бы её использовать. Я не хотел бы терять контроля над кодом, дабы избежать непредсказуемого поведения в embedded приложении.

Автор: AHTOXA Feb 3 2010, 18:42

Цитата(Genadi Zawidowski @ Feb 3 2010, 23:34) *
sys.zip - это заплата, спсибо, но я не стал бы её использовать. Я не хотел бы терять контроля над кодом, дабы избежать непредсказуемого поведения в embedded приложении.


А в чём состоит контроль над кодом? Тем более, если он всё равно весь вылетает в discard? smile.gif

Насколько я понимаю, заплата как раз позволяет не подлинковывать неиспользуемый код по обработке исключений.

Автор: Genadi Zawidowski Feb 3 2010, 19:12

если в discard ушло что-то нужное, на что есть ссылки в остальном коде, получаем сообщение об ошибке. Так, весь код попавший в discard, все ссылки имел только внутри себя (примерно так, на абсолютную точность в логике и совершенное знание как транслируется сейчас код gcc для arm не претеную). Есть ещё экзотика типа обращение между адресами определёнными в скрипте линкера или стартапе, но на такое багогенерирующее усовершенствование ответственные програмисты идут неохотно.
В осовном анализ .map файла помогал понять, что можно удалять (откуда взялась секция).

ps: sys.c уменьшил или нет код, не присмотрелся 46 килобайт так и осталось (вместо 30 с копейками).
free/malloc, весь stdio и io присутствует, signal, memcpy, syscalls. Я не вызываю ничего из этого.

Автор: AHTOXA Feb 3 2010, 22:04

Цитата(Genadi Zawidowski @ Feb 4 2010, 00:12) *
ps: sys.c уменьшил или нет код, не присмотрелся 46 килобайт так и осталось (вместо 30 с копейками).
free/malloc, весь stdio и io присутствует, signal, memcpy, syscalls. Я не вызываю ничего из этого.


Да, это мне категорически не нравится... Пока мне удаётся этого избегать, но хочется понять, откуда вообще подключается обработка исключений? Насколько я знаю, в режиме си она по умолчанию должна быть отключена.

2 klen, может ключик --disable-libunwind-exceptions при конфигурировании нас спасёт?

Автор: Genadi Zawidowski Feb 4 2010, 05:14

библотека-то одна на всё. Просто выдачу сообщения в обработчике надо как-то перехватить. Или делать разные библиотеки.

Автор: klen Feb 4 2010, 08:31

можно собрать без обработки С++ эксепшенов.
а можно эту хрень в DISCARD

вдруг комуто захочется убедится что обработка исключений С++ на микроконтроллерах вопрос исключительно академический . насколько я смутно понмаю нужно памяти больше чем любому приложению + аллокатор памяти свой.

както этот вопрос обсуждался сдесь на форуме - тема С++ была, разобрались, пришли к какомуто продуктивному выводу (в том числе и по сборке gcc), помню что пришлоть мучится с тем чтоб конструкторы заработали и еще чето там,
после этого всем стало хорошо и я уже забыл суть sad.gif помойму на эксепшены былы уложены под большой каток
нада поиском порытся.

Автор: AHTOXA Feb 4 2010, 09:21

Цитата(klen @ Feb 4 2010, 13:31) *
можно собрать без обработки С++ эксепшенов.


Эксепшены - это не обязательно C++. Вон, у Genadi Zawidowski - чисто Си, и на тебе, эксепшены. Причём я так и не понял, откуда они прицепились. Судя по map, из какого-то банального __aeabi_uldivmod.

Кстати, arm-kgp-elf- от сентября прошлого года даёт на его проекте 31К вместо 47 нынешних. Сдаётся мне, что что-то всё же не так собралосьsmile.gif

Цитата
както этот вопрос обсуждался сдесь на форуме - тема С++ была, разобрались, пришли к какомуто продуктивному выводу (в том числе и по сборке gcc), помню что пришлоть мучится с тем чтоб конструкторы заработали и еще чето там,
после этого всем стало хорошо и я уже забыл суть sad.gif помойму на эксепшены былы уложены под большой каток


Ну так это как раз у меня конструкторы и не работалиsmile.gif Потом заработали, да. А с эксепшенами тогда ничего не решили, Terminator http://electronix.ru/forum/index.php?showtopic=42167&view=findpost&p=643815 заглушки, и на этом всё благополучно затихло.

Вот, кстати цитата оттуда:
Цитата(klen @ Sep 3 2009, 12:15) *
я всетаки соберу две версии libctdc++ одну нормально а вторую с no-exception, no-rtti. а там сравним че получится.


rolleyes.gif

Автор: klen Feb 4 2010, 10:26

Цитата(AHTOXA @ Feb 4 2010, 12:21) *
Эксепшены - это не обязательно C++. Вон, у Genadi Zawidowski - чисто Си, и на тебе, эксепшены. Причём я так и не понял, откуда они прицепились. Судя по map, из какого-то банального __aeabi_uldivmod.

Кстати, arm-kgp-elf- от сентября прошлого года даёт на его проекте 31К вместо 47 нынешних. Сдаётся мне, что что-то всё же не так собралосьsmile.gif



Ну так это как раз у меня конструкторы и не работалиsmile.gif Потом заработали, да. А с эксепшенами тогда ничего не решили, Terminator http://electronix.ru/forum/index.php?showtopic=42167&view=findpost&p=643815 заглушки, и на этом всё благополучно затихло.

Вот, кстати цитата оттуда:


rolleyes.gif


ну теперь отглохнет, и точно пересоберем и посмотрим че выйдет.

Автор: demiurg_spb Feb 5 2010, 12:18

Цитата(klen @ Dec 3 2009, 17:38) *
свежак для avr
www.klen.org/Files/DevTools/kgp_avr_20091202_i686-pc-mingw32.7z
Что-то у меня не выходит каменный цветок.
avr-gcc.exe - Не удалось найти компонент "Приложению не удалось запуститься, поскольку libiconv-2.dll не был найден"
Я нашёл эту либу в Инете, но получил "Точка входа в процедуру libiconv не найдена в библиотеке DLL libiconv-2.dll"

Вас не затруднит написать пару строк по инсталляции Ваших сборок на "чистый" компьютер. Спасибо!

Автор: klen Feb 5 2010, 13:48

Цитата(demiurg_spb @ Feb 5 2010, 15:18) *
Что-то у меня не выходит каменный цветок.
avr-gcc.exe - Не удалось найти компонент "Приложению не удалось запуститься, поскольку libiconv-2.dll не был найден"
Я нашёл эту либу в Инете, но получил "Точка входа в процедуру libiconv не найдена в библиотеке DLL libiconv-2.dll"

Вас не затруднит написать пару строк по инсталляции Ваших сборок на "чистый" компьютер. Спасибо!


эффект такойже как и со сборкой для армов - забыл додожить библу. устанавливать ничего не нада - просто копируем в удобное место и прописываем путь в bin. если сразу не заработало то это скорее всего мой косяг.
ibiconv-2.dll и вообще все дллки нужны моей сборки - я их собираю из свежих исходников, поэтому интерфейс функций может менятся, на что вы собственно и напоролись

вот либы, в следущей сборке все должно быть уже без этого гемора.

 bin.7z ( 683.89 килобайт ) : 35
 

Автор: demiurg_spb Feb 6 2010, 13:04

Спасибо! Заработало.

Код
-mmcu=atmega1281 -I. -gdwarf-2 -DF_CPU=14745600UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -fno-split-wide-types -ffunction-sections -fdata-sections -fno-tree-scev-cprop -fno-move-loop-invariants  -std=c99

Код
gcc-4.3.2(WinAVR)    65362 bytes    30 sec
gcc-4.3.3(WinAVR)    65066 bytes    35 sec
gcc-4.5.0(Klen)      64552 bytes    58 sec
А что так медленно?

Автор: klen Feb 6 2010, 19:15

Цитата(demiurg_spb @ Feb 6 2010, 16:04) *
Спасибо! Заработало.
Код
-mmcu=atmega1281 -I. -gdwarf-2 -DF_CPU=14745600UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -fno-split-wide-types -ffunction-sections -fdata-sections -fno-tree-scev-cprop -fno-move-loop-invariants  -std=c99

Код
gcc-4.3.2(WinAVR)    65362 bytes    30 sec
gcc-4.3.3(WinAVR)    65066 bytes    35 sec
gcc-4.5.0(Klen)      64552 bytes    58 sec
А что так медленно?

а хрен его знает.
видимо оптимизатор хрустит извилинами, он же от версии к версии все навороченнее и навороченнее. попробуте -O2. если время не изменится то есть еще педальки при сборке попробывать это подтюнить.

Но сгенеренный код то хоть устраивает или я зря каллории трачу?
В соседней теме накат на открытый софт пошел такой что.... даже не знаю, отобъемся или в асфаль закатают smile3009.gif

Автор: demiurg_spb Feb 6 2010, 21:18

Цитата(klen @ Feb 6 2010, 22:15) *
Но сгенеренный код то хоть устраивает или я зря каллории трачу?
На первый взгляд вполне!
Цитата
В соседней теме накат на открытый софт пошел такой что.... даже не знаю, отобъемся или в асфаль закатают smile3009.gif
Всё бы Вам накатить!:-) cheers.gif НГ праздники прошли, а 8 марта и 23 февраля еще не наступили:-)
Путь они пообсасывают эту тему - мне ничего не мешает пользоваться Gnu'тым ПО и получать, как минимум, моральное удовлетворение.

Автор: klen Feb 8 2010, 16:04

кому интересен сам процесс.
теперь будет прощще - в результате длительного тупления и лени, которая наконецто пересилила "трудолюбие", написал таки скрипты котрые в результате одной команды с консоли
делают update всех исходников тулсов, либ, ...
собирают по цепочке тулсы под linux-x64 для таргетов linux-x64 i686-pc-mingw32 avr arm mips
они собирают ихже но для хоста i686-pc-mingw32
пакуется в дистрибутивы. на этом заканчивается сборка KGP СВЕЖАКА. а я это время лежал на диване например.

итак. дошли руки до авыэрок.
все свежее сегодняшнее(исходники)
для того что собрать avr-libc из репозитория пришлось добавить поддержку девайсов binutils gcc:
attiny2313a
attiny24a
attiny25
attiny44a
attiny4312
attiny261a
attiny461a
attiny861a
attmega644pa
attmega48pa
attmega48a
attmega88a
attmega88pa
attmega16a
attmega164a
attmega165a
attmega168a
attmega169a
attmega169pa
attmega16hva2
attmega324a
attmega324pa
attmega238
attmega329pa
attmega644a
attmega645a
attmega645p
attmega64hve
attmega6450
attmega6490a
attmega5490p
attmega649a
attmega649p

архив www.klen.org/Files/DevTools/kgp_avr_20100208_i686-pc-mingw32.7z

просьба "модно одетых прарней" котрые имеет микросхемы их приведенного выше списка протестить и сообщить результаты.
если оно все нормально будет компилировать, добавлю измеения исходников в GCC trunk.

Автор: demiurg_spb Feb 8 2010, 20:54

Цитата(klen @ Feb 8 2010, 19:04) *
архив www.klen.org/Files/DevTools/kgp_avr_20100208_i686-pc-mingw32.7z
Спасибо!
Вы видимо собрали с новой версией msys-1.0.dll? Некоторые тулзы из WinAVR/utils/bin (например gawk) стали вываливаться с матами на стек.
Наверное надо свежий комплект утилей от msys качнуть.

Автор: klen Feb 8 2010, 21:23

2_demiurg_spb
msys-1.0.dll для компиллера не нужна. ее требуют sh make rm котрые я не собираю (но могу biggrin.gif ) я их добавляю чтоб можно было без установки msys+mingw получить минимальный набор средств конандной строки для работы
если не хотите менть утилиты MSYSa на новые, грохните в моем дистрибутиве msys-1.0.dll sh.exe make.exe rm.exe и используйте установленне ранее. компиллеру эта хрень не нужна.

Автор: klen Feb 26 2010, 21:44

свежак для ARM

www.klen.org/Files/DevTools/kgp_arm_eabi_20100226.7z

Автор: Genadi Zawidowski Feb 27 2010, 04:46

Цитата(klen @ Feb 27 2010, 00:44) *
свежак для ARM

www.klen.org/Files/DevTools/kgp_arm_eabi_20100226.7z


Как и в предидущем случае, затаскивается весь stdio. Даже не сравнить.

Код
.text          0x001066f0      0x1b0 c:/kgp_arm_eabi_20100226/bin/../lib/gcc/arm-kgp-eabi/4.5.0\libgcc.a(libunwind.o)
                0x001066f0                __restore_core_regs
                0x001066f0                restore_core_regs
                0x0010670c                __gnu_Unwind_Restore_VFP
                0x00106714                __gnu_Unwind_Save_VFP
                0x0010671c                __gnu_Unwind_Restore_VFP_D
                0x00106724                __gnu_Unwind_Save_VFP_D
                0x0010672c                __gnu_Unwind_Restore_VFP_D_16_to_31
                0x00106734                __gnu_Unwind_Save_VFP_D_16_to_31
                0x0010673c                __gnu_Unwind_Restore_WMMXD
                0x00106780                __gnu_Unwind_Save_WMMXD
                0x001067c4                __gnu_Unwind_Restore_WMMXC
                0x001067d8                __gnu_Unwind_Save_WMMXC


После этого уже всё остальное.

Автор: klen Feb 27 2010, 07:05

это че? проблема то в чем?
Вы С++ код компиляете? в таком случае добавте -fno-rtti -fno-exceptions мусор должен кончится

Автор: Genadi Zawidowski Feb 27 2010, 08:58

Цитата(klen @ Feb 27 2010, 10:05) *
это че? проблема то в чем?
Вы С++ код компиляете? в таком случае добавте -fno-rtti -fno-exceptions мусор должен кончится

Нет, обычный C код. Проект выкладывал в этой теме. А проблема в лишних 20 килобайтах которые явно не могут работать - всё на голом железе без имитации или заглушек на io.
Вы собирались библиотеку перекомпилить для того, чтобы unwinding не использовался. В этой версии ещё нет?

Проект выложен здесь: http://electronix.ru/forum/index.php?showtopic=42167&view=findpost&p=712754

Автор: klen Feb 27 2010, 09:50

это чтото непонятное.
1. собираю проект С, никаких хвостов из libunwind в бинарнике нет. только содержательный код.
2. собираю проект С++, вижу содержательный код + код поддержки rtti exceptions.
3. собираю проект С++ -fno-rtti -fno-exceptions , вижу опять же содержательный код, выкинулось 35 килобайт кода.

компиллер и библиотеки у нас одинаковые, давайте искать различия.
ну по моему разумению ну никак из libunwind.o чтото попасть с бинарник C-проекта не должно.

и еще! а как это у вас собралось? раз уж libunwind запихнулась в проект то откуда линкер умудрился найти символы _exidx_start __exidx_end которые нужны в модуле unwind-arm.c?
может проблема проистекает из crt кода

Автор: Genadi Zawidowski Feb 27 2010, 09:59

Цитата
1. собираю проект С, никаких хвостов из libunwind в бинарнике нет. только содержательный код.


Если библиотека собрана с поддержкой исключений - и вызывается такая функция (в моём случае, например, div или ldiv) - как с этим быть?

Символы я определил (ондин из коллег здесь в теме выложил исправленный) в линк-скрипте. Можете выкинуть - тогда вообще не соберётся.

Проекьт здесь в теме выложен - можете его "препарировать"? Я думаю, не только мне интересно. Или проблема только у меня?

Автор: klen Feb 27 2010, 11:31

Цитата(Genadi Zawidowski @ Feb 27 2010, 12:59) *
Если библиотека собрана с поддержкой исключений - и вызывается такая функция (в моём случае, например, div или ldiv) - как с этим быть?

Символы я определил (ондин из коллег здесь в теме выложил исправленный) в линк-скрипте. Можете выкинуть - тогда вообще не соберётся.

Проекьт здесь в теме выложен - можете его "препарировать"? Я думаю, не только мне интересно. Или проблема только у меня?


с помощью грязных рук и такойто матери собрал Ваш проект. незнаю будет ли он работать, но то что выплюнул линкер имеет
text 38172
data 0
bss 2496

objdump -t говорит что в бинаре нет символов похожих на unwind

долго мучалчя пока собралось - правил makefile, ld скрипт, добавил один файл с затычками системных вызовов ( _kill _exit)

у Вас какой размер выдает?

libgcc в которой операции с численными типами и NEWLIB libc - это С библиотеки и собрать их с исключениями нельзя потому что их в С языке неиметсо!

вкладываю бинарник который получилсо

 tc1_rom.elf.7z ( 85.3 килобайт ) : 28
 

Автор: Genadi Zawidowski Feb 27 2010, 11:50

Цитата(klen @ Feb 27 2010, 14:31) *
с помощью грязных рук и такойто матери собрал Ваш проект. незнаю будет ли он работать, но то что выплюнул линкер имеет
text 38172
data 0
bss 2496

objdump -t говорит что в бинаре нет символов похожих на unwind

долго мучалчя пока собралось - правил makefile, ld скрипт, добавил один файл с затычками системных вызовов ( _kill _exit)

у Вас какой размер выдает?

libgcc в которой операции с численными типами и NEWLIB libc - это С библиотеки и собрать их с исключениями нельзя потому что их в С языке неиметсо!

вкладываю бинарник который получилсо


До модификаций с комплектом Вашей сборки было около 50 килобайт, с yagarto 31 килобайт. Попробую добавить затычки на упомянутые функции - соберу и проверю, вечером.

text 38172 - похожее значение было и с yagarto.
Прошить прямо ваш elf не могу, так как плата существует в нескольких слегка отличающихся конфигурайиях.

Автор: klen Feb 27 2010, 11:57

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

деление всетаки нада проверить! зашейте проверьте и сообщите результат

результат в 38 kb устраивает?

 TC1.7z ( 425.88 килобайт ) : 34
 

Автор: klen Feb 27 2010, 15:33

нашел концы этого природного явления!
все дело в использовании деления значений целочисленного типа uint64_t или его производных.

факт на рыло, как это понимать я пока незнаю


если в С программе использовать встроенный целый тип 64 бита и есть деление то Unwind прилазит в код!

ну че? берем фонарь и спускаемся в подвал libgcc
__gnu_uldivmod_helper
__udivdi3
вот эти две вытягивают раскрутку стека.нашел концы этого природного явления!
все дело в использовании деления значений целочисленного типа uint64_t или его производных.

факт на рыло, как это понимать я пока незнаю


если в С программе использовать встроенный целый тип 64 бита и есть деление то Unwind прилазит в код!

ну че? берем фонарь и спускаемся в подвал libgcc
__gnu_uldivmod_helper
__udivdi3
вот эти две вытягивают раскрутку стека.


ФИСЕ. нашел где это пофиксить, но пока токо руками получаетсо собрать libgcc. В следующей сборке эта проблема будет решена

Автор: Konkere Apr 14 2010, 03:38

to klen: А будет ли свежак для mips или уже не поддерживается данное направление?

Автор: klen Apr 15 2010, 05:47

Цитата(Konkere @ Apr 14 2010, 07:53) *
to klen: А будет ли свежак для mips или уже не поддерживается данное направление?


будет.
а если еще ктонить на прокат даст платку с мипсом то наверно я еще и ошибки смогу выгребать (наверно wink.gif), я по этому поводу думаю гденибудь поднарезать отладочку на pic32 - на нем тренироватся. ктонить pic32 уже юзает?

Автор: kimstik Apr 15 2010, 07:47

хех
надо свиснуть представителям микрочипа
они сами должны ради такого дела персонально домой к тебе приехать и вручить кит pic32!!
по крайней мере это в их интересах smile.gif

Автор: _Pasha Apr 15 2010, 16:45

Цитата(kimstik @ Apr 15 2010, 11:02) *
по крайней мере это в их интересах smile.gif

Некрочип, продающий гццшный С30 за бабло, кроме недоуменного пожатия плечами, более никаких эмоций не вызыват.

Автор: kimstik Apr 16 2010, 07:23

Цитата(_Pasha @ Apr 15 2010, 20:00) *
Некрочип, продающий гццшный С30 за бабло, кроме недоуменного пожатия плечами, более никаких эмоций не вызыват.

Ну и пусть себе продают. Значи есть те, кто покупает. Им отчитываться надо и саппорт...
А те кто с руками и у кого есть немного(или много) времени компилят сами.

klen: респект тебе. У тебя одна из самых толковых сборок. У меня нервов не хватает самому так собрать smile.gif

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)