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

 
 
85 страниц V  « < 55 56 57 58 59 > »   
Reply to this topicStart new topic
> свежак KGP win32/arm/avr/mips/m68k, GNU tools chain
AHTOXA
сообщение Jan 11 2013, 16:33
Сообщение #841


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Я тут словил косячог в одном из предыдущих свежаков, конкретнее - 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) этой проблемы нет. Так что имейте в виду.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Jan 19 2013, 21:07
Сообщение #842


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



бывает... но мы же джедаи и нас такое не остановит!
LTO медленно но верно корабкоется в гору, код уменшается а глюки с отваливаением становятся реже.

кстате, у меня тоже волатайл режет нещадно, но это мы знаем что будет побочный эффект в аппаратуре. а он не знает, поэтому лично я ему это прощаю и ручками помогаю сгенерить то что нужно. хотя volaile какбэээээ ...... мож теперь волатильность изменило свое содержание? нада стандартики почитать.. а то часто бывает что сам дурак. век живи век учись sm.gif
Go to the top of the page
 
+Quote Post
klen
сообщение Jan 20 2013, 14:10
Сообщение #843


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912




свежак arm host x86_64 linux
http://www.klen.org/Files/DevTools/linux-x..._64-20130120.7z
lto еще на 3 процента ужало код.. sm.gif
Go to the top of the page
 
+Quote Post
klen
сообщение Jan 31 2013, 17:03
Сообщение #844


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



в личном писье один из форумчан в связи с проблемами GDB c Pyton поросил пересобрать gdb cо статически влиноваными питонон, по ходу процессо пришлов влинквать SSL и Crypto либы. бинарь для linux x86_64
Прикрепленные файлы
Прикрепленный файл  arm_kgp_eabi_gdb.tar.7z ( 2.92 мегабайт ) Кол-во скачиваний: 21
 
Go to the top of the page
 
+Quote Post
sherr
сообщение Jan 31 2013, 17:44
Сообщение #845


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



А под Linux 32 bit что-нибудь (АВР,АРМ) ?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 31 2013, 23:49
Сообщение #846


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(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 результат тот же.

Кто виноват и что делать?
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 1 2013, 06:38
Сообщение #847


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(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
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 1 2013, 06:38
Сообщение #848


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(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
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 1 2013, 08:20
Сообщение #849


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(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

Тут согласен.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 1 2013, 08:24
Сообщение #850


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

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



а так?
clat += 0.000001f;

Вообще для координат действительно нужен дабл или фиксед-поинт, иначе точности не хватит...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 1 2013, 08:32
Сообщение #851


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(adnega @ Feb 1 2013, 14:20) *
Поменял эффекта ноль. Стало еще хуже))

Похоже не везде поменяли. Константам припишите суффикс f: 0.1f.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 1 2013, 08:33
Сообщение #852


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(demiurg_spb @ Feb 1 2013, 12:24) *
а так?
clat += 0.000001f;

Вообще для координат действительно нужен дабл или фиксед-поинт, иначе точности не хватит...


Нихт арбайтн:
Код
clat += 0.000001f;
8001150:    a313          add    r3, pc, #76; (adr r3, 80011a0 <main+0xc8>)
8001152:    e9d3 2300     ldrd    r2, r3, [r3]
8001156:    4620          mov    r0, r4
8001158:    4629          mov    r1, r5
800115a:    f7ff fdbb     bl    8000cd4 <__adddf3>
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 1 2013, 08:38
Сообщение #853


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(adnega @ Feb 1 2013, 12:20) *
Поменял эффекта ноль. Стало еще хуже))
Код
8001158:    f7ff ff1a     bl    8000f90 <__aeabi_f2d>

Падажжите. -mfloat-abi=hard пристутствует?
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 1 2013, 08:43
Сообщение #854


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(_Pasha @ Feb 1 2013, 12:38) *
Падажжите. -mfloat-abi=hard пристутствует?

Конечно.

Вроде все заработало.
Указал все типы float, все константы с суффксом f (кроме M_PI).
Код теперь генерится красивый (с vmul, vadd).
Скорость возросла в долгожданные 11 раз.
Но может чуть-чуть волнует вызов "80015b8: f000 f916 bl 80017e8 <sqrtf>" при живом "VSQRT{cond}.F32 Sd, Sm"
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 1 2013, 09:03
Сообщение #855


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(adnega @ Feb 1 2013, 12:43) *
Вроде все заработало.
Указал все типы float, все константы с суффксом f (кроме M_PI).

Странно то, что в прошлый раз конверсия как-то боком прошла. У меня такого не было, правда, это все не kgp, считайте оффтоп sm.gif
vcvt генерится аж бегом на строки типа float a = (float) foo_int;
Go to the top of the page
 
+Quote Post

85 страниц V  « < 55 56 57 58 59 > » 
Reply to this topicStart new topic
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 18:57
Рейтинг@Mail.ru


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