Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: свежак KGP win32/arm/avr/mips/m68k
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26
klen
Цитата(TJ27 @ Jul 16 2012, 13:53) *
Klen, не мог бы ты собрать insight для target=mips-sde-elf mingw? Win7 32

я попробую
sherr
А под Linux32 - ARM, AVR уже никогда не будет ?
Terminator
Попробовал lto на своём проекте. Скомпился почти без допиливания, но размер стал в два раза больше и виснет в процессе выполнения sm.gif
klen
Цитата(Terminator @ Jul 30 2012, 08:35) *
Попробовал lto на своём проекте. Скомпился почти без допиливания, но размер стал в два раза больше и виснет в процессе выполнения sm.gif

забавно.. у меня с lto -15...25%, работает но отлаживать это нельзя.
возможно есть один тонкий момент, я когда собираю gcc и newlib туда пропихиваю ключи -flto, тоесть libgcc libc и тд собраны с lto и уровнем оптимизации -Os. для бинарей в проектк синхронно. Замечал особую особую непонятную связь ключей -flto и ключей оптимизации, они должны быть указаны и при сомпиляции и при линковке и при этом одинаковые.

попробуйте на всем проекте подсунуть и при компиляции и при линковке набор ключиков -g0 -Os -fomit-frame-pointer -funroll-loops -ffunction-sections -fdata-sections -fgraphite -flto

интересно будетли другой результат?
Terminator
Не помогло.
Размер также примерно в двое выше и повисло в том же месте.

Upd:
не все опции до линкера донёс.
Размер немного уменьшился, но всё равно почти в два раза больше оригинала.
Повисло в тоже же месте.
Genadi Zawidowski
Рабочие скрипты линкера лежат в проекте тут http://www.cqham.ru/forum/showthread.php?t=9688

klop
Цитата(alx2 @ Dec 20 2011, 08:24) *
Встречный вопрос: что мешает их собрать вместо того чтобы искать? Если я правильно понимаю, для этого должно быть достаточно указать LDFLAGS=-all-static


Извиняюсь за назойливость но никто нигде не видел уже собранных тулзов(AVR and ARM) со статическими либами(для 32 бит). Задолбало безрезультатное бодание с самостоятельной сборкой.
demiurg_spb
Цитата(Terminator @ Jul 30 2012, 10:17) *
Размер также примерно в двое выше и повисло в том же месте.

Код
LDFLAGS += -nodefaultlibs -lm -lgcc -lc
Даёт какой-либо эффект?
Terminator
Цитата(demiurg_spb @ Aug 25 2012, 01:35) *
Код
LDFLAGS += -nodefaultlibs -lm -lgcc -lc
Даёт какой-либо эффект?


Никакого эффекта. Никаких "сторонних" либ в проекте нет.

lto (на работоспособность не проверял)
Код
   text       data        bss        dec        hex    filename
188612       1176      39152     228940      37e4c    ../build/app.elf
   text       data        bss        dec        hex    filename
188612       1176      39152     228940      37e4c    ../build/app.elf

с -Os не собирается:
Код
--- linking...
/tmp/ccixzFwx.s: Assembler messages:
/tmp/ccixzFwx.s:533: Error: offset out of range
/tmp/ccixzFwx.s:535: Error: offset out of range
/tmp/ccixzFwx.s:537: Error: offset out of range
lto-wrapper: arm-kgp-eabi-g++ returned 1 exit status
collect2: error: lto-wrapper returned 1 exit status
make: *** [../build/app.elf] Ошибка 1


без lto
Код
   text       data        bss        dec        hex    filename
100416       1176      39024     140616      22548    ../build/app.elf
   text       data        bss        dec        hex    filename
100416       1176      39024     140616      22548    ../build/app.elf
Genadi Zawidowski
Обновился yagarto. компилятор теперь 4.7.2.
yagarto tools тоже новый.

