Board logo

标题: 请教:S12中关于加减乘除运算的问题 恳请大虾指点~~~ [打印本页]

作者: joshua8541    时间: 2006-8-14 01:12     标题: 请教:S12中关于加减乘除运算的问题 恳请大虾指点~~~

第一,关于浮点数的问题。S12中能进行浮点运算吗?如果可以,怎样才能实现呢?需要加那些库函数?头文件?


第二,关于运算位数限制的问题。S12中能进行32位的运算吗(unsigned long)?如果可以,怎样才能实现呢?需要加那些库函数?头文件?


在程序调试过程中,以上两种情况我都试过,结果都不行,单步执行时,程序总是跳出,加上系统提示的头文件也还是不行。


随意现在搞得我是数字不能设得太大,也不能设得太小,不但影响了精度,而且对算法也有很大的限制。


希望哪位大虾能为小弟指点迷津~~~~~


作者: strongchen    时间: 2006-8-14 09:19

在创建PROJECT的时候,有一个选项是是否支持浮点数运算。选上即可。
作者: happysuxin    时间: 2006-8-14 17:50

S12的32位运算偶尔会有bug,从低16位到高16位的进位有时候会有问题。怀疑是C编译器的问题。
作者: joshua8541    时间: 2006-8-14 19:13

斑竹,我重新建立了一个PROJECT,选中了,可是调试时单步执行还是回出现找不到FADD.C,FMUL.C这一类的文件
还请斑竹进一步解答,不胜感激!
作者: joshua8541    时间: 2006-8-14 19:14

32位的我从来就没算对过,不是偶尔啊
作者: happysuxin    时间: 2006-8-15 01:04

看来得用汇编自己写
作者: seuafu2005    时间: 2006-8-15 09:41

编译器应该没有这么弱吧,估计是你运算过程中有些设置没有配置好
可以把你的运算程序帖出来看看么
作者: joshua8541    时间: 2006-8-15 11:44

其实就是很简单的除法,用一个unsigned long除以一个unsigned int,结果赋给一个unsigned int,单步执行到这里的时候程序就会跳出

不知斑竹所说的配置都有哪些方面的?

还有这个浮点运算是不是还要加什么库函数,头文件之类的东西?
作者: strongchen    时间: 2006-8-15 11:59

什么叫程序跳出,怎么跳出?
作者: 307102293    时间: 2006-8-15 14:55

我之前遇到过这种问题,其实S12有32位的除法指令,就是楼主说的那种32位除16位.我拿两个16位数相乘,再除于16位数,就是这种
INT16D = (INT16 A*INT16B) /INT16C
编译出来就是错的,丢弃了高位
改写成这样,就解决了.而且编译的代码是很精简的那种.楼主不妨试一下
INT32D = INT16A
INT32D = INT32D* INT16B
INT32D = INT32D/INT16C
RETURN((INT16)D)
好像这种不是编译错误,是C本身就有这种性质(隐约记得这样),到现在也不是很清楚,还望大虾们给解释清楚.
作者: shpdlizj    时间: 2006-8-15 15:45

计算过程中溢出了,把参与计算的变量都定义成float类型就可以了。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0