Easyelectronics.ru

Электроника для всех
Текущее время: 28 май 2018, 02:25

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 25 авг 2016, 01:17 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Я уже раньше писал об этом на другом форуме, но на всякий случай повторю здесь. Сваял я тут математическую библиотечку для работы с числами в формате с фиксированной точкой. Основной упор делал на производительность и небольшой размер кода. Пока только для Cortex-M3, хотя можно и для Cortex-M4 собрать, но она не будет задействовать все его возможности. В разработке находятся еще несколько вариантов: один как раз для Cortex-M4, а второй, несколько урезанный, для Cortex-M0. Потом как-нибудь можно и на не ARM процессоры портировать.

В принципе, в README есть вся информация. Как собирать и использовать, какие есть альтернативы, где найти описание функций и так далее. Так что я тут повторяться не буду, а если вдруг что - спрашивайте. Собственно, вот ссылка на репозиторий. Как-то так.


Последний раз редактировалось Menzoda 20 дек 2017, 19:00, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 25 авг 2016, 12:32 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 503
Понимаю что вопрос может выбрать бурю..
А чем хуже библиотека родная от ARM?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 25 авг 2016, 12:43 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Я же сказал, всё есть в README. Ладно, повторюсь еще раз. Какая родная? Если это CMSIS-DSP, то она вообще не о том. Из математических функций там только синус, косинус и корень, и то только для двух форматов Q15 и Q31. Есть еще несколько арифметический функций, но они векторные, или комплексные. При этом имеющиеся синус, косинус и корень используют здоровенные таблицы поиска (у меня меньше), так что она будет занимать в несколько раз больше места. Да и способ вычисления этих функций (из описания) самый простейший, точность у него никакая. Понятно почему они такие здоровые таблицы используют. Никакой фантазии у людей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 25 авг 2016, 13:03 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 503
Menzoda писал(а):
Я же сказал, всё есть в README. Ладно, повторюсь еще раз. Какая родная? Если это CMSIS-DSP, то она вообще не о том. Из математических функций там только синус, косинус и корень, и то только для двух форматов Q15 и Q31. Есть еще несколько арифметический функций, но они векторные, или комплексные. При этом имеющиеся синус, косинус и корень используют здоровенные таблицы поиска (у меня меньше), так что она будет занимать в несколько раз больше места. Да и способ вычисления этих функций (из описания) самый простейший, точность у него никакая. Понятно почему они такие здоровые таблицы используют. Никакой фантазии у людей.


А еще все базовые (сложение, вычитание, ) еще поиск среднего , среднекватратичного, минимального, максимального, степень.. Еще q7... Еще работа с матрицами.. Ну вообще там много чего на мой взгляд.

Это нисколько не умоляет вашей работы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 25 авг 2016, 13:27 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Сложение, вычитание, среднее и все остальные - векторные, зачем они там нужны непонятно. Это не даст никакого преимущества с точки зрения производительности, я и сам могу в цикле по массиву пройтись. Даже могу сразу в нескольких массивах среднее считать и максимальное находить. Поэтому я не вижу смысла в таких функциях, они связывают руки.

Степень и Q7 не не нашел в описании, если есть - хорошо. Матричные функции это уже о другом. Моя цель - базовые операции над скалярными величинами, максимально быстрые и точные. Вот уже над ними можно построить следующий уровень, для работы с векторами, матрицами, или там комплексными числами. Но это будет уже отдельная библиотека.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 25 авг 2016, 13:45 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 503
Menzoda писал(а):
Сложение, вычитание, среднее и все остальные - векторные, зачем они там нужны непонятно. Это не даст никакого преимущества с точки зрения производительности, я и сам могу в цикле по массиву пройтись. Даже могу сразу в нескольких массивах среднее считать и максимальное находить. Поэтому я не вижу смысла в таких функциях, они связывают руки.

Степень и Q7 не не нашел в описании, если есть - хорошо. Матричные функции это уже о другом. Моя цель - базовые операции над скалярными величинами, максимально быстрые и точные. Вот уже над ними можно построить следующий уровень, для работы с векторами, матрицами, или там комплексными числами. Но это будет уже отдельная библиотека.



Я смотрел прямо в директориях. Скажу честно я не проверял их по точности и скорости. Но насколько я понимаю то что написано для F4 оно написано на ассемблере. Просто он спрятан за дефайнами довольно глубоко. Но могу и ошибаться. :)

А насчет среднего и остального.. Вообще имеет смысл. Потому как написать это учтя все нюансы бывает не просто особенно когда это касается целочисленной математики. Возникают нюансы с переполнением которых можно избежать если подойти не в лоб. Как там сделано у них не знаю.

Но я повторюсь я никоим образом не пытаюсь умалить Ваш труд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 25 авг 2016, 14:23 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Да я про умаление и не говорю ничего.


kos писал(а):
Я смотрел прямо в директориях. Скажу честно я не проверял их по точности и скорости. Но насколько я понимаю то что написано для F4 оно написано на ассемблере. Просто он спрятан за дефайнами довольно глубоко. Но могу и ошибаться.

Неа, на Си. Только что посмотрел исходники.

kos писал(а):
А насчет среднего и остального.. Вообще имеет смысл. Потому как написать это учтя все нюансы бывает не просто особенно когда это касается целочисленной математики. Возникают нюансы с переполнением которых можно избежать если подойти не в лоб.

Просто "среднее и остальное" во-первых функции более высокого уровня, поэтому я их и не добавлял. А во-вторых, тут уже сложнее предугадать потребности пользователя. Синус он и в Африке синус, даже с некоторыми отличиями, а среднее можно и так и сяк считать. Если величины небольшие, то можно использовать быстрый 32-битный аккумулятор. Если большие, то придется более медленный 64-битный использовать. Можно защищаться от переполнения, а можно и нет. Вдруг пользователю не нужны все эти навороты? Или нужны? А стоимость их довольно велика...

Действительно близкий аналог - это Texas Instruments IQmath Library, а вот с ARM CMSIS DSP без толку сравнивать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 04 сен 2016, 17:29 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Значит дела обстоят следующим образом: 32-битную версию для Cortex-M3 и Cortex-M4 я "релизнул" и решил перейти к 16-битной версии для Cortex-M0. Думал сейчас быстренько все сделаю и тогда уж скажу. Однако, когда я покопался в наборе инструкций Cortex-M0, то оказалось что он настолько урезанный (читай убогий), что просто так взять и быстренько сделать не получится. Он чуть ли не как PIC, просто с регистрами 32-битными. Такой засады я конечно не ожидал от него.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 05 сен 2016, 13:11 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1084
Попробовал портировать для gnu as.
Мешает синтаксический сахар кейлового ассемблера - неявные it блоки и неявные Rd - eor r0, r1, lsl #25 вместо eor r0, r0, r1, lsl #25

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 05 сен 2016, 15:35 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Насчет IT блоков я долго сомневался, оставить их или убрать. Потом все же решил убрать для краткости. В принципе можно их добавить. Даже не знаю...

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

Ну а так, если нужно просто поюзать библиотеку в гнусном проекте, то можно взять готовые бинарники, у меня они там выложены. Просто переименовать расширение .lib в .a, чтобы компилятор их съел. А может и не надо переименовывать, может и так съест. В любом случае сам объектный формат должен быть совместимым с GCC, да и с другими компиляторами тоже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 05 сен 2016, 20:18 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1084
gas хочет столько аргументов, сколько в коде инструкции, так он различает в 16 или 32-битный вариант транслировать, но даже если в 16-битный невозможно, то всё равно упорно продолжает различать )
Я скриптом портирую, не руками, неявные Rd легко могу добавить и добавил, а вот неявные it-блоки теоретически возможно, конечно, но практически муторно


Вложения:
fix32-cm3-gas.zip [162.65 Кб]
Скачиваний: 97

