lanjackg2003 发表于 2015-4-24 15:46

SN8 C Studio_V149(575.049)软件仿真问题

在用SN8 C纯软件仿真时,发现仿真内存的值是正确的,但是断点查看对应位域的变量却一直为0.难道SN8 C不支持两个字节以上的位域结构吗?
一、位域结构定义


二、断点查看,内存值及变量值


三、代码中断点的状况



lanjackg2003 发表于 2015-4-24 15:48

从上面代码来看,RAM中的值AA,刚好就是我代码的值。
但是watch1的变量显示确实不正确的

有没有人遇到这种情况。

ayb_ice 发表于 2015-4-24 15:53

我是没有看懂哪里有问题,

还是先说清楚吧,

lanjackg2003 发表于 2015-4-24 15:59

ayb_ice 发表于 2015-4-24 15:53
我是没有看懂哪里有问题,

还是先说清楚吧,

g_SysParam.SysBits.uKeyVal与g_SysParam.SysBits.u100msCnt的值

在RAM1中显示AA,那么按照位域的话
g_SysParam.SysBits.uKeyVal与g_SysParam.SysBits.u100msCnt应该为 0xA

但是,从第二张图的watch1的界面看这个两个变量的值
g_SysParam.SysBits.u100msCnt为1
g_SysParam.SysBits.uKeyVal为0

跟RAM中显示的不一致

不知这样讲,楼上能明白吗?

lanjackg2003 发表于 2015-4-24 16:24



其实,我不知道画红线的地方是不是指明了,SN8 C 不支持位域定义超过两个字节.

从目前我这个问题来看,我觉得真的只有这个可能性来解释.

ayb_ice 发表于 2015-4-25 08:09

lanjackg2003 发表于 2015-4-24 15:59
g_SysParam.SysBits.uKeyVal与g_SysParam.SysBits.u100msCnt的值

在RAM1中显示AA,那么按照位域的话


1:不知道你是怎么确定位域与RAM的地址关系的

2:按一般的编译器的结果,那个结构占3个字节,第一个成员占一个字节,下面两个成员占一个字节,最后两个成员占一个字节,不知道你的理解是不是这样的

3:确定是否正确也不是你这样确定的,可以修改一下结构,改为联合看结果
typedef unsigned char        U8;

typedef union{
        U8 of;
       
        struct{
                U8 xx:8;
               
                U8 yy:4;
                U8 yy:4;
               
                U8 aa:1;
                U8 bb:7;
        }bitfield;
       
}t_TEST;

t_TEST t;

FAQ 发表于 2015-4-25 12:40

一般都是硬仿真,纯软的松汉感觉bu kao pu

lanjackg2003 发表于 2015-4-26 22:56

ayb_ice 发表于 2015-4-25 08:09
1:不知道你是怎么确定位域与RAM的地址关系的

2:按一般的编译器的结果,那个结构占3个字节,第一个 ...

是的,跟你的理解一样。
修改为联合体也是这样的问题....

lanjackg2003 发表于 2015-4-26 22:57

FAQ 发表于 2015-4-25 12:40
一般都是硬仿真,纯软的松汉感觉bu kao pu

嗯....
买个硬件仿真的回来试试.....
看来还是 不能省。。。:'(

FAQ 发表于 2015-4-27 00:09

lanjackg2003 发表于 2015-4-26 22:57
嗯....
买个硬件仿真的回来试试.....
看来还是 不能省。。。

硬件仿真器不便宜啊,几百块钱。比什么STLINK贵多了。

lanjackg2003 发表于 2015-4-27 09:49

FAQ 发表于 2015-4-27 00:09
硬件仿真器不便宜啊,几百块钱。比什么STLINK贵多了。

是啊,发现还是ST厚道.每颗芯片支持仿真...

liufb 发表于 2015-4-27 15:29

8bit参数也用位域,这么折腾?一直用硬仿真,用松翰C也做了好几个项目,没返现有问题啊,也有有用到位域。

lanjackg2003 发表于 2015-4-28 09:49

FAQ 发表于 2015-4-25 12:40
一般都是硬仿真,纯软的松汉感觉bu kao pu

硬件仿真,结果也是一样...
从watch看变量值与RAM看变量值都不一样

但是后面增加一些条件判断,相应的条件都能进入.估计是这个IDE软件的问题了

伪代码类似如下
if(keyVal == 10)
{
   keyVal = 0;   /////在此断点,程序能够跑进来.
}

zdesong 发表于 2015-11-25 13:34

请问怎样设置纯软件调试?谢谢

攻城狮008 发表于 2021-6-3 15:03

SN8 C Studio_V149这个版本的软件可以分享一下么
页: [1]
查看完整版本: SN8 C Studio_V149(575.049)软件仿真问题