Перейти к содержанию
    

Vallen2006

Участник
  • Постов

    19
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Vallen2006

  • Звание
    Участник
    Участник
  1. Попробуйте изменить параметр регуляризации lambda. Можно попвтаться найти его исходя из невязки, но как правило это дает завышенное значение.
  2. Немного ошибся в пердыдущем посте r = fract16_to_float(0x0000); r1 = float_to_fract16®; printf ("zero 0x%8X \n", *(unsigned short *)&r1); r = fract16_to_float(0x8000); r1 = float_to_fract16®; printf ("zero 0x%8X \n", *(unsigned short *)&r1); r = fract16_to_float(0x4000); r1 = float_to_fract16®; printf ("zero 0x%8X \n", *(unsigned short *)&r1); r = fract16_to_float(0x2000); r1 = float_to_fract16®; printf ("zero 0x%8X \n", *(unsigned short *)&r1); r = fract16_to_float(0x1000); r1 = float_to_fract16®; printf ("zero 0x%8X \n", *(unsigned short *)&r1); zero 0x 0 zero 0x 8000 zero 0x 4000 zero 0x 2000 zero 0x 1000 Насчет кода преобразования, так он стандартный (для Analog). Считать с плавующей точкой не успею, т.к. цикл 5 мс, а данных обработать надо много. Буду думать. Кстати при изменении даипазона _MAX_FLOAT_RANGE = 0.999969 Вывод меняется на более вменяемый: zero 0x 0 zero 0xBF800000 zero 0x3F000000 zero 0x3E800000 zero 0x3E000000 Интересно диапазон изменен Analog-ом с какой-то целью или нет?
  3. Спасибо. Вывод данных: r = fract16_to_float(0x0000); printf ("zero 0x%8X \n", *(int *)&r); r = fract16_to_float(0x8000); printf ("zero 0x%8X \n", *(int *)&r); r = fract16_to_float(0x4000); printf ("zero 0x%8X \n", *(int *)&r); r = fract16_to_float(0x2000); printf ("zero 0x%8X \n", *(int *)&r); r = fract16_to_float(0x1000); printf ("zero 0x%8X \n", *(int *)&r); r = fract16_to_float(0x0000); printf ("zero 0x%8X \n", *(unsigned short *)&r); r = fract16_to_float(0x8000); printf ("zero 0x%8X \n", *(unsigned short *)&r); r = fract16_to_float(0x4000); printf ("zero 0x%8X \n", *(unsigned short *)&r); r = fract16_to_float(0x2000); printf ("zero 0x%8X \n", *(unsigned short *)&r); r = fract16_to_float(0x1000); printf ("zero 0x%8X \n", *(unsigned short *)&r); zero 0xB6980000 zero 0xBF800000 zero 0x3EFFFF1C zero 0x3E7FFE84 zero 0x3DFFFD54 zero 0x 0 zero 0x 0 zero 0x FF1C zero 0x FE84 zero 0x FD54 Вопрос по _MAX_FLOAT_RANGE возник вот почему: пределы чисел и преобразования определены так /* * The following constants describe the properties of a * scaled floating point range, equivalent to the range * for fract16 values between 0x8000 and 0x7fff * ==>> DO NOT MODIFY */ #define _MIN_FRACT_RANGE ( -1.0 ) #define _MAX_FRACT_RANGE ( 0.999969 ) #define _RANGE_FRACT ( -_MIN_FRACT_RANGE + _MAX_FRACT_RANGE ) /* * The following data are to be supplied by the user. * They describe the original data set * ==>> TO BE MODIFIED */ #define _MIN_FLOAT_RANGE ( -1.0 ) #define _MAX_FLOAT_RANGE ( 0.99996 ) #define _RANGE_X ( -_MIN_FLOAT_RANGE + _MAX_FLOAT_RANGE ) /* * The following macros are used by the conversion functions * ==>> DO NOT MODIFY */ #define _TERM_A (_RANGE_FRACT / _RANGE_X) #define _TERM_B ((-_MIN_FLOAT_RANGE * _TERM_A) + _MIN_FRACT_RANGE ) #define _TERM_a (_RANGE_X / _RANGE_FRACT) #define _TERM_b ((-_MIN_FRACT_RANGE * _TERM_a) + _MIN_FLOAT_RANGE ) #define _INV_2_POW_15 (1.0 / 32768.0) /* Function to convert floating point data into fract16 data */ #pragma inline #pragma always_inline fract16 float_to_fract16(float _x) { float val = ( ( (_x * _TERM_A) + _TERM_B ) * 32768.0 ); return (fract16)val; } /* Function to convert fract16 data into floating point data */ #pragma inline #pragma always_inline float fract16_to_float(fract16 _x16) { return ( (((double)_x16 * _TERM_a) * _INV_2_POW_15) + _TERM_b ); } т.е. диапазон float и fract16 не совпадают, что приводит к масштабированию и сдвигу числа при преобразовании.
  4. Спасибо. Понятно, только получается что 0+0+0... = 0, но после преобразования в float получаю отрицательное число, и что мне с ним дальше делать если нужно посчитать сигму (т.е. корень квадратный из него)? И еще тогда вопрос, если есь ошибка преобразования fract16 -> float, то почему нет float -> fract16. Может необходимо изменить диапазон значений преобразуемых величин?
  5. Доброго времени суток! Только начал заниматься процессорами BlackFin и обработкой сигналов, возник вопрос такой. Используя тип fract16 пишу код: fract16 data; data = float_to_fract16(0.0); printf("data = %f, data = 0x%x\n", fract16_to_float(data), (unsigned short)data); Получаю на выходе data = -0.000005, data = 0x0 т.е. число 0 при расшифровке становиться -0.000005. Самое интересное, что когда считаю дисперсию сигнала она тоже может получиться отрицательной. Никто не сталкивался с подобным? Как можно обойти данную проблему? Поможет ли изменение _MAX_FLOAT_RANGE для преобразования в fract16 и обратно?
  6. Добрый день. Возникла необходимость написать драйвер устройства работающего на шине VME, в качестве процессорной платы используется VR7 с мостом VME-PCI tundra universe. В связи с чем возник вопрос - есть ли какие-либо стандартные библиотеки для работы с tundr-ой по QNX 6.3? Писать самому не хочется т.к. желательно что-бы с мостом могли работать и другие приложения, а это предполагает некий более-менее стандартный интерфейс. Заранее спасибо.
  7. Добрый день. Возникла проблема при написании драйвера для CAN платы. Вопрос такой, есть две платы CAN. С первой на вторую плату передаются пакеты с увеличивающимся идентификатором (тест такой). Если при этом начать сбрасывать вторую плату (например для установки нового фильтра) то периодически она начинает пропускать кадры (обычно один), что еще не так плохо. Но иногда принимаются полностью неверные кадры (например при выдачи только стандартных кадров принимается кадр с расширенным идентификатором). Контроллер SJA1000. Никто не подскажет в чем может быть дело? Заранее спасибо.
  8. Вопрос Olimex SAM7-EX256 + ARM-USB-TINY

    Добрый день. Никто не сталкивался с такой проблемой: При попытке запуска Open OCD выдаеться сообщение Open On-Chip Debugger (2008-06-19 19:00) svn: 717 URL: http://svn.berlios.de/svnroot/repos/openocd/trunk Info: options.c:50 configuration_output_handler(): jtag_speed: 2, 2 Info: options.c:50 configuration_output_handler(): Open On-Chip Debugger (2008-06-19 19:00) svn: 717 Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x05b1703f (Manufacturer: 0x01f, Part: 0x5b17, Version: 0x0) Error: embeddedice.c:191 embeddedice_build_reg_cache(): unknown EmbeddedICE version (comms ctrl: 0x00000000) Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x05b1703f (Manufacturer: 0x01f, Part: 0x5b17, Version: 0x0) User: target.c:436 target_process_reset(): Timed out waiting for halt after reset Почему он может не определить версию EmbeddedICE?
  9. USBCV13

    Он самый.
  10. USBCV13

    Да, с устройствами USB 2.0 работает через root-хаб компьютера, а насчет внешнего я лично купил D-Link за 600 рублей, как бонус :santa2: появились 4 дополнительные порта в нормальным внешним питание.
  11. USBCV13

    Там же ясно написано, что с root-хабом и устройствами USB1.1 на прямую штука не работает, если хотите тестировать их то нужен внешний USB-хаб 2.0. Проверял на PIC контроллерах, тесты по главе 9 стандарта проходит на ура. Единственная проблема иногда прога не хочет загружать свой драйвер (или выгружать его), приходится руками удалять, а так больше проблем не замечал.
  12. Не поможет, это UHCI, но все равно спасибо.
  13. Open HCI

    Кто-нибудь сталкивался с программированием Open HCI из-под DOS? Каким образом можно получить доступ к его регистрам?
  14. Доброго времени суток! Видел ли кто-нибудь примеры реализации самопрограммирования flash mega 128 на WinAVR и возможно ли это в принципе?
  15. Меню Build - Create Distribution Kit, выбираете необходимые файлы (проект включается автоматически, поэтому необходимо включать только свои файлы настроек и т.д., о чем LW не знает), нажимаете кнопку Build и получаете инчталлятор, включающий Ваш проект и библиотеки времени исполнения.
×
×
  • Создать...