LTO заработало.
По размеру кода на крохи уступает последнему klen-овскому варианту сборки.
SyncLair
Цитата(Genadi Zawidowski @ Oct 20 2012, 13:42) *
Обновился yagarto. компилятор теперь 4.7.2.
yagarto tools тоже новый.

LTO заработало.
По размеру кода на крохи уступает последнему klen-овскому варианту сборки.

LTO у меня не плохо работало и с 4.7.1 ). %на 30 уменьшался исходник! Функция main стала такааая большая ))
Genadi Zawidowski
Цитата(SyncLair @ Oct 20 2012, 19:30) *
LTO у меня не плохо работало и с 4.7.1 ). %на 30 уменьшался исходник! Функция main стала такааая большая ))

в yagarto-bu-2.22_gcc-4.7.1-c-c++_nl-1.20.0_gdb-7.4.1_eabi_20120616.exe у меня lto не работало...
_Артём_
Цитата(SyncLair @ Oct 20 2012, 18:30) *
%на 30 уменьшался исходник! Функция main стала такааая большая ))

У меня такая статистика:
11кБ -> 8 кБ
17кБ -> 16кБ
При запуске отладчики IDE выдало: main не найден.

Ещё два прокта сократились с 1 кБ до 4 и 0 байт соответственно. Запускать я их не стал - они наверное слишком быстро будут работать - улетят ещё.

P.S. Кто-нибудь рабочий проект бы выложил напосмотреть.



Genadi Zawidowski
нулевые проекты появляются, когда у кортекса таблица перерываний не помечена used.
мой проект тут http://www.cqham.ru/forum/showthread.php?t=9688
AHTOXA
Цитата(_Артём_ @ Oct 21 2012, 00:51) *
P.S. Кто-нибудь рабочий проект бы выложил напосмотреть.

Я примеры к scmRTOS адаптировал для LTO. Чтоб было LTO, надо в makefile задать
Код
USE_LTO = YES

А нулевой размер получается от отсутсвия аттрибута used у таблицы векторов.
_Артём_
.дубль
SyncLair
Цитата(AHTOXA @ Oct 20 2012, 23:11) *
А нулевой размер получается от отсутсвия аттрибута used у таблицы векторов.

Экспериментировал я с этим USED так и не смог добиться даже нашёл багрепорт который так и не пофиксен . В итоге решил проблему линкером.
_Артём_
Цитата(AHTOXA @ Oct 20 2012, 22:11) *
А нулевой размер получается от отсутсвия аттрибута used у таблицы векторов.

Ненулевой тоже не работает.
У тех, что были нулевые изменил таблицу:
Код
__attribute__ ((section(".isr_vector"), used))
void (* const g_pfnVectors[])(void) = {
// вектора
}

Всё равно не работает
Цитата
mon reset 0
Resets core & peripherals via SYSRESETREQ & VECTRESET bit.

tbreak main
Function "main" not defined.
cont


Может makefile древний какой взял
Нажмите для просмотра прикрепленного файла
Genadi Zawidowski
а сделанная сборкой от klen работает прошивка?
_Артём_
Цитата(Genadi Zawidowski @ Oct 21 2012, 04:14) *
а сделанная сборкой от klen работает прошивка?

Не проверял, но уверен что не работает. Ни разу не получалось собрать рабочую прошивку c KGP.
Использовал Yagarto или SCB, без lto.
Genadi Zawidowski
Мои скрипты не для плюсовых проектов, помочь не очень могу. У меня работает и с yagarto и с klen.
Посоветую сделать минимальный проект - и добавляя конструкции смотреть map файл на тему соответствия тому, что написали.
AHTOXA
Цитата(_Артём_ @ Oct 21 2012, 08:12) *
Не проверял, но уверен что не работает. Ни разу не получалось собрать рабочую прошивку c KGP.

