这到底是什么bug?

问题描述:全局变量,会被莫名其妙更改!打印为50,后面做比较的时候这个值为0了。

第一,我肯定没有犯低级错误,没有其他的更改,搜索全部代码,没有发现这个变量因为我程序问题导致不符合预期,同时找了两位同事检验;第二,volatile肯定是修饰了变量的。

同时在网上搜索了一下,并没有得到满意的答复,但是可以确定的是,在使用keil 对STM32编程的时候,有其他人和我出现了一样的问题。

在国外和国内看到了符合我情况描述,可是最后的原因,我实在不知,也没得到一个满意的答案。

一份程序各个变量跑得好好的,因为增加了代码,然后出现了变量的未知更改。

很荒谬的是,有人说再增加一点代码,它就又能正常跑了。但我确实是这样做了之后,它还真就好了,增加的代码和这个变量无关。

再其次,在使用结构体强制一字节对齐之后,也出现过结构体中的数据不对,之后调整了结构体元素的位置,解决了这个问题,但是我强制一字节对齐,按理说不应该有问题,程序也正常运行了很久,后面增加了代码之后出现了这个问题。依旧迷惑。

我无法理解和解释这个现象。

只能说,之后的强制一字节对齐还是慎用,还有就是遇到C语言语法没有错误的时候,多想想其他办法,看能不能绕过这个问题,先满足目前的需求,当然,我们最后都想知道根本原因,可由于知识的限制。。。

玩ARM的想着单片机的好,玩单片机的时候想着要是arm我就自己完成重定位了。

在学校的时候想着上班,上班了想着学校的好。

对我的这个问题,提出我自己的假设:最可能的还是内存问题,其次操作系统任务切换的问题。希望有一天自己能够明白。

最后说一句,做单片机没有那么简单,做单片机也可以有比较不错的工资,可做单片机,真的没有前途,之后或许不会怎么玩这个了,我还是有追求的!

猜你喜欢

转载自www.cnblogs.com/yangguang-it/p/9292161.html
今日推荐