打印

Keil for ARM 全局变量定义为结构体时 数值跳FF

[复制链接]
1708|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Yurnero_72|  楼主 | 2015-6-1 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题是这样的typedef struct _ChRGCOM_
{
        uint32_t        A;                                                                               
        uint32_t         B;                                                              
        uint32_t        C;                                                                               
        uint32_t         D;                                 
        uint32_t        E;                                                                               
}CHRGCOM;
程序里上面定义了一个全局的结构体,ABCDE分别为不同通信的计时器,正常待机状态下不对C、D、E进行操作,只对A,B进行操作,此A,B能自动计数,自动清零,C,D,E正常显示为0。当程序进入工作状态时,开始对C开始进行计数(A,B也要工作),此时A,C能够正常计数清零,虽然也能够正常计数清零,但B会时不时出现FF FF FF FF,C,D为保留,正常待机时显示为0,进入工作状态时为FF FF FF FF。
后来将B拉出来设一个单独的全局变量F作为计数,不管何种状态F都能正常计数和清零,不会出现上述的时不时跳FF FF FF FF,但是此时观察结构体中,B的值在待机状态与D E一样都显示00 00 00 00,在工作状态下也与D E一样显示FF FF FF FF。
最后将B拉出重新定义了个结构体,此时有两个结构体,一个原先的(含有A,B’,C,D,E,但B‘,D,E为保留,就是不使用),一个新建的(含有A‘,B,C',D,E'


相关帖子

沙发
Yurnero_72|  楼主 | 2015-6-1 16:29 | 只看该作者
正常待机状态下,新建的结构体中的B显示正常,A’,C‘,D’,E’显示为00 00 00 00。原先的结构体也显示正确,但工作后,新建的结构体中B的显示依然时不时跳出FF FF FF FF,同时A‘的值变为FF FF FF FF,但C',D',E'显示为00 00 00 00
可能说的比较乱 希望各位帮忙 先谢谢了 有不清楚的 可以提出来

使用特权

评论回复
板凳
mcu5i51| | 2015-6-1 17:57 | 只看该作者
是很乱;
你的程序是如何操作这个结构体的,可能的话,单步找一下,看看有没有别个情况,溢出,冲突等

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
Yurnero_72 + 3
地板
Yurnero_72|  楼主 | 2015-6-1 20:34 | 只看该作者
mcu5i51 发表于 2015-6-1 17:57
是很乱;
你的程序是如何操作这个结构体的,可能的话,单步找一下,看看有没有别个情况,溢出,冲突等 ...

你好,感谢你的回复,结构体中的五个部分分别是五个通讯的超时计数器,ARM发送通信指令后,开始计时,五个之间没有联系,现在怀疑是当结构体中的五个部分中一个自加时,出现结构体中的其他部分受到影响,我想问问有没有这种可能,因为程序我查了好多遍没有互相影响的地方,溢出的话一般我观察了下因为到了指定值,超时计数器会置标志位,所以溢出的可能性比较小,因为最大的指定值为800,一般不会超过100。后来问了别的工程师,说是keil编译的问题,但我看了程序中别的结构体却没有出现这种问题

使用特权

评论回复
5
mcu5i51| | 2015-6-2 08:10 | 只看该作者
通讯的超时计数器,是不是说在程序中有可能在中断和主体中都有可能用到这个结构体,有没有访问冲突

使用特权

评论回复
6
Yurnero_72|  楼主 | 2015-6-2 15:53 | 只看该作者
mcu5i51 发表于 2015-6-2 08:10
通讯的超时计数器,是不是说在程序中有可能在中断和主体中都有可能用到这个结构体,有没有访问冲突 ...

问题解决了 谢谢你的帮忙 问题是这样的 有个全局数组 定义为40个,用来接受报文的,但这个报文可能不止40个,同时地址分配时,这个数组的结束地址下一个地址正好是我的结构体的开始地址,具体为什么报文不止40个还在看,最后谢谢帮忙。

使用特权

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

本版积分规则

3

主题

87

帖子

0

粉丝