Функция преобразует двоичное число в двоично-десятичное. Взята из библиотеки 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!
Надо измерять. Для 8-битного значения вычитать десятку придется в худшем случае 25 раз, что не так много. Если присутствует аппаратная операция деления, то она тоже далеко не за один такт выполняется, не помню за сколько точно, нужно документ на ядро смотреть. Кроме того там есть операция вычисления остатка от деления. Черт его знает, что там выдаст компилятор, вариантов куча. По идее, он вообще должен заменить деление на константу умножением, тогда последний вариант будет выигрышным, но кто его знает. Надо измерять.
Заголовок сообщения: 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: деление или вычитание?
Добавлено: Вт июл 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!
watchmaker в общем то в реальной жизни такие мелочи оптимизировать не нужно, это капля в море, если же это чисто из академического интереса, то тут все верно написали.
Сейчас этот форум просматривают: auric, vladant и гости: 24
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения