C语言中关于全局变量的问题

[复制链接]
 楼主| qianlong30 发表于 2007-1-17 20:04 | 显示全部楼层 |阅读模式
PIC16F877.
我在中断服务程序中递增一变量,这一变量是一个子程序中要用的参数,那这个变量要设置成全局变量吗?
也就是说,中断服务程序中修改的变量,必须定义成全局变量?
zhichengdz 发表于 2007-1-17 20:07 | 显示全部楼层

不一定

 楼主| qianlong30 发表于 2007-1-17 20:11 | 显示全部楼层

RE:

能详细说一下吗?
王紫豪 发表于 2007-1-17 20:34 | 显示全部楼层

static

 楼主| qianlong30 发表于 2007-1-17 20:49 | 显示全部楼层

RE

file1.c中
extern uchar scan()

interrupt comm()
{
  count++;      //计数器在中断中增1
 ....
}

main()
{
...
i=scan();
...
}


file2.c中
uchar scan()
{...
  while(!count==10)   //等待直到10次中断
  ...
 }


那这个count在哪个文件中定义,怎样定义?
如果scan()同中断函数在同一文件又该怎样定义?
初接触C,请赐教.


lishuanghua 发表于 2007-1-18 08:30 | 显示全部楼层

要全局变量

静态变量虽说也独占内存,但不能被别的函数使用。在哪个文件定义都一样,别的文件要使用需要先声明为外部变量。
 楼主| qianlong30 发表于 2007-1-18 19:47 | 显示全部楼层

re

就是说中断程序中用到的变量必须是设置成全局变量?
lishuanghua 发表于 2007-1-19 08:23 | 显示全部楼层

如果只是中断程序用可以是局部变量

如果要保存到下一次中断用,可以用静态变量,如果要给后台程序用就需要全局变量
ronic 发表于 2007-1-19 12:27 | 显示全部楼层

while(!count==10) //等待直到10次中断

这句改成while(! count > 10)   //等待直到10次中断

会更合理一些
liuliyong5 发表于 2007-1-20 12:47 | 显示全部楼层

最好定义成volatile的全局变量

因为只要在中断程序里面修改了VOLATILE的全局变量,在其他程序里面用到的时候,就VOLATILE变量肯定是最新的数据,但是只能在中断程序里面对他进行修改
--请大家指教
nertz 发表于 2007-1-20 20:12 | 显示全部楼层

8楼说的是

lishuanghua 发表于 2007-1-22 08:14 | 显示全部楼层

liuliyong5说得很有道理

用volatile定义的变量编译器不会放在寄存器里面,这样可以保证中断改过后后台程序能得到最新的数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

353

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

150

主题

353

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部