硬汉嵌入式论坛

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

[emWin] KEIL优化等级引起的错误

[复制链接]

16

主题

31

回帖

79

积分

初级会员

积分
79
发表于 2019-10-12 11:08:03 | 显示全部楼层 |阅读模式
因为数据错误出在emwin这部分,所以发帖在这。
我的emwin中有一static变量static signed short int iyear=19;用作显示“年份2019”,PC上仿真时没有问题,点击按钮可正常的加或减,移植入RT1052上时,此变量出现了不可预知的数据。

将keil优化等级由level 0改为default后一切正常。附件中截图是两种level下仿真数据。

这是为什么呢?我哪里做的有问题,理论上level 0优化的更少。
level0.png
level2.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115785
QQ
发表于 2019-10-12 12:47:20 | 显示全部楼层
应该是程序不耐优化导致的,要排查下。
回复

使用道具 举报

6

主题

122

回帖

140

积分

初级会员

积分
140
发表于 2019-10-12 15:50:22 | 显示全部楼层
static signed short int 这样的定义方式是不是由问题
回复

使用道具 举报

16

主题

31

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2019-10-13 14:11:52 | 显示全部楼层
dy84082666 发表于 2019-10-12 15:50
static signed short int 这样的定义方式是不是由问题

设置为只有本文件可用的16位数据,这样用有问题?
回复

使用道具 举报

6

主题

122

回帖

140

积分

初级会员

积分
140
发表于 2019-10-14 10:20:45 | 显示全部楼层
lyw851230 发表于 2019-10-13 14:11
设置为只有本文件可用的16位数据,这样用有问题?

static 定义没有任何问题,但后面的 signed short int 定义没看懂。int 型为32位的。
回复

使用道具 举报

8

主题

42

回帖

71

积分

初级会员

积分
71
发表于 2019-10-14 22:15:38 | 显示全部楼层
只要开启优化哪怕O1也不具备调试的意义了(因为变量可能在寄存器中而不是在RAM中),只能通过串口打印的方式查看变量了,
所以只有在O0状态下,代码才能生成配合仿真器读取变量的代码
另外代码的不规范导致优化过程中出现异常现象,如共享变量的访问、变量未彻底初始化访问等等,都会体现出来
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 09:45 , Processed in 0.296320 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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