momo_li 发表于 2023-11-25 23:29:46

IAR汇编的离谱错误, 会是和谐版的坑吗?

使用IAR8.50.69.20.19.40.1三个版本编译同一段代码, 就是简单的赋值语句,结果8.50.6结果是正确的, 两个高版本直接把第一个赋值语句编译成了矩阵运算汇编,后面几个赋值语句正确.
几个版本的优化选项全部都是none, 后来为了验证代码编写问题,就使用的更简单的方法验证汇编结果
IAR9.40.1 在代码中插入了几个NOP,好家伙,每个插入的nop都被编译成了不同的语句, 看上去很高级的汇编指令, 上网都不好搜的那种
奇怪的是,每个代码文件独立生成的汇编文件中,编译的结果是对的, 下载到单片机中最终的汇编代码却是错的. 低版本好像就没这个问题. 新版本BUG?感觉不可能呀, 和谐不完整的坑?但是编译却没有授权的报错?
大佬给看看吧{:cry:}


momo_li 发表于 2023-11-25 23:30:55

调试运行窗口的汇编代码, NOP的数量都不对, 比源代码文件少了一个

dukelec 发表于 2023-11-26 08:10:47

差不多十年前用 iar 搞 cc2540 的时候就查出来一个 if 判断的对应的汇编有错误,当时同样怀疑是盗版导致

momo_li 发表于 2023-11-26 10:03:05

dukelec 发表于 2023-11-26 08:10
差不多十年前用 iar 搞 cc2540 的时候就查出来一个 if 判断的对应的汇编有错误,当时同样怀疑是盗版导致 ...
(引用自3楼)

目前还是重点怀疑自己哪里没搞好导致的. 盗版埋坑这种事, 给人的直觉就是编译器有问题, 对于IDE厂家好像也算不上什么好事.
奇怪的是每个文件对应的汇编代码看上去是对的, 下载到单片机内, 在线调试的代码就发生了变化.
好像是将每个文件的汇编代码,组合最终成品的时候出了问题. 这就是所谓的编译器链接过程嘛.

zchong 发表于 2023-11-26 14:01:15

偷偷优化了?{:lol:}

momo_li 发表于 2023-11-26 15:11:41

消耗了两天, 我想大概是破案了, 是因为在下载选项中,没有勾选use flash loader选项.
我理解这个东西是程序的下载算法, 告诉下载器该如何将bin写入mcu.
不勾选的时候, 实际上下载是出错的, 但是IDE没有强烈的提示发生了错误, 仅在debug log中提示了几个警告. 只有再次勾选了verify download之后, 才会弹窗提示错误.
偏偏这个工程就会在上述那个汇编代码出错的地方下载错误. IAR的调试窗口, 显示的汇编文件应该是从flash中回读的, 所以就变成了莫名其妙的代码.
勾选之后下载就正常了.
也就是说,并不是编译出了问题, 而是下载出了问题.
页: [1]
查看完整版本: IAR汇编的离谱错误, 会是和谐版的坑吗?