打印
[STM8]

中断处理程序中变量无法累加???

[复制链接]
3123|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eric_123|  楼主 | 2009-10-16 20:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
  /* Toggle GPIO PIN5 */
  //unsigned char test1;
  PB_ODR ^= 0x01;
  TIM4_SR&=0xF0;
  test1++;
    return;
}

变量test1每次进入中断都变成0;在中断处理时已经加1了啊,
试了很多种方法,都没用。请大家指正错在哪???
沙发
awmc_m| | 2009-10-16 23:42 | 只看该作者
test1是全局变量或静态变量吗?
中断服务程序里用return可以吗?

使用特权

评论回复
板凳
eric_123|  楼主 | 2009-10-18 08:44 | 只看该作者
test1是全局变量,在main.h文件中定义,然后在extern.h文件中定义为extern u8;

使用特权

评论回复
地板
hsbjb| | 2009-10-18 18:52 | 只看该作者
中断里面不能有返回值的

使用特权

评论回复
5
sinadz| | 2009-10-18 19:30 | 只看该作者
中断里面加return编译应该都通不过吧

使用特权

评论回复
6
eric_123|  楼主 | 2009-10-18 21:00 | 只看该作者
有没有return都一样,编译通过,在仿真下查看的变量值。变量是全局变量,只是在中断里处理一下,

使用特权

评论回复
7
freny| | 2009-10-19 09:11 | 只看该作者
试下用volatile去定义,防止编译器给优化掉

使用特权

评论回复
8
macro08| | 2009-10-20 09:39 | 只看该作者
试一下,把中断向量表interrup.c 与中断子程序分开,应该可以解决这个问题。

使用特权

评论回复
9
寒雨飞扬| | 2009-10-22 15:20 | 只看该作者
在中断函数中test1没有被调用,肯定是被编译器优化了,你可以尝试看一下汇编代码。
试下用volatile去定义,防止编译器给优化掉。

使用特权

评论回复
10
ar_m_cu| | 2009-10-22 18:48 | 只看该作者
我以前用全局变量和静态变量都可以的

使用特权

评论回复
11
45707136| | 2009-10-22 20:12 | 只看该作者
同意9楼

使用特权

评论回复
12
eric_123|  楼主 | 2009-10-23 19:46 | 只看该作者
已解决,STVD的问题,单步调试时有时候变量监视有问题,全速运行时测试可以累加。升到4.1.3还是这样。

使用特权

评论回复
13
tieguanyin2008| | 2010-9-22 23:13 | 只看该作者
变量设置为全局部变量就可以

使用特权

评论回复
14
McuPlayer| | 2010-9-23 11:04 | 只看该作者
上面已经有人提醒了,用volatile来修饰变量定义

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

1

粉丝