I want to multiply two fixed point numbers. After the multiplication I have to shift the result so that the binary point is correct.
Example:

int a;
int b;
int c;
c = (a * b) >> 10

The multiplication a*b produces a long int value in the MD register. After the shift operation the int result (the lower byte) should be stored in c.
My problem is how to use then 32-bit MD register. When I look at the assembler code only the lower byte of the MD register is used for the shift operation, but I first I want to shift the whole register and then take only the lower byte.
How can I implement that in C? Who knows an application note about fixed-point arithmetic with the C166?

 
Read-Only
Author
Andrew Neil
Posted
22-Oct-2003 09:34 GMT
Toolset
C166
 RE: Fixed-point multiplication

I don't know the '166, but I suspect this is a 'C' issue rather than a processor issue.

You could look up the promotion rules in K&R, or you could just try experimenting with casting a, b, and/or the product to long.

 
Read-Only
Author
Mike Kleshov
Posted
22-Oct-2003 09:56 GMT
Toolset
C166
 RE: Fixed-point multiplication

As Andrew said, this is a C issue. Take your favourite book on C and read about types and expressions. There are a few pitfalls there.
If both operands a and b are of type int, then the product (a * b) will be of type int, which is not what you are expecting. If you want the result to be of type long, try ((long)a * b): it will suffice to cast one of the operands to long.
Make sure you take care of overflows and that you understand the differences between signed and unsigned arithmetics.

- mike

 
Read-Only
Author
Bruno Büsser
Posted
22-Oct-2003 10:45 GMT
Toolset
C166
 RE: Fixed-point multiplication

That's it!
The following line produces just what I wanted:
c = ((long)a * b)>>10;

The product a*b is stored as 32 bit value in MD register, then the MD register value is arithmetic shifted right by 10 and the lower 16 bits stored in c.
Thanks to Andrew and Mike!

http://www.keil.com/forum/3549/

Fixed-point multiplication (C166 A*B/B)的更多相关文章

  1. ADC In An FPGA

    http://davidkessner.wordpress.com/2011/05/01/adc-in-an-fpga/ Geek Alert!  What follows is very techn ...

  2. c166 -div

    unsigned short a=10; unsigned short b; unsigned short c;unsigned long d; b = (unsigned short)(d/2400 ...

  3. Position属性四个值:static、fixed、relative、absolute的区别和用法

    1.static(静态定位):默认值.没有定位,元素出现在正常的文档流中(如果设置 top, bottom, left, right, z-index这些属性就不起做作了). 2.relative(相 ...

  4. fixed数据类型

    在处理图形运算,特别是3D图形生成运算时,往往要定义一个Fixed数据类型,我称它为定点数,定点数其时就是一个整形数据类型,他的作用就是把所有数 进行转换,从而得到相应类型的整型表达,然后使用定点数进 ...

  5. CSS:position:fixed使用(转)

    position属性规定元素的定位类型,即建立元素布局所用的定位机制.任何元素都可以定位,不过绝对定位或固定定位元素会生成一个块级框,而不论该元素本身是什么类型.相对定位元素会相对于它在正常流中的默认 ...

  6. setprecision **fixed

    #include <iostream> #include <iomanip> using namespace std; int main( void ) { const dou ...

  7. Position属性四个值:static、fixed、absolute和relative的区别和用法

    Position属性四个值:static.fixed.absolute和relative的区别和用法 在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolu ...

  8. iframe中positioin:fixed失效问题

    页面中嵌套的iframe 内的 position:fixed元素定位失效fixed正常页面 此时position:fixed是根据浏览器窗口定位的,下拉一直位于左上角:以iframe形式嵌入后 此时p ...

  9. setprecision、fixed、showpoint的用法总结

    首先要加头文件:iomanip 一:setprecision 作用:控制输出流显示浮点数的数字个数,setprecision(n)就是输出的n个数,会有四舍五入. 比如:double s=20.784 ...

随机推荐

  1. day 71-72 cookie 和session

    拓展知识   request---->请求信息 属性: request.path       # 获取访问文件路径 request.method属性 #获取请求中使用的HTTP方式(POST/G ...

  2. MySQL:常用的数据模型

     常用的数据模型 一.定义 数据模型是对现实世界数据特征的抽象:通俗的讲数据模型就是现实世界的模拟: 数据模型是严格定义的一组概念的集合 是用来抽象.表示和处理现实世界中的数据和信息的工具 是对现实世 ...

  3. Nginx 自动补全url地址补全最后的斜线

    参考地址: http://blog.csdn.net/dong123dddd/article/details/51660368 location /riskcontrol { root /data; ...

  4. 自动化测试-20.selenium之FireFox下载项配置

    前言: 当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置 ...

  5. Vue 之 element-ui upload组件的文件类型

    在使用element-ui的upload上传组件的时候,有时候会遇到 控制上传文件类型 的需求,只需要配置accept属性为允许的类型即可,比如: <el-upload class=" ...

  6. rtsp 学习之路一

    http://baijiahao.baidu.com/s?id=1587715130853990653&wfr=spider&for=pc https://www.cnblogs.co ...

  7. 终极C语言指针

    // ex1.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...

  8. [link] 构建负载均衡服务器之一 负载均衡与集群详解

    一.什么是负载均衡 首先我们先介绍一下什么是负载均衡: 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载, ...

  9. C++ 中时钟函数的使用

    头文件: #incllude <time.h> 定义: clock_t var1, var2; 获取时间: var1 = clock(); 每过千分之一秒(1毫秒),调用clock()函数 ...

  10. markdown-to-html.min.js

    直接改成  false 不执行这里 不然异步了