|
|
 |
Ответов
(1 - 12)
|
Jan 13 2009, 11:58
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(dragigrja @ Jan 13 2009, 12:27)  Здравствуйте.
Какое значение опции -mfpu GCC должно использоваться для полностью аппаратной (и максимально эффективной, без оглядки на совместимость) плавающей точки в ядре ARM926EJ-S? Что нужно собрать для компиляции кроме gcc и binutils? Поскольку проект использует printf() и проч. нужна ли uClibc? А у него (ARM926EJ-S) точно есть FPU? Если FPU точно есть - то Вы должны знать и его тип. А ОС будет? Если Linux - то да, uClibc или обычная glibc нужна. Если нет ОС, то можно и самому написать printf.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Jan 13 2009, 17:42
|

Группа: Новичок
Сообщений: 9
Регистрация: 17-03-08
Из: Москва
Пользователь №: 35 969

|
amw: Цитата А у него (ARM926EJ-S) точно есть FPU? Если FPU точно есть - то Вы должны знать и его тип. Спасибо за ответ, оказалось, что в gcc 4.1.1 есть вариант vfp для -mfpu, которого не было в моём 3.4.3. Цитата А ОС будет? Если Linux - то да, uClibc или обычная glibc нужна. Если нет ОС, то можно и самому написать printf. ОС не будет, но кроме printf() в проекте есть достаточное количество функций стандартной библиотеки, которые было бы тягостно писать. Попробовал собрать тулчейн заново, но наткнулся на ошибки, итак: архитектура ARMv5TEJ, ядро — ARM926EJ-S хост: i686-pc-linux-gnu, gcc-4.3.2 задача: собрать тулчейн, генерирующий по возможности полностью использующий аппаратные возможности код (например, встроенный векторный FPU) 1. binutils-2.19: ./configure --target=arm-elf --prefix=/tmp/arm-elf --with-float=hard --enable-interwork --enable-multilib --disable-nls – собрано успешно, собранные бинарники были добавлены в $PATH 2. gcc-4.1.2: ./configure --target=arm-elf --with-arch=armv5te --with-cpu=arm926ej-s --with-fpu=vfp --with-float=hard --enable-interwork --disable-nls --prefix=$PREFIX --enable-languages=c --disable-libssp --with-newlib --disable-multilib --disable-tls --disable-mudflap --disable-shared --disable-threads – выдаёт ошибку: Код make[4]: Entering directory `/<...>/gcc-4.1.2/host-i686-pc-linux-gnu/gcc' /<..>/gcc-4.1.2/host-i686-pc-linux-gnu/gcc/xgcc -B/<...>/gcc-4.1.2/host-i686-pc-linux-gnu/gcc/ -B$PREFIX/arm-elf/bin/ -B$PREFIX/arm-elf/lib/ -isystem $PREFIX/arm-elf/include -isystem $PREFIX/arm-elf/sys-include -O2 -O2 -g -O2 -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -I. -I. -I../.././gcc -I../.././gcc/. -I../.././gcc/../include -I../.././gcc/../libcpp/include -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-unit-at-a-time -Dinhibit_libc \ -c ../.././gcc/crtstuff.c -DCRT_BEGIN \ -o crtbegin.o ../.././gcc/crtstuff.c:1: sorry, unimplemented: -mfloat-abi=hard and VFP При этом, в документации к этой версии gcc есть следующее: Цитата -mfpu=name -mfpe=number -mfp=number This specifies what floating point hardware (or hardware emulation) is available on the target. Permissible names are: `fpa', `fpe2', `fpe3', `maverick', `vfp'. -mfp and -mfpe are synonyms for -mfpu=`fpe'number, for compatibility with older versions of GCC.
If -msoft-float is specified this specifies the format of floating point values. Проект gnuarm прилагает для самостоятельной сборки исправленный файл gcc-4.1.2/gcc/config/arm/t-arm-elf, в котором раскоментировано большое количество строк с опциями MULTILIB. Это как–нибудь относится к ошибке? Заранее спасибо.
Сообщение отредактировал dragigrja - Jan 13 2009, 17:43
|
|
|
|
|
Jan 14 2009, 12:19
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(dragigrja @ Jan 13 2009, 19:42)  ... оказалось, что в gcc 4.1.1 есть вариант vfp для -mfpu, которого не было в моём 3.4.3. Опции то есть, а вот есть ли FPU в железе? Вероятно Вам потребуется libfloat для Вашего конкретного процессора. Обычно они предоставляются производителем. По крайней мере с Интеловским IXP425 у меня именно так и было. Цитата ОС не будет, но кроме printf() в проекте есть достаточное количество функций стандартной библиотеки, которые было бы тягостно писать. http://sourceware.org/newlib/Цитата Попробовал собрать тулчейн заново, но наткнулся на ошибки: ... Это как–нибудь относится к ошибке? Вроятно да. Не знаю точно, что там именно раскоментировано, но GCC не знает, в Вашем случае, какой FPU использовать для hard-float. Вот в настройках MULTILIB они и задаются. Сам я никогда не встречал ARM чип с FPU, кроме IXP425 (см выше).
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Jan 14 2009, 14:41
|

Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 15-06-04
Из: Менделеево
Пользователь №: 30

|
Цитата(amw @ Jan 14 2009, 15:19)  Опции то есть, а вот есть ли FPU в железе? --with-float=softfp --with-fpu=vfp Собирается?
|
|
|
|
|
Jan 14 2009, 19:00
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(vik0 @ Jan 14 2009, 20:12)  Я не правильно выразился. Не работал с другими чипами с FPU кроме IXP425. Я не отрицаю существоание таких чипов. И знаю что такие есть. Но точного ответа по обсуждаемому вопросу дать не могу.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Jan 15 2009, 10:38
|

Группа: Новичок
Сообщений: 9
Регистрация: 17-03-08
Из: Москва
Пользователь №: 35 969

|
Harbour: Цитата Во-первых - нафига собирать старый 4.1.2 ? Я взял его с сайта gnuarm, подумав, что он наиболее подходящ, коль они его используют для раздачи страждущим. При прежних параметрах для configure и заменённым t-arm-elf у gcc-4.2.3 ошибка прежняя: Код ../.././gcc/crtstuff.c:1: sorry, unimplemented: -mfloat-abi=hard and VFP Цитата Во-вторых там же на gnuarm английским по белому все написано. Берем тупо последний 4.2.3 и по шажочкам : 1. <...> 2. <...> 3. <...> Сделано. К четвёртому пункту есть вопрос. Цитата 4. cd gcc-build ../gcc-4.3.2/configure --target=arm-elf --prefix=/usr --enable-interwork --enable-multilib --with-float=soft --enable-languages="c,c++" --with-newlib --with-headers=newlib-source/newlib/libc/include make all-gcc install-gcc Согласно User Manual LPC32x0 имеет векторный сопроцессор для работы с ПЗ (VFP), который мне хотелось бы использовать в генерируемом тулчейном коде. Если configure указать --with-float=soft, то, как я понимаю, gcc будет эмулировать ПЗ? Мне хотелось бы иметь полностью аппаратную точку. amw: Цитата Опции то есть, а вот есть ли FPU в железе? Да, есть. Выше есть ссылка на описание серии µC. Цитата Вероятно Вам потребуется libfloat для Вашего конкретного процессора. Обычно они предоставляются производителем. По крайней мере с Интеловским IXP425 у меня именно так и было. А разве libfloat используется не для программной эмуляции FPU для конкретной архитектуры или ядра? Мне хотелось бы иметь именно аппаратную точку. Цитата Вроятно да. Не знаю точно, что там именно раскоментировано, но GCC не знает, в Вашем случае, какой FPU использовать для hard-float. Вот в настройках MULTILIB они и задаются. Спасибо, попробую собрать с ним. gosha: Цитата --with-float=softfp --with-fpu=vfp
Собирается? Возможно, но согласно с мануалом к gcc: Цитата -mfp=number This specifies what floating point hardware (or hardware emulation) is available on the target. Permissible names are: `fpa', `fpe2', `fpe3', `maverick', `vfp'. -mfp and -mfpe are synonyms for -mfpu=`fpe'number, for compatibility with older versions of GCC.
If -msoft-float is specified this specifies the format of floating point values. при --with-float=softpfp и --with-fpu=vfp точка останется эмулируемой, но при этом будет хранится в формате VFP. Мне бы хотелось иметь аппаратную точку. Благодарю за ответы.
Сообщение отредактировал dragigrja - Jan 15 2009, 10:55
|
|
|
|
|
Jan 15 2009, 14:59
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(amw @ Jan 14 2009, 22:00)  ...чипами с FPU кроме IXP425. а разве в IXP425 есть FPU? где это написано?
|
|
|
|
|
Jan 15 2009, 16:19
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Andrew2000 @ Jan 15 2009, 16:59)  а разве в IXP425 есть FPU? где это написано? Чесного (по ARM) нету. Написано в разделе про DSP.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Jan 18 2009, 08:15
|

Группа: Новичок
Сообщений: 9
Регистрация: 17-03-08
Из: Москва
Пользователь №: 35 969

|
Снова здравствуйте. В деле появился некоторый прогресс. С FPU вопрос решился банальным гуглением: (в прошлый раз я умудрился пропустить эту страницу) Цитата Generating VFP Instructions Question How do I get the compiler to generate VFP instructions?
Answer Use the options -mfpu=vfp -mfloat-abi=softfp to enable VFP instructions.
If you have a VFPv3 you may use -mfpu=vfp3 -mfloat-abi=softfp to enable VFPv3 instructions.
The compiler then assumes that your target hardware has VFP and generates appropriate code. GCC still uses the same ABI used on non-VFP processors, so your program will work fine if part of your code is compiled with software floating-point and other parts are compiled with the options given above.
Do not use -mfloat-abi=hard, which is not yet implemented. When this option is implemented it will generate code that is incompatible with the supplied runtime libraries. Благодаря сообщению Harbour удалось установить gcc-4.3.2: вместо make all, компилирующего всё, что есть, нужно было сделать make all-gcc, собирающего только сам компилятор. Плюс, configure нужно было передать -mfpu=vfp -mfloat-abi=softfp. Следующая проблема состоит в том, что arm-elf-ld не находит crti.o (которого нет в $PREFIX/arm-elf). Я собирал gcc с --disable-multilib, и потому подправил gcc-4.3.2/gcc/config/arm/t-arm-elf: было: Код 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 стало: Код # 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 Увы, crti.o так и не появился.
Сообщение отредактировал dragigrja - Jan 18 2009, 08:17
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|