Числа внутри типичных микроконтроллеров вообще не имеют десятичных знаков. Это двоичные целые числа. Внутри машины нет десятичной дроби. Компилятор или ассемблер может позволить вам указать константы таким образом, но они преобразуются в двоичные, прежде чем машина их увидит.
Однако вы можете выбрать любые единицы измерения для целочисленных значений. Например, предположим, что вы хотите представить доллары внутри микро. Изначально он не может заработать 3,21 доллара, но может сделать 321 цент. Микро работает только со значением 321, но вы знаете, что оно представляет собой единицы по 1/100 долларов.
Это всего лишь один пример, иллюстрирующий концепцию произвольных единиц. Часто числа представлены несколькими битами двоичной дроби. Это то же самое, что сказать, что каждый счет представляет значение 2 -N , где N - количество битов дроби. Это представление называется «фиксированной точкой». Вы заранее решаете, какое разрешение вам нужно, и делаете вид, что справа от воображаемой двоичной точки достаточно битов для поддержки этого разрешения. Например, допустим, вам нужно представить что-то с разрешением не менее 1/100. В этом случае вы использовали бы по крайней мере 7 битов дроби, так как 2 7 = 128. Это фактически даст вам разрешение 1/128.
Машина не имеет ни малейшего представления, что это происходит. Он сложит и вычтет эти числа как обычные целые числа, но все по-прежнему работает. Это становится немного сложнее, когда вы умножаете и делите значения с фиксированной точкой. Произведение двух значений с фиксированной точкой с N битами дроби будет иметь 2N битов дроби. Иногда вы просто отслеживаете тот факт, что новое число имеет 2N битов дроби, или иногда вы можете сдвинуть его вправо на N битов, чтобы вернуться к тому же представлению, что и раньше.
Плавающая точка - это то же самое, но число битов дроби сохраняется вместе с целочисленной частью, так что эту настройку можно выполнить во время выполнения. Выполнение математических операций над числами с плавающей запятой может занять несколько циклов. Аппаратные средства с плавающей точкой делают все это для вас, чтобы операции завершались быстро. Однако те же манипуляции могут быть выполнены и в программном обеспечении. Нет причины, по которой вы не можете написать подпрограмму для добавления двух чисел с плавающей запятой, просто это займет гораздо больше времени, чем выделенное оборудование, выполняющее ту же самую вещь.
Я определил 3-байтовый формат с плавающей запятой для 8-битных PIC и написал несколько подпрограмм для управления ими. Микроконтроллеры обычно работают с реальными значениями с точностью до 10 или 12 бит. Мой формат с плавающей запятой использует 16 бит точности, что достаточно для нескольких промежуточных вычислений.
У меня также есть 32-битный формат для 16-битных PIC. Это использует одно 16-битное слово для мантиссы, что ускоряет вычисления, поскольку эти PIC могут работать с 16 битами одновременно.
Эти процедуры включены в мою версию PIC Development Tools . После установки посмотрите на файлы с «fp24» в их имени в каталоге SOURCE> PIC и «fp32f» в каталоге SOURCE> DSPIC.