_________________
mcu.goodboard.ru
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 05 сен 2016, 21:04 
Только пришел

Зарегистрирован: 30 июл 2016, 21:21
Сообщения: 11
Menzoda писал(а):
Я уже раньше писал об этом на другом форуме, но на всякий случай повторю здесь. Сваял я тут математическую библиотечку для работы с числами в формате с фиксированной точкой. Основной упор делал на производительность и небольшой размер кода. Пока только для Cortex-M3, хотя можно и для Cortex-M4 собрать, но она не будет задействовать все его возможности. В разработке находятся еще несколько вариантов: один как раз для Cortex-M4, а второй, несколько урезанный, для Cortex-M0. Потом как-нибудь можно и на не ARM процессоры портировать.

В принципе, в README есть вся информация. Как собирать и использовать, какие есть альтернативы, где найти описание функций и так далее. Так что я тут повторяться не буду, а если вдруг что - спрашивайте. Собственно, вот ссылка на репозиторий. Как-то так.


Приветствую! Может кто прояснит ситуацию..Посмотрел в сторону ассемблера арм..Не понятны конструкции proc endp..В одних книгах они есть везде для
"окконтуривания" вызова функций внутри ассемблера...в других их нет..Вставление и убирание этих директив в простейшем примере кода ассемблера
ничего не меняет ни в дизассемблере.. ни в поведении компиляции..инструкция bx lr отправляет код куда нужно и без этих директив..В каком случае они действительно нужны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 05 сен 2016, 21:35 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Это подсказка для дополнительной отладочной информации. При отладке будет показывать как функцию, а не как просто кусок кода. Лишними не будут, да и сам компилятор их ставит когда ассемблер генерирует.

Цитата:
Я скриптом портирую, не руками, неявные Rd легко могу добавить и добавил, а вот неявные it-блоки теоретически возможно, конечно, но практически муторно

Да, IT действительно не просто добавить, это надо мини-парсер делать. Прям аж интересно стало, чего этот GCC такой привередливый. Сейчас скачаю и поиграюсь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 05 сен 2016, 22:22 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Разобрался. Вот такой вот кусок кода компилируется нормально:

Код:
       
        .thumb
        .syntax unified

        .text
        .global     foo

        .align  2
        .thumb_func
foo:
        adds    r0, r1
        subeq   r0, r2

        add     r0, r1, #4095
        sub     r0, r2, r3
        bx      lr

        .end


Опции такие:
Код:
arm-none-eabi-as -mthumb -mcpu=cortex-m3 -march=armv7-m -mimplicit-it=thumb test.s


1) На неявные Rd вообще у меня не ругался.
2) Ругался на immediate value пока я не поставил ".syntax unified".
3) Чтобы сам генерировал IT нужна опция "-mimplicit-it=thumb". Там где я её нашел пишут, что в версии 4.4 не поддерживается (в более старых наверное тоже).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 05 сен 2016, 23:48 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1084
Не уболтал значит я вас на it блоки? Ну ладно, implicit так implicit, хозяин - барин )
Код:
            .syntax unified

4018        adds    r0, r1
04BF        itt     eq
801A        subeq   r0, r2
801A        subeq   r0, r2
                                             
4018        adds    r0, r1
04BF801A    subeq   r0, r2  @ wtf ? )
801A        subeq   r0, r2  @
                                             
0844        add     r0, r1              @ ok
01EB0200    add     r0, r1, r2          @ ok
01EB8200    add     r0, r1, r2, lsl #2  @ ok
            add     r0, r1, lsl #2      @ error
00EB8100    add     r0, r0, r1, lsl #2  @ ok

Попробую посчитать и отпишусь потом

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 06 сен 2016, 00:22 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Блин, я же пробовал без Flexible Second Operand! С ним - да, ругается падла на пропущенный Rd.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 08 сен 2016, 13:19 
Заглядывает иногда

