硬汉嵌入式论坛

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

[MDK] 默认编译选项的严重危害。。。

[复制链接]

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
发表于 2015-4-5 15:32:04 | 显示全部楼层 |阅读模式
MDK4.74版本,今天折腾一天才发现一个严重问题。

这个程序已经用了快一年了,默认配置没有更改,但是在不断的加入新功能。今天加入了几个串口的通讯指令,就出现了莫名的问题。
新的串口指令只要一接收,emwin界面的一个控件就停止刷新了,而其他十几个控件却正常。跟踪变量发现,界面数据都在正常变化,但是控件的句柄出现问题。
单片机复位后,该句柄的值为0x000000000e,串口执行某个命令后,句柄就变为了0x00000000。所以就刷新不了。。。。。
捣腾半天,增加stack和heap也没有效果。此句柄以前是全局变量,定义在main文件中,这次改为窗口的c文件中,加入static标识,就一切正常了!!哪位资深程序员知道缘故?

还有,串口接受数据三五十个,没问题。接受到100个就显示接受了几百个。。。中间插入了大量的零。。。使用调试模式,单步追踪,step over line在串口程序中乱跳,无法跟踪问题。
最后把编译选项由default改为level0,debug模式下step over line可以正常跳转到每一行,所有问题就都正常了。
ScreenHunter_119 Apr. 05 15.15.jpg

My GOD! 结论是,debug模式跳转不正常,就看看编译选项。。。。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2015-4-5 16:33:05 | 显示全部楼层
你的第一个问题,我没有太明天你是怎么改的。

第二个问题是有文档根据的,看这个帖子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=1794
1.jpg
回复

使用道具 举报

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
 楼主| 发表于 2015-4-5 22:08:05 | 显示全部楼层

回 eric2013 的帖子

eric2013:你的第一个问题,我没有太明天你是怎么改的。

第二个问题是有文档根据的,看这个帖子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=1794

(2015-04-05 16:33)
感谢回复!原来default模式下,硬件调试受限啊。。。
我估计是编程习惯不好,中断函数中使用的变量,一般没有用volatile 关键字修饰,只是定义为全局变量,所以默认优化后就有莫名其妙的问题。

第一个问题是很奇怪,比如只有两个文件main.c和windowA.c。 一个控件有一个句柄,在windowA中有用过,在main中也需要用。如果句柄变量定义在main.c中,是全局变量,发现会被莫名更改。如果句柄变量定义在windowA.c中,可以至始至终保持不变。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 20:39 , Processed in 0.160820 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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