关于函数变量的问题

2019-03-24 17:52发布

u8 k=0;
void I2cRead() interrupt 2
{
        //static u8 k=0;
       //k=0;
        INTTemp=INTTemp<<1;
        INTTemp=INTTemp|SDA;               
        k=k+1;
        if (k==8)
          {  
                 INTre[INTbyteflag]=INTTemp;
                 INTbyteflag++;
                 k=0;
                if(INTbyteflag>2&&INTre[2]+3==INTbyteflag)                        //接收的长度等于定义的长度,说明接收完毕
                        {
                                INTbyteflag=0;
                                     INTflag=1;
                        }
          }


如上,是通过INT1中断接收数据的程序。通过仿真的时候发现k的值为上图所显示的值,导致程序运行不正常。我把变量定义成局部变量或者静态变量都不行,只有当把k=0,放进中断函数时,k的值才正常。但是我不能每次进中断的时候,把k的值清零。清各位帮我想想这是原因,或者有没有什么其他办法。谢谢了。

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
wangjiafu1985
1楼-- · 2019-03-25 01:49
中断函数里面的计数变量只能用全局变量吧,你看一看是不是别的程序也使用了这个K,实在不行就定义一个专门名字,比如IIC_K,这样和别的变量区分开,肯定是有别的程序修改了这个值,要不然不会这样。
Li_Lei
2楼-- · 2019-03-25 04:46
 精彩回答 2  元偷偷看……
brain发烧友
3楼-- · 2019-03-25 08:34
wangjiafu1985 发表于 2015-9-7 14:48
中断函数里面的计数变量只能用全局变量吧,你看一看是不是别的程序也使用了这个K,实在不行就定义一个专门 ...

其他地方没这个变量,我也试着改成其他的变量名,都不行的。
brain发烧友
4楼-- · 2019-03-25 09:39
huo_hu 发表于 2015-9-7 15:30
你程序别的地方有没有修改K值啊

其他地方没K值的,就这一个地方。
wangjiafu1985
5楼-- · 2019-03-25 11:36
 精彩回答 2  元偷偷看……
dontium
6楼-- · 2019-03-25 17:14
用 if (k > 8) 试试

一周热门 更多>