Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема с исполненем кода FPU ep9312
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
klen
имеем ep9315
1. Тион Про http://www.zao-zeo.ru/catalog/tionpro.html
Linux (none) 2.6.17.14 #1 PREEMPT Thu Jun 21 14:08:38 MSD 2007 armv4tl unknown
2. собранный тулчейн http://arm.cirrus.com/files/tools/crunch-tools-1.4.3.tar.bz2

тествая програмка:
Код
#include <stdlib.h>
#include <stdio.h>
//volatile float a,b,c;
int main()
{
  printf ("Hellow from Tion GCC!!\n");
  asm volatile ("cfmuld  mvd0, mvd2, mvd0");
  //a = 0.1;
  //b = 0.2;
  //c = a * b;
  printf ("Maverick is ok!!!\n");
  return 1;
}


асесблерный листинг
Код
    .file    "main.c"
    .section    .rodata.str1.4,"aMS",%progbits,1
    .align    2
.LC0:
    .ascii    "Hellow from Tion GCC!!\000"
    .align    2
.LC1:
    .ascii    "Maverick is ok!!!\000"
    .text
    .align    2
    .global    main
    .type    main, %function
main:
    @ Function supports interworking.
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    str    lr, [sp, #-4]!
    ldr    r0, .L3
    sub    sp, sp, #4
    bl    puts
#APP
    cfmuld  mvd0, mvd2, mvd0
    ldr    r0, .L3+4
    bl    puts
    mov    r0, #1
    add    sp, sp, #4
    ldr    lr, [sp], #4
    bx    lr
    mov    r0, r0    @ nop
    mov    r0, r0    @ nop
.L4:
    .align    2
.L3:
    .word    .LC0
    .word    .LC1
    .size    main, .-main
    .ident    "GCC: (GNU) 4.1.2"


тион ругается на кривую инстирукцию (cfmuld mvd0, mvd2, mvd0) как я понимаю
Цитата
#/mnt/out/c-test
Hellow from Tion GCC!!!!
Illegal instruction
/#


если не использовать плавющую запятую то все работает.
че делать? куда рыть. мож FPU выключен ??? я всех док не читал sad.gif
мож ядро линха не дает исполнять ?
klen
по ходу разбирательства этого горя, и полазив по исходникам ядра наткнулся на структуру в файле linux-XXX/arch/arm/kernel/setup.c :
Код
static const char  *hwcap_str[]
{
   "swp",
   "half",
   "thumb",
   .....
   "crunch",
   .....
}


так я вот подумал что на работющей системе файл /proc/cpuinfo должн содержать в стороке Features : swp half thumb crunch
а у меня тока
Features : swp half thumb

просьба если у кого есть система с ep9315 и на ней работает код с инструкциями Maveric'а посмотреть че выдает линукс в /proc/cpuinfo

создается подозрение что ядро так собрано... может ошибаюсь?
zaozeo
а в группу технической поддержки Тионов не задавали вопрос?
klen
Цитата(zaozeo @ Jun 26 2008, 09:58) *
а в группу технической поддержки Тионов не задавали вопрос?

Здравствуйте.
если Вы внимательно прочитаете форум группы поддержки то обнаружите ответ на свой вопрос - да. Я постил под тем же ником. Но к сожалению никто из Ваших представителей нечего по теме не сообщил.

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


2. К сожалению gcc от Cirrus имеет кривейшую поддержку Maverick Crunch, реально ее использовать вероятно неполучилось ниукого - код не проходит стандартные тесты вычислений поавающей запятой.
В принципе первого пункта достаточно чтобы написать высокопроизводительный код но придется сделать это с помощью асм вставок. Мне кроме вычислений потребовалость прикрутить к ТионПРО Qt-4.4. Код Qt реализующий аффинные преобразования использует плавучку. поэтому применение Crunch конкретно в моем случае нехило ускоряет графику.

Cirrus - позорно забил на свой сопроцессор - не смог реализовать GCC порт, что привело к нулю его практическую ценность для программеров на C/C++.

2. Существует вменямая поддержка Crunch от futaris http://martinwguy.co.uk/martin/ts7250/FPU/
но сдесь тоде не все так гладко как хотелосьбы. переодически??? он генерит кривые иструкции и проц бросает ексепшен.

3. Пытаюсь прикрутить поддержку crunch к gcc ветке 4.4. мне она нравится по сама по себе. Если получится то выложу порт. Проблемы со временем и желанием - время нада для решения целевых задач а хотеть этого должен Cirrus а нея. К тому же в ARM'ах я разочаровался sad.gif хоца перепрыгнуть на mips64 - мешает тока отсутсцтвие доступных универсальных чипов. Но эт окакто решаетццо.

4. Большое спасибо zao-zeo за Тион, хоть чтото неплохое нашего русского производства. На мой взгляд грамотная ценовая политика. не чувствуется желания срубить бабала по максимум, наверно инженеры в руководстве случайно оказались.
Но вот с подержкой софтом своей платформы както хиленько. Где библиотеки? где Qt свежий? где вменяймыей драйверы SPI?? не надо в нете искать и "чтото" ложить на сд-диск. Нада сесть и написать - с поддержкой дма и тд.
aaarrr
Цитата(klen @ Jun 26 2008, 23:55) *
Cirrus - позорно забил на свой сопроцессор - не смог реализовать GCC порт, что привело к нулю его практическую ценность для программеров на C/C++.

Cirrus уже и на сами процессоры забил: поддержка закрывается, EP9407 выпущен не будет sad.gif
hwdev
Цитата(aaarrr @ Jun 27 2008, 00:10) *
Cirrus уже и на сами процессоры забил: поддержка закрывается, EP9407 выпущен не будет sad.gif

В смысле? Цирюки больше не будут проц с АРМ ядром делать?
aaarrr
Камни делать будут, а вот линукс и свой gcc - нет.
hwdev
Цитата(aaarrr @ Jun 30 2008, 12:39) *
Камни делать будут, а вот линукс и свой gcc - нет.

Ну GCC вряд ли нужен "свой". На то он и GCC, чтобы быть общим. А что касается линукса, то имеется в виду, что они для ядра свои патчи делать не будут или не будут делать свой "чудо-уникальный демо" линукс? Ну последнее, думаю, нах никому не нужно.
aaarrr
...и форум поодержки закрыть могут. Обидно, что направление закрыто - EP9407 обещал быть интересным в какой-то степени.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.