Специально проверил - скомпилил пример 4-Debug для STM32F1XX. Работает. Пишет в консольку.
arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform) 4.8.0 20120422 (experimental)
_Артём_
Цитата(AHTOXA @ Oct 21 2012, 13:12) *
Специально проверил - скомпилил пример 4-Debug для STM32F1XX. Работает.

AHTOXA, в проекте по ссылке нет скрипта линкера, где его взять?

Странно, я свои проекты делал на основе примеров к scmrtos, наверное что-то нужное выкинул...или в примерах что-то новое появилось.
ReAl
Цитата(_Артём_ @ Oct 21 2012, 15:25) *
AHTOXA, в проекте по ссылке нет скрипта линкера, где его взять?

Рядом
Если брать все примеры через svn и запустить switch из корня примеров, то оно размножается по всем примерам оттуда
AHTOXA
Цитата(_Артём_ @ Oct 21 2012, 18:25) *
Странно, я свои проекты делал на основе примеров к scmrtos, наверное что-то нужное выкинул...или в примерах что-то новое появилось.

Или kgp немножко не той системыsm.gif Там было несколько версий, в которых LTO для M3 не работало. А последние версии, где заработало, были, емнип, только под линукс.
Хотя нет, у Genadi Zawidowski вроде бы windows, значит просто надо уточнить у него правильную версиюsm.gif
_Артём_
Цитата(AHTOXA @ Oct 21 2012, 17:13) *
Genadi Zawidowski вроде бы windows, значит просто надо уточнить у него правильную версиюsm.gif

Я так понял, что
Цитата
yagarto. компилятор теперь 4.7.2.


Цитата(AHTOXA @ Oct 21 2012, 17:13) *
Или kgp немножко не той системыsm.gif

Тут получился небольшой оффтопик - здесь KGP обсуждается, а мы с Genadi Zawidowski про LTO в Yagarto тут писать начали.
Но с KGP LTO у меня тоже не работало.

AHTOXA
Цитата(_Артём_ @ Oct 21 2012, 20:19) *
Я так понял, что
Цитата
yagarto. компилятор теперь 4.7.2.

Ненене, вот же:
Цитата(Genadi Zawidowski @ Oct 21 2012, 15:43) *
У меня работает и с yagarto и с klen.

Так что не офтопикsm.gif
Просто Genadi Zawidowski нам сообщил, что теперь не только kgp умеет LTO.
demiurg_spb
Цитата(AHTOXA @ Oct 21 2012, 19:09) *
Просто Genadi Zawidowski нам сообщил, что теперь не только kgp умеет LTO.
Думаю что это ошибка, т.к. yagarto никогда не поддерживало и не поддерживает LTO.
Genadi Zawidowski
Новая сборка yagrto поддерживает, я сам проверил на своих проектах, которые ранее только с kgp собирались.
demiurg_spb
Интересно. Надо попробовать.
Genadi Zawidowski
Цитата(demiurg_spb @ Oct 22 2012, 11:34) *
Интересно. Надо попробовать.

А что его пробовать... Работает, только код чуть-чуть побольше чем у klen - но проще в инсталяции - можно человеку сказать "запусти две инсталяшки и всё у тебя будет работать". С klen надо тот же make с компанией ставить (обычно yagarto tools или avr gcc обеспечивает). И объяснять, как пути прописывать.

зы: сразу предупреждаю - я пользуюсь FAR2, но справшиваю как сделать в windows commander, чтобы оператор видел результат выполнения консольных команд? А то з...ло просить запустить cmd.exe, от которого народ в ступор впадает...
SyncLair
Цитата(demiurg_spb @ Oct 22 2012, 10:17) *
Думаю что это ошибка, т.к. yagarto никогда не поддерживало и не поддерживает LTO.

Ну не знай у меня lto c 4.7.1 работает именно с yagarto.


Genadi Zawidowski
Цитата(SyncLair @ Oct 24 2012, 00:07) *
Ну не знай у меня lto c 4.7.1 работает именно с yagarto.


