查看: 2382|回复: 9

[其他] 计算溢出问题

[复制链接]

该用户从未签到

8

主题

26

帖子

0

注册会员

Rank: 2

积分
88
最后登录
2015-7-29
发表于 2015-7-29 09:09:51 | 显示全部楼层 |阅读模式
用的是MC56F84462的芯片,两个long型数据相乘,运算结果超过32位,强制转化为long long型还是溢出,这款芯片是支持64位整形运算的,本人菜鸟一枚,跪求大神指导如何实现64位运算
我知道答案 目前已有9人回答

评分

参与人数 1NXP金币 +10 收起 理由
小七 + 10 打赏!

查看全部评分

回复

使用道具 举报

该用户从未签到

0

主题

218

帖子

0

中级会员

Rank: 3Rank: 3

积分
472
最后登录
1970-1-1
发表于 2015-7-29 10:57:09 | 显示全部楼层
(1)  Add the '-flag slld' in 'Other Flags' field on the panel < DSP Compiler->Language >.

(2) make use of precompiled MSL and runtime support libraries suffixed with _SLLD (e.g. use "MSL C 56800E smm_SLLD.lib" instead "MSL C 56800E smm.lib" and "runtime 56800E smm_SLLD.lib" instead"runtime 56800E smm.lib")

(3) add  * (ll_engine.text) to code section in linker command file
回复 支持 1 反对 0

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-7-29 09:46:16 | 显示全部楼层
    计算的时候,在变量前面再加一个试试。
    b=(long long)a*(long long)c;
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    26

    帖子

    0

    注册会员

    Rank: 2

    积分
    88
    最后登录
    2015-7-29
     楼主| 发表于 2015-7-29 10:03:20 | 显示全部楼层
    安 发表于 2015-7-29 09:46
    计算的时候,在变量前面再加一个试试。
    b=(long long)a*(long long)c;

    试过这种方式了,还是会溢出,我看了利用long long强制转化后的汇编,与没有强制转化是一样的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    26

    帖子

    0

    注册会员

    Rank: 2

    积分
    88
    最后登录
    2015-7-29
     楼主| 发表于 2015-7-29 10:09:25 | 显示全部楼层
    安 发表于 2015-7-29 09:46
    计算的时候,在变量前面再加一个试试。
    b=(long long)a*(long long)c;

    在相关的DSP说明中有看到:IMPY64 — Integer multiply 32 bits x 32 bits → 64 bits,但不知道具体该如何实现
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-7-29 10:18:26 | 显示全部楼层
    没用过这个系列。只能测试一下。。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-4 16:56
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    602

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1842
    最后登录
    2020-8-25
    发表于 2015-7-29 10:55:31 | 显示全部楼层
    试试
    1. long long a=100;
    2. long long b=200;
    3. long long c = a*b;
    复制代码
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    218

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    472
    最后登录
    1970-1-1
    发表于 2015-7-29 10:59:13 | 显示全部楼层
    对于MC56F84462来说,有两种方法做32位数乘法,一种是使用56800EX assembly instruction,还有一种是上面这张方法,使能64位操作的编译选项和替换库文件。具体方法可以在DSC compiler manual中找到。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
    发表于 2015-7-29 12:47:11 | 显示全部楼层
    学习了!
    回复

    使用道具 举报

    该用户从未签到

    8

    主题

    26

    帖子

    0

    注册会员

    Rank: 2

    积分
    88
    最后登录
    2015-7-29
     楼主| 发表于 2015-7-29 16:37:01 | 显示全部楼层
    FSL_TICS_Fiona 发表于 2015-7-29 10:59
    对于MC56F84462来说,有两种方法做32位数乘法,一种是使用56800EX assembly instruction,还有一种是上面这 ...

    解决了,太感谢啦!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 00:31 , Processed in 0.111740 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表