打印
[STM8]

STM8调试问题

[复制链接]
2985|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LSLDAY|  楼主 | 2017-8-10 18:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
P应该等于0的为什么P==1了 ?  但q的值是0,

QQ截图20170810184022.png (34.21 KB )

QQ截图20170810184022.png
沙发
flove00| | 2017-8-11 09:15 | 只看该作者
为啥我仿真的时候只能看全局变量呢?应该怎么设置可以看局部变量?

使用特权

评论回复
板凳
lin_strong| | 2017-8-11 10:26 | 只看该作者
你把P初始化为0,看下P是不是还是0,如果是0的话,
那之前的不为0的是编译器有可能没有将p初始化为0。

使用特权

评论回复
地板
crystal1987| | 2017-8-11 13:17 | 只看该作者
你定义变量都不给初始化,有些编译器定义的变量初始值不一定是0;而是默认的地址里面数据。

使用特权

评论回复
5
戈卫东| | 2017-8-11 13:30 | 只看该作者
管脚电位变了?

使用特权

评论回复
评论
LSLDAY 2017-8-15 17:26 回复TA
没变,老哥 ,您看看我13楼截图,不知道哪里的原因 
6
172024039| | 2017-8-11 17:42 | 只看该作者
收内存使用影响,局部变量的值是不准确的,请用全局变量,应该没问题。

使用特权

评论回复
7
LSLDAY|  楼主 | 2017-8-15 11:20 | 只看该作者
crystal1987 发表于 2017-8-11 13:17
你定义变量都不给初始化,有些编译器定义的变量初始值不一定是0;而是默认的地址里面数据。 ...

嗯,但是后面我给p赋值了啊,都执行完成赋值语句了 但是值不对

使用特权

评论回复
8
LSLDAY|  楼主 | 2017-8-15 11:21 | 只看该作者
flove00 发表于 2017-8-11 09:15
为啥我仿真的时候只能看全局变量呢?应该怎么设置可以看局部变量? ...

不用设置吧  你直接在Variable下面的框里输入局部变量的名字,只要在执行这个函数就能看了啊

使用特权

评论回复
9
LSLDAY|  楼主 | 2017-8-15 11:29 | 只看该作者
172024039 发表于 2017-8-11 17:42
收内存使用影响,局部变量的值是不准确的,请用全局变量,应该没问题。

额,什么意思,没太懂,这里不能用局部变量吗?

使用特权

评论回复
10
LSLDAY|  楼主 | 2017-8-15 11:54 | 只看该作者
lin_strong 发表于 2017-8-11 10:26
你把P初始化为0,看下P是不是还是0,如果是0的话,
那之前的不为0的是编译器有可能没有将p初始化为0。 ...

额 。就算没初始化导致P==1,但执行完后面给P赋值的语句,P应该==0了啊,郁闷

使用特权

评论回复
11
zzjj44| | 2017-8-15 12:55 | 只看该作者
楼主看看你对P的赋值语句,第一个位或,值至少是0x03,取反以后,最大是0xfc,后面两个,也是类似道理,只有当第一个逻辑或为0时,你的P才等于0,实际上,对于非static变量,编译器给它的值是任意的(这个任意可以把0除外,你可以做一个实验,在KEIL4中建立若干个非静态变量,99%不初始化为0),所以,你这个赋值的逻辑或值永远为1.

使用特权

评论回复
12
LSLDAY|  楼主 | 2017-8-15 15:21 | 只看该作者
zzjj44 发表于 2017-8-15 12:55
楼主看看你对P的赋值语句,第一个位或,值至少是0x03,取反以后,最大是0xfc,后面两个,也是类似道理,只有 ...

不对啊,老哥,  我有括号的啊,p=((~(PD_IDR|0x03)) || (~(PI_IDR|0x3f)) || (~(PE_IDR|0xfe)));先算括号里的最大都是0xff;然后再逻辑或||   所以有可能是0 的啊   

使用特权

评论回复
13
LSLDAY|  楼主 | 2017-8-15 15:36 | 只看该作者
本帖1L的图没截图完全,导致很多朋友有疑惑,现在重新截图完整,大家注意下截图里j,k,l,m,n,这几个变量的表达式和值,当q=k||m||o ;q==0;   但是
p=((~(PD_IDR|0x03)) || (~(PI_IDR|0x3f)) || (~(PE_IDR|0xfe)))  时   P!=0;   问题就出在这里

重新截图.png (331.46 KB )

重新截图.png

使用特权

评论回复
14
zzjj44| | 2017-8-15 15:39 | 只看该作者
LSLDAY 发表于 2017-8-15 15:21
不对啊,老哥,  我有括号的啊,p=((~(PD_IDR|0x03)) || (~(PI_IDR|0x3f)) || (~(PE_IDR|0xfe)));先算括 ...

这个表达式右值只有三个同时为0,左值才为0,在你不能保证它们同时为0的情况下,你怎么能想P就是0呢!写程序,千万不要有“有可能”的情况,代码少就算了,大型项目要累死的!

使用特权

评论回复
15
linxiyzhi| | 2017-8-15 15:39 | 只看该作者
楼主对于p赋值的语句感觉括号不对啊,能不能把整个语句贴出来?

使用特权

评论回复
16
LSLDAY|  楼主 | 2017-8-15 17:15 | 只看该作者
zzjj44 发表于 2017-8-15 15:39
这个表达式右值只有三个同时为0,左值才为0,在你不能保证它们同时为0的情况下,你怎么能想P就是0呢!写 ...

嗯 这个我知道 右值三个同时为0   左值才等于0;  但这里我保证  ~(PD_IDR|0x03);      ~(PI_IDR|0x3f);                ~(PE_IDR|0xfe);    这三个表达式都是0的。老哥你看我13楼截图,变量里K,M,O  三个变量都为0对吧  ,
        p=((~(PD_IDR|0x03)) || (~(PI_IDR|0x3f)) || (~(PE_IDR|0xfe)));   和  p=k||m||o;   是等价的啊,为什么P展开他的表达式就不等于0了?  老哥可以仔细看下13楼截图  j,k,l,m,n,o,p  这个几个变量的表达式

使用特权

评论回复
17
LSLDAY|  楼主 | 2017-8-15 17:17 | 只看该作者
linxiyzhi 发表于 2017-8-15 15:39
楼主对于p赋值的语句感觉括号不对啊,能不能把整个语句贴出来?

老哥  你说的是这个吗   p=((~(PD_IDR|0x03)) || (~(PI_IDR|0x3f)) || (~(PE_IDR|0xfe)));      全都贴出来了啊

使用特权

评论回复
18
LSLDAY|  楼主 | 2017-8-15 17:20 | 只看该作者
zzjj44 发表于 2017-8-15 15:39
这个表达式右值只有三个同时为0,左值才为0,在你不能保证它们同时为0的情况下,你怎么能想P就是0呢!写 ...

13楼截图里的  q 的表达式展开是和 p  的相同的   但是p和q的值就是相反 ,所以一直没弄清楚怎么回事,难道是表达式逻辑没弄清?还是调试器有问题?

使用特权

评论回复
19
LSLDAY|  楼主 | 2017-8-15 17:20 | 只看该作者
linxiyzhi 发表于 2017-8-15 15:39
楼主对于p赋值的语句感觉括号不对啊,能不能把整个语句贴出来?

老哥,你看我的13楼截图  全贴出来了

使用特权

评论回复
20
LSLDAY|  楼主 | 2017-8-15 17:26 | 只看该作者

没变,老哥 ,您看看我13楼截图,不知道哪里的原因

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

288

帖子

5

粉丝