Удалил 4.7.2, поставил 4.7.1 - правда не в program files по умолчанию, а как советуют - без пробелов в пути. Скомпилировало... У Вас стоит в каком каталоге?
Genadi Zawidowski
переполз под W7 64 бита. Взгляд на мир не поменялся. Могу использовать сборки под windows x64.
klen
свежаки:
хост x86_64 linux
target ARM http://klen.org/Files/DevTools/linux-x86_6..._64-20121125.7z
target win64 http://klen.org/Files/DevTools/linux-x86_6...20121125.tar.7z
target win32 http://klen.org/Files/DevTools/linux-x86_6...20121125.tar.7z

хост Win64
target ARM http://klen.org/Files/DevTools/x86_64-kgp-..._64-20121124.7z
target self http://klen.org/Files/DevTools/x86_64-kgp-...w32-20121124.7z

хост Win32
target ARM http://klen.org/Files/DevTools/x86_32-kgp-..._32-20121125.7z
target self http://klen.org/Files/DevTools/x86_32-kgp-...w32-20121125.7z

закончилась эпопея с портирование библиотеки GSL http://www.gnu.org/software/gsl
библиотка портирована на соспроцессор ядра cortex-m4f
на первой страничке можно почитать что она умеет делать и как реально облегчать жизнь при попытках изобрести вЭлосипЭд
просьба потестить - мне хочется выгрести косяки если они найдутся. из нее применю в реальном проектк нелинейную оптимизация. работает хорошо, полет нормальный. кому интересно читайте отдейлный топик в этом разделе который заведу.

http://klen.org/Files/DevTools/linux-x86_6...20121125.tar.7z

в сборке для линукса она уже положена, в другие сборки ее нада положить - как в отдельном топике
Terminator
Последний свежак нескомпилил проект.
Код
/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/libc.a(lib_a-errno.o): In function `__errno':
errno.c:(.text.__errno+0xc): undefined reference to `_impure_ptr'
collect2: error: ld returned 1 exit status
make: *** [../build/app.elf] Ошибка 1


С разбегу не смог понять, что не так. Откатился на предпоследний "свежак".
klen
Цитата(Terminator @ Dec 6 2012, 10:58) *
Последний свежак нескомпилил проект.
Код
/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/libc.a(lib_a-errno.o): In function `__errno':
errno.c:(.text.__errno+0xc): undefined reference to `_impure_ptr'
collect2: error: ld returned 1 exit status
make: *** [../build/app.elf] Ошибка 1


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

это вы чтото из libc(newlib) тяните - printf, malloc,..... и тд. найдите вора и напишите свою реализацию.
Terminator
Цитата(klen @ Dec 7 2012, 14:04) *
это вы чтото из libc(newlib) тяните - printf, malloc,..... и тд. найдите вора и напишите свою реализацию.

Не, там всё чисто(всё своё). Тянется только математика. Коментарю log10 и всё проходит. Но ведь в предпоследнем с log10 компилится и судя по map файлу __impure_ptr нашёлся в libc.
klen
Цитата(Terminator @ Dec 7 2012, 12:34) *
Не, там всё чисто(всё своё). Тянется только математика. Коментарю log10 и всё проходит. Но ведь в предпоследнем с log10 компилится и судя по map файлу __impure_ptr нашёлся в libc.

неа... нифига оно не чисто: log10 всякую мутату из newlib. так всегда бывает.... нафига ему у __impure_ptr ? чтоб сообщить о коде ошибки или еще чтото а оно нам нужно?

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

еще раз пересобрал, либы в нормалтном состоянии не покоцанные
http://klen.org/Files/DevTools/linux-x86_6..._64-20121209.7z
файл с сборкой под линух64, но от туда можно выдрать библиотеки если нужно на виннде предыдущую сборку заюзать
Terminator
Теперь log10 не требует errno. Спасибо.

