keil程序问题,定义一个全局整型变量dat=12345,但在变量观察窗口显示却为0.
答案:2 悬赏:0
解决时间 2021-01-19 16:30
- 提问者网友:自食苦果
- 2021-01-19 10:05
keil程序问题,定义一个全局整型变量dat=12345,但在变量观察窗口显示却为0.
最佳答案
- 二级知识专家网友:梦中风几里
- 2021-01-19 11:08
这可能是编译程序优化的结果,实际上,程序没有为存储空间初始化指定的值,数值直接进寄存器了,所以存储空间值为0。如果dat值会被改变,就不一样了,你试试增加一条指令dat=dat*2看看,就有值了。
追问:可以帮我区分下存储空间和寄存器吗?我暂时不是很理解你说的,加了你说的那句话后,dat的初始赋值语句也开始执行了。但只是不明白!
追答:存储空间就是在内存中开辟2个字节存放这个数,寄存器是为了加快运算速度的专用存储单元,比如51系列中的A累加器,B寄存器,R0-R7等,很多。
你可以看看编译后的汇编程序,就知道这个初值放到哪儿去了。
追问:有时跑寄存器,有时跑存储空间。这分别对应什么情况呢?在我根本不清楚的情况下,我试过把dat的定义语句放主函数外面,dat赋值语句同样会执行。dat值也不曾改变啊?但它这却跑存储空间去了,何解?
追答:这个是编译程序生成的结果,编译程序有自己的规则,不需要解释,就像一个运算,是直接用存储空间的值运算还是先送到寄存器,再运算,你是没办法控制的,除非你直接用汇编。其实这个问题也没必要关心,爱放哪儿就那儿吧。
追问:谢了,我们上单片机课,老师留给我们的问题,我们暂时还只上到很肤浅的内容,我以为这个课后“思考题”是已知知识能解决的。我想这个问题确实不应该是自己能理解的。或许只是我们理解复杂化了,或许是我老师把它想简单化了!
追答:可以看看单片机的硬件结构,里面会说到存储结构,如程序存储,RAM和寄存器等。
追问:非常感谢你,我是初学者,请问可以交个朋友吗?希望以后能在程序方面得到你的指点。我的QQ:646743653
追答:好的
追问:可以帮我区分下存储空间和寄存器吗?我暂时不是很理解你说的,加了你说的那句话后,dat的初始赋值语句也开始执行了。但只是不明白!
追答:存储空间就是在内存中开辟2个字节存放这个数,寄存器是为了加快运算速度的专用存储单元,比如51系列中的A累加器,B寄存器,R0-R7等,很多。
你可以看看编译后的汇编程序,就知道这个初值放到哪儿去了。
追问:有时跑寄存器,有时跑存储空间。这分别对应什么情况呢?在我根本不清楚的情况下,我试过把dat的定义语句放主函数外面,dat赋值语句同样会执行。dat值也不曾改变啊?但它这却跑存储空间去了,何解?
追答:这个是编译程序生成的结果,编译程序有自己的规则,不需要解释,就像一个运算,是直接用存储空间的值运算还是先送到寄存器,再运算,你是没办法控制的,除非你直接用汇编。其实这个问题也没必要关心,爱放哪儿就那儿吧。
追问:谢了,我们上单片机课,老师留给我们的问题,我们暂时还只上到很肤浅的内容,我以为这个课后“思考题”是已知知识能解决的。我想这个问题确实不应该是自己能理解的。或许只是我们理解复杂化了,或许是我老师把它想简单化了!
追答:可以看看单片机的硬件结构,里面会说到存储结构,如程序存储,RAM和寄存器等。
追问:非常感谢你,我是初学者,请问可以交个朋友吗?希望以后能在程序方面得到你的指点。我的QQ:646743653
追答:好的
全部回答
- 1楼网友:冷風如刀
- 2021-01-19 11:49
dat是uint类型,有可能超出了其最大范围。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