我用AVR studio编程好像全局变量不变,读出的怎么老是0
我用AVRstudio编程好像全局变量不变,读出的怎么老是0你们好像误会了,我把程序下载到单片机里,按理来说全局变量不像局部变量会释放数据,可是我调用完子程序改变全局变量...
我用AVR studio编程好像全局变量不变,读出的怎么老是0
你们好像误会了,我把程序下载到单片机里,按理来说全局变量不像局部变量会释放数据,可是我调用完子程序改变全局变量数据,在主程序里好像释放掉了,读出来是0
我的全局变量是带有整形返回值的子函数里变化的,这样是不是不行啊 展开
你们好像误会了,我把程序下载到单片机里,按理来说全局变量不像局部变量会释放数据,可是我调用完子程序改变全局变量数据,在主程序里好像释放掉了,读出来是0
我的全局变量是带有整形返回值的子函数里变化的,这样是不是不行啊 展开
5个回答
展开全部
楼上说的正是,不过单词写错了,加个 volatile 关键字试试
补充:
很多编译器会对代码进行优化,包括对全局变量的一些优化。
比如 AVR Studio就会对全局变量进行优化。
优化的情况如下:
若在主函数的死循环中不断地对此全局变量进行判断或者其它,编译器不会每次都从原地址取值(原地址即为全局变量所在的位置),而是从缓存中取值(如Rn寄存器)。即使在其它函数中对此全局变量进行了修改(如中断程序或者其它),也不会影响到主函数对此全局变量的判断(即判断出错),解决这种问题的办法就是在定义全局变量时加上volatile关键字(如volatile unsigned char i),以告诉编译器不要对此全局变量进行优化,即每次要用到此全局变量时都从原地址取值。
如果加下volatile关键字还没有用的话,楼主可以帖出部分代码,作进一步的分析和讨论。
补充:
很多编译器会对代码进行优化,包括对全局变量的一些优化。
比如 AVR Studio就会对全局变量进行优化。
优化的情况如下:
若在主函数的死循环中不断地对此全局变量进行判断或者其它,编译器不会每次都从原地址取值(原地址即为全局变量所在的位置),而是从缓存中取值(如Rn寄存器)。即使在其它函数中对此全局变量进行了修改(如中断程序或者其它),也不会影响到主函数对此全局变量的判断(即判断出错),解决这种问题的办法就是在定义全局变量时加上volatile关键字(如volatile unsigned char i),以告诉编译器不要对此全局变量进行优化,即每次要用到此全局变量时都从原地址取值。
如果加下volatile关键字还没有用的话,楼主可以帖出部分代码,作进一步的分析和讨论。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这也有可能是你读的方法不对,所以造成总是读出为0。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的全局变量在何处改变?中断中吗??加上violate试试~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
源程序呢??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最好还是把源程序放出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询