с lto не компилится sm.gif
Код
lto1: internal compiler error: in inline_call, at ipa-inline-transform.c:270
Please submit a full bug report,
with preprocessed source if appropriate.
scons: building terminated because of errors.
See <http://gcc.gnu.org/bugs.html> for instructions.
lto-wrapper: /usr/local/arm/bin/arm-kgp-eabi-g++ returned 1 exit status
/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/bin/ld: lto-wrapper failed

И раньше не компилилось. Не критично sm.gif
AHTOXA
Я тут словил косячог в одном из предыдущих свежаков, конкретнее - 20120426.
(arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform) 4.8.0 20120422 (experimental)).
Вот в такой функции:
Код
void testRXNE(SPI_TypeDef* spi)
{
    CS::On();
    spi->DR = 0xAA;
    while (!(spi->SR & SPI_SR_RXNE));
    spi->DR;
    spi->DR = 0xAA;                           // <==== (1)
    while (!(spi->SR & SPI_SR_RXNE));
    spi->DR;
    CS::Off();
}

компилятор (g++) выбросил строку, помеченную (1)
При этом DR - волатильный член структуры.
Вот дизассемблер:
Код
08000cac <testRXNE(SPI_TypeDef*)>:
8000cac:   f44f 6380   mov.w   r3, #1024  ; 0x400
8000cb0:   f2c4 0302   movt    r3, #16386 ; 0x4002
8000cb4:   f04f 5280   mov.w   r2, #268435456 ; 0x10000000
8000cb8:   619a        str r2, [r3, #24]
8000cba:   23aa        movs    r3, #170   ; 0xaa
8000cbc:   8183        strh    r3, [r0, #12]
8000cbe:   8903        ldrh    r3, [r0, #8]
8000cc0:   07da        lsls    r2, r3, #31
8000cc2:   d5fc        bpl.n   8000cbe <testRXNE(SPI_TypeDef*)+0x12>
8000cc4:   8983        ldrh    r3, [r0, #12]
8000cc6:   8903        ldrh    r3, [r0, #8]
8000cc8:   07db        lsls    r3, r3, #31
8000cca:   d5fc        bpl.n   8000cc6 <testRXNE(SPI_TypeDef*)+0x1a>
8000ccc:   f44f 6380   mov.w   r3, #1024  ; 0x400
8000cd0:   f2c4 0302   movt    r3, #16386 ; 0x4002
8000cd4:   8982        ldrh    r2, [r0, #12]
8000cd6:   f44f 5280   mov.w   r2, #4096  ; 0x1000
8000cda:   619a        str r2, [r3, #24]
8000cdc:   4770        bx  lr
8000cde:   bf00        nop

В более свежем свежаке (20121125) этой проблемы нет. Так что имейте в виду.
klen
бывает... но мы же джедаи и нас такое не остановит!
LTO медленно но верно корабкоется в гору, код уменшается а глюки с отваливаением становятся реже.

кстате, у меня тоже волатайл режет нещадно, но это мы знаем что будет побочный эффект в аппаратуре. а он не знает, поэтому лично я ему это прощаю и ручками помогаю сгенерить то что нужно. хотя volaile какбэээээ ...... мож теперь волатильность изменило свое содержание? нада стандартики почитать.. а то часто бывает что сам дурак. век живи век учись sm.gif
klen

свежак arm host x86_64 linux
http://www.klen.org/Files/DevTools/linux-x..._64-20130120.7z
lto еще на 3 процента ужало код.. sm.gif
klen
в личном писье один из форумчан в связи с проблемами GDB c Pyton поросил пересобрать gdb cо статически влиноваными питонон, по ходу процессо пришлов влинквать SSL и Crypto либы. бинарь для linux x86_64
sherr
А под Linux 32 bit что-нибудь (АВР,АРМ) ?
adnega
Цитата(klen @ Dec 4 2011, 06:22) *
воткните комиллеру опции -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
будет генерится код для fpu, в сборке под cortex-m4f все протянуто (libgcc,libc,libm)

с нетерпением жду результов

следующий свежак будет 'мои релизом', поэтому хочется его оотестить в хвос и в гриву. будет особыс спросбом собраны libgcc и libc(newlib) чтоб гарантировать чоб в бинарь неприлазило вско гадость.

Помогите расставить плавающие точки на i))

Собираю тестовый проект с плавающей точкой, и вроде все работает, но жутко медленно.
Фактически не используются инструкции FPU, кроме vmov, vldr, vstr.
Сложение двух переменных типа double выливается в код с вызовом __adddf3 (эмуляция плавучки?)
Код
8001a0a:    ed9f 1b21     vldr    d1, [pc, #132]; 8001a90 <main+0x210>
8001a0e:    ed9d 0b06     vldr    d0, [sp, #24]
8001a12:    f7ff fac1     bl    8000f98 <__adddf3>
8001a16:    ed8d 0b06     vstr    d0, [sp, #24]

Писать ручками vadd.f64 d0, d1 не дает, ибо "Error: selected FPU does not support instruction".
При использовании "простенькой" арифметики из math.h код разрастается на 10КБ.

Тестю на этом: gcc version 4.8.0 20121121 (experimental) (Klen's GNU package (KGP) for ARM/elf platform)
В последней сборке под linux_64 результат тот же.

Кто виноват и что делать?
klen
Цитата(adnega @ Feb 1 2013, 03:49) *
Помогите расставить плавающие точки на i))
....
Писать ручками vadd.f64 d0, d1 не дает, ибо "Error: selected FPU does not support instruction".
При использовании "простенькой" арифметики из math.h код разрастается на 10КБ.

Кто виноват и что делать?


Должен Вас сильно огорчить. Отвечаю по существу
1. Виноваты Вы.
2. Ничего не поделаеш.

Вся проблема в том что Вы пытаетесь скормит процессору флоты двойной точности, которые он знать не знает. данное фпу умеет оперировать только с флотами одинарнной точности (float).
Если в Вашей задаче не требуется double, то просто поменяйте тип на float у всех операндов. Также надо вызывать float версии мат функций из math.h cos(x) -> cosf(x) и тд.

http://infocenter.arm.com/help/topic/com.a...c/BEHJADED.html
_Pasha
Цитата(adnega @ Feb 1 2013, 02:49) *
Писать ручками vadd.f64 d0, d1 не дает, ибо "Error: selected FPU does not support instruction".

Видимо, корень зла в том, что fpv4-sp-d16 не поддерживает vadd.f64 laughing.gif
Там только пересылки 64 битные бывают, остальное fp32
adnega
Цитата(klen @ Feb 1 2013, 10:38) *
Если в Вашей задаче не требуется double, то просто поменяйте тип на float у всех операндов. Также надо вызывать float версии мат функций из math.h cos(x) -> cosf(x) и тд.

Поменял эффекта ноль. Стало еще хуже))
Код
float lat, clat, lon, clon;
clat += 0.000001;

8001154:    ee18 0a10     vmov    r0, s16
8001158:    f7ff ff1a     bl    8000f90 <__aeabi_f2d>
800115c:    a314          add    r3, pc, #80; (adr r3, 80011b0 <main+0xd8>)
800115e:    e9d3 2300     ldrd    r2, r3, [r3]
8001162:    f7ff fdb7     bl    8000cd4 <__adddf3>
8001166:    f7ff ff67     bl    8001038 <__aeabi_d2f>


Цитата(_Pasha @ Feb 1 2013, 10:38) *
Видимо, корень зла в том, что fpv4-sp-d16 не поддерживает vadd.f64 laughing.gif
Там только пересылки 64 битные бывают, остальное fp32

Тут согласен.
demiurg_spb
а так?
clat += 0.000001f;

Вообще для координат действительно нужен дабл или фиксед-поинт, иначе точности не хватит...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.