Зарегистрирован: 10 апр 2013, 17:41
Сообщения: 194
Интересно, а почему логарифмы и возведение в степень не сделали? Вроде часто востребуемые функции.

_________________
Стиль: "G&P"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 09 сен 2016, 01:53 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Это уже посложнее будет, и все же менее востребовано в бытовых задачах (типа управления двигателем), поэтому отложил на потом. Закончу текущий проект и возьмусь за остальные функции, их еще много.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 01 окт 2016, 20:53 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Посмотрел-подумал и решил объединить репозитории для отдельных архитектур в один общий. Кроме того добавил поддержку GCC. Не знаю чем там закончилось у vt340, он вроде что-то переносил, но вот теперь и у меня руки дошли. Еще прикинул как реализовать экспоненту и тангенс, вышло не очень хорошо. Для тангенса наверное нужно будет две lookup таблицы, а с экспонентой... тоже не все гладко.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 01 окт 2016, 21:10 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2425
Откуда: Санкт-Петербург
По моему опыту в fixed-point логарифмы и экспоненты обычно нужны весьма специфические (характерный пример - μ-law), которые надо делать целиком (например, интерполяцией по таблице), а общий случай имеет смысл делать во floating point.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 01 окт 2016, 21:18 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Мне тоже так кажется. Может тогда что-нибудь специфичное сделать? Что бывает нужно в каких-нибудь часто-используемых алгоритмах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 02 окт 2016, 13:43 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1084
Ну, я всё-таки надеялся, что будет след версия, которую допиливать не надо будет, зря надеялся )
Ладно, допилил сегодня сам и посчитал синус q20 - 6 точных знаков - отличный результат, хорошая работа и годная либа


Вложения:
sin-q20.zip [51.37 Кб]
Скачиваний: 89

_________________
mcu.goodboard.ru
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 02 окт 2016, 15:42 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Допиливать это про что? В GCC версии исходников надо только тот самый -mimplicit-it=always указать. Да, вот такой вот я негодяй :) Только если компилировать через GCC, а не AS, то придется указать -Wa,mimplicit-it=always (или -Wa,-mimplicit-it=always) потому как GCC сам такой опции не знает и её нужно напрямую ассемблеру передавать.

Кстати, насчет второй проблемы, где компилятор не соглашался на неявный Rd. Тут GCC наверное даже прав. В одном армовском документе написано про несколько кодировок команд (T1, T2, T3). Так вот если второй операнд использует сдвиг, то кодировка будет T3, где регистр назначения должен быть обязательно указан. Просто армовский компилятор сам по тихому это исправляет, а GCC более строго подходит. Так что тут мне пришлось все-таки исправить.

А еще GCC не знает mov32, пришлось комбинацию movw/movt использовать. И в одном месте ему не понравился mov с константой 0x1555, пришлось поменять на movw. Наверное опять с кодировкой команд что-то.

Все. Больше ничего не должно быть. Даже никаких опций указывать не надо (кроме mimplicit-it), я все эти -mthumb, -mcpu и -march в виде директив указал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 02 окт 2016, 17:51 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1084
Menzoda писал(а):
Допиливать это про что?

Я убирал все рюшечки, превращающие каждый файл в отдельный модуль компиляции, все эти section, global, end, ну и соотв менял ldr r,=label на adr r,label, т.е. до чистого незамутнённого ассемблерного кода )

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека для работы с числами с фиксированной точкой
СообщениеДобавлено: 02 окт 2016, 18:34 
Заглядывает иногда

Зарегистрирован: 28 мар 2013, 11:01
Сообщения: 86
Если это где-то по месту использовать, то понятно, можно это все убрать. Но в общем случае это все нужно, поэтому
vt340 писал(а):
Ну, я всё-таки надеялся, что будет след версия, которую допиливать не надо будет, зря надеялся

тут я ничего не могу поделать. Если нужно под какие-то свои специфичные задачи допиливать, то надо будет допиливать, что тут сказать. В общем, заработало и ладно )


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB