我用AVR studio编程好像全局变量不变,读出的怎么老是0

我用AVRstudio编程好像全局变量不变,读出的怎么老是0你们好像误会了,我把程序下载到单片机里,按理来说全局变量不像局部变量会释放数据,可是我调用完子程序改变全局变量... 我用AVR studio编程好像全局变量不变,读出的怎么老是0
你们好像误会了,我把程序下载到单片机里,按理来说全局变量不像局部变量会释放数据,可是我调用完子程序改变全局变量数据,在主程序里好像释放掉了,读出来是0
我的全局变量是带有整形返回值的子函数里变化的,这样是不是不行啊
展开
 我来答
看看奋7301
2010-06-07 · TA获得超过168个赞
知道答主
回答量:69
采纳率:0%
帮助的人:93.7万
展开全部
楼上说的正是,不过单词写错了,加个 volatile 关键字试试

补充:
很多编译器会对代码进行优化,包括对全局变量的一些优化。
比如 AVR Studio就会对全局变量进行优化。
优化的情况如下:
若在主函数的死循环中不断地对此全局变量进行判断或者其它,编译器不会每次都从原地址取值(原地址即为全局变量所在的位置),而是从缓存中取值(如Rn寄存器)。即使在其它函数中对此全局变量进行了修改(如中断程序或者其它),也不会影响到主函数对此全局变量的判断(即判断出错),解决这种问题的办法就是在定义全局变量时加上volatile关键字(如volatile unsigned char i),以告诉编译器不要对此全局变量进行优化,即每次要用到此全局变量时都从原地址取值。

如果加下volatile关键字还没有用的话,楼主可以帖出部分代码,作进一步的分析和讨论。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lishengling24
2010-06-06 · TA获得超过2030个赞
知道小有建树答主
回答量:786
采纳率:0%
帮助的人:583万
展开全部
这也有可能是你读的方法不对,所以造成总是读出为0。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woshizzza
2010-06-05 · TA获得超过252个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:209万
展开全部
你的全局变量在何处改变?中断中吗??加上violate试试~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
x10031987
2010-06-05 · TA获得超过280个赞
知道答主
回答量:75
采纳率:100%
帮助的人:70.7万
展开全部
源程序呢??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蹇贤0I
2010-06-11 · TA获得超过163个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:119万
展开全部
最好还是把源程序放出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式