硬汉嵌入式论坛

 找回密码
 立即注册
查看: 262|回复: 4
收起左侧

[IAR] IAR9.30.1无优化if语句判断错误的怪异问题

[复制链接]

0

主题

34

回帖

34

积分

新手上路

积分
34
发表于 2024-5-21 11:58:21 | 显示全部楼层 |阅读模式
本帖最后由 沉醉东风 于 2024-5-21 12:06 编辑


这几天使用IAR9.30.1调试MIMXRT1024遇到个奇怪的问题,不知道大家有没有类似的经历。
问题描述:使用IAR9.30.1无优化的情况单步调试发现,也就是优化选项为:none。if语句的条件判断本是不成立的,却执行了if语句主体,但是执行了if语句主体,相应的值却没有发生变化。
大致是从Flash的某个地址读取参数,判断参数是否对,对的话,就执行相应的赋值。
代码部分如下:
#define PARAMT_ADDR              0x60018000
void _csCSE::Init(void)
{
    tpCSE_Paramt_t tpParamt = (tpCSE_Paramt_t)PARAMT_ADDR;
    if(tpParamt->ucId && (0xff != tpParamt->ucId))
    {
        csAddr.ucCSE_Id = tpParamt->ucId;
    }
    else {}
   
    if(tpParamt->ucSize && (0xff != tpParamt->ucSize))
    {
        csAddr.ucSize = tpParamt->ucSize;
    }
    else {}
}

if(tpParamt->ucId && (0xff != tpParamt->ucId))和 if(tpParamt->ucSize && (0xff != tpParamt->ucSize))是不成立的,IAR单步执行判断正确,执行了if语句的主体,但是却没有执行成功。附件是我调试的动态gif图。
单独调试看,虽然执行了两次错误,但是并没有影响最终的结果。
注:使用C和C++混合编程,MCU为MIMXRT1024,

IAR9.30.1的怪异问题.gif
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107852
QQ
发表于 2024-5-21 15:16:56 | 显示全部楼层
不使用调试,这个if里面加个打印,打印下ucID和ucSize的值,实际下载看看执行了没。这个时候有必要以程序实际运行为准了。
回复

使用道具 举报

0

主题

34

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-5-29 16:42:06 | 显示全部楼层
这个问题后来找到原因了,我来结贴,万一有人遇到类似的问题,也好给个参考。原因是我擦除Flash并写入参数后,去读取或者使用memcpy读取Flash的内容,得到的都不是flash中的真实数据,而是cache中的数据,所以发的gif图片中定义了一个指针,直接指向flash的地址,调试的时候IAR读取的数据是cache中的数据,而不是真实的flash的数据。关闭cache或者清除洗这个地址的无效数据后,再去读flash就没问题了。实测下来,只要对flash进行了擦除或者写操作后,再读flash如果不清cache,得到的都不是刚刚写入的数据。flash的擦除和写入是对的,只是读取的时候得到的数据是cache中的。
回复

使用道具 举报

0

主题

34

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-5-29 17:11:46 | 显示全部楼层
另外这个芯片内部的flash比较特殊,不是真正的内部flash,通常MCU内部的flash都是并行nor flash,直接通过地址总线和数据总线访问,这个MCU内部的flash是封装了一个华邦的W25Q32的SPI Nor flash,其实就是两个晶圆封装一起,然后内核和flash通过SPI连接。只是支持XIP,所以代码可以直接放在华邦的SPI flash中并执行,但是它不支持RWW,写和擦除的时候有点麻烦。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107852
QQ
发表于 2024-5-30 08:46:40 | 显示全部楼层
沉醉东风 发表于 2024-5-29 16:42
这个问题后来找到原因了,我来结贴,万一有人遇到类似的问题,也好给个参考。原因是我擦除Flash并写入参数 ...

谢谢告知最终问题原因。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-16 01:57 , Processed in 0.262995 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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