查看: 4178|回复: 5

[CodeWarrior] CW10.6 优化错误?

[复制链接]

该用户从未签到

48

主题

141

帖子

1

中级会员

Rank: 3Rank: 3

积分
385
最后登录
2020-8-7
发表于 2018-9-27 16:33:20 | 显示全部楼层 |阅读模式
本帖最后由 njhuangyuan 于 2018-9-27 16:36 编辑

一段很简单的程序,简单的浮点数运算,然后把值用通讯发出去。这个文件不优化的时候没问题,优化后浮点数就随机出错,有时候变成无效数据,有时候变很大的数据。这个是啥原因?
void samptosendbuff(uint8* m_ptr,uint8 n)
{
        uint32 ldate;
        uint16  udata;
        uint16 *uptr;
        uint8  j,point;
        float m_fVar;
        uptr=(uint16*)&Sample;
        ldate=uptr[n+1];
        ldate<<=16;
        udata=uptr[n];
        ldate+=udata;               
        if((ldate&0x80000000)!=0)
        {
                ldate=-ldate;
                m_fVar=ldate;
                m_fVar=m_fVar*(-1.0);               
        }
        else
                m_fVar=(float)ldate;
        point=2;
        for(j=0;j<point;j++)
        {
                m_fVar/=10.0;
        }
        gen_print_float(m_ptr, m_fVar);        //把浮点数放到m_ptr指向的缓冲区
        //本文件设置不优化时m_fVar完全正常,但是一旦设置优化(None(-O0),m_fVar就随机的出错,有时候无效,有时候非常大的值。用其它方式调试过ldate的值是确定对的,也没有负数出现
}

最佳答案

副作用主要为:变量可能会被意想不到地改变,但是优化器在用到这个变量时却是使用的保存在寄存器里的备份,你可以去百度或谷歌一下具体案例。
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24891
最后登录
2025-7-21
发表于 2018-9-27 16:50:49 | 显示全部楼层
这应该是编译器优化的副作用,你可以去网上百度一下编译优化的副作用情况,会讲得更详细也有一些避免的小技巧
回复 支持 反对

使用道具 举报

该用户从未签到

48

主题

141

帖子

1

中级会员

Rank: 3Rank: 3

积分
385
最后登录
2020-8-7
 楼主| 发表于 2018-9-27 17:00:58 | 显示全部楼层
      主要问题是我这段程序我单独放了一个文件设置不优化可以,但是我其它程序我都不敢保证没问题了。
      我的程序写得也没发现有问题。CW10.6有debug和release两个编译版本,最终版我肯定设置成release,但是现在有点怕了。
      以前遇到在IO口处理上编译优化会有些问题,这个我好理解,但是我这段程序实在不了解为什么有副作用,这是一段很普通的程序。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24891
最后登录
2025-7-21
发表于 2018-9-28 09:38:02 | 显示全部楼层
副作用主要为:变量可能会被意想不到地改变,但是优化器在用到这个变量时却是使用的保存在寄存器里的备份,你可以去百度或谷歌一下具体案例。
回复 支持 反对

使用道具 举报

该用户从未签到

48

主题

141

帖子

1

中级会员

Rank: 3Rank: 3

积分
385
最后登录
2020-8-7
 楼主| 发表于 2018-9-29 11:40:19 | 显示全部楼层
好像不是优化问题,不优化也有这个现象出现,只是出现几率低一些。同样的程序又做了一台设备,运行了半天,以前有问题的板子已经出现好多次错误了,新板子还没出现问题。在继续运行1、2天确认一下,如果是CPU本身的问题就是破天荒了,10几年开发第一次发现CPU会有这样的问题。这个问题与软件及外围电路没有任何关系。我用的是MK64FN1M0VLQ12 ,这个片子是否成熟?
回复 支持 反对

使用道具 举报

该用户从未签到

48

主题

141

帖子

1

中级会员

Rank: 3Rank: 3

积分
385
最后登录
2020-8-7
 楼主| 发表于 2018-10-8 21:25:32 | 显示全部楼层
问题已解决。是任务表里面要加MQX_FLOATING_POINT_TASK,这样就可以把浮点数压栈,否则可能出问题。

评分

参与人数 1 +1 收起 理由
NXP管管 + 1 结帖奖励

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-22 01:36 , Processed in 0.106739 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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