Например TDA7294

Форум РадиоКот • Просмотр темы - STM32: деление или вычитание?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт янв 02, 2026 20:07:51

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32: деление или вычитание?
СообщениеДобавлено: Вс июл 27, 2014 21:47:24 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2132
Откуда: Харьков
Рейтинг сообщения: 0
Код:
uint8_t ByteToBcd2(uint8_t Value)
{
  uint8_t bcdhigh = 0;
  while (Value >= 10)
  {
    bcdhigh++;
    Value -= 10;
  }
  return  ((uint8_t)(bcdhigh << 4) | Value);
}


Функция преобразует двоичное число в двоично-десятичное. Взята из библиотеки RTC для иара. Не проще ли просто
return ((Value/10)<<4) | (Value%10);
Или это не так эффективно?

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 04:43:42 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Смотря какое ядро. Для Cortex-M0..M3 может и так эффективнее. А для Cortex-M4(f) плевать как.
У последнего числодробилка полноценная. С FPU.
Cortex-M3 умеет делить, но не умеет операции с числами с плавающей точкой.
Cortex-M0 помоему делить не умеет вообще (в смысле, аппаратно)

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 13:56:24 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
Надо измерять. Для 8-битного значения вычитать десятку придется в худшем случае 25 раз, что не так много. Если присутствует аппаратная операция деления, то она тоже далеко не за один такт выполняется, не помню за сколько точно, нужно документ на ядро смотреть. Кроме того там есть операция вычисления остатка от деления. Черт его знает, что там выдаст компилятор, вариантов куча. По идее, он вообще должен заменить деление на константу умножением, тогда последний вариант будет выигрышным, но кто его знает. Надо измерять.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 14:06:05 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
А нех там измерять... Для F0 быстрее будет с вычитанием (аппаратное деление отсутствует)... для остальных с делением...
И нет там никаких "25 раз"...

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 14:16:35 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
HHIMERA писал(а):
Для F0 быстрее будет с вычитанием (аппаратное деление отсутствует)

А если заменить деление на десять на:
Код:
uint8_t div10(uint8_t value)
{
    return ((uint32_t)value * 205) / 2048;
}

??? Измерять надо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 16:21:56 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
Для данного случая... для F0 - произведение лучше... для остальных - нет смысла...

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 16:23:19 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
И для остальных лучше. Умножение плюс сдвиг - два такта, деление - вроде 14, точно не помню.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 19:37:15 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Аппаратный делитель в Cortex-M3/M4 делит за 2...12 тактов.
В M4 имеется поддержка некоторых DSP-инструкций.
Я когда писал под M4 (STM32F439BIT6), то вообще не заморачивался.
Тупо вписывал формулы с использованием float переменных.
На производительности ничего практически не потерял.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Пн июл 28, 2014 23:19:13 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2132
Откуда: Харьков
Рейтинг сообщения: 0
Float мне не надо, только целое 8 или 32 бита.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Вт июл 29, 2014 02:15:11 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Еще одна мелочь. Цикл может породить инструкции косвенного перехода. Хотя, в данном
случае логичнее применить условный или абсолютный переходы, которые конвейеру не страшны.
Но мало-ли что компилятору взбредет.
Инструкции косвенного перехода часто вызывают сброс конвейера инструкций ядра. (промах кеша)
В этом случае, можно нехило так потерять в производительности, что дешевле будет делить аппаратно.
Так что надо это учесть.
Вообще, вот есть книжка на русском по микроконтроллерам STM32 с ядром Cortex-M3
Мартин М. Инсайдерское руководство по STM32
Там описаны такие вещи, как ядро, NVIC, шины, DMA, периферия и прочее.
Это не даташит, а описание архитектуры МК в целом. Как оно работает, из чего состоит и прочее.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Вт июл 29, 2014 07:52:08 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
watchmaker в общем то в реальной жизни такие мелочи оптимизировать не нужно, это капля в море, если же это чисто из академического интереса, то тут все верно написали.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32: деление или вычитание?
СообщениеДобавлено: Вт июл 29, 2014 23:45:48 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2132
Откуда: Харьков
Рейтинг сообщения: 0
Реальная жизнь - это наручные часы на литиевой батарейке с потреблением 6..8 мкА. Так что не исключено, что и это может повлиять.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

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


Кто сейчас на форуме

Сейчас этот форум просматривают: auric, vladant и гости: 24


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y