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

[复制链接]
4809|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 | 显示全部楼层
中断里面不能有返回值的
sinadz 发表于 2009-10-18 19:30 | 显示全部楼层
中断里面加return编译应该都通不过吧
 楼主| eric_123 发表于 2009-10-18 21:00 | 显示全部楼层
有没有return都一样,编译通过,在仿真下查看的变量值。变量是全局变量,只是在中断里处理一下,
freny 发表于 2009-10-19 09:11 | 显示全部楼层
试下用volatile去定义,防止编译器给优化掉
macro08 发表于 2009-10-20 09:39 | 显示全部楼层
试一下,把中断向量表interrup.c 与中断子程序分开,应该可以解决这个问题。
寒雨飞扬 发表于 2009-10-22 15:20 | 显示全部楼层
在中断函数中test1没有被调用,肯定是被编译器优化了,你可以尝试看一下汇编代码。
试下用volatile去定义,防止编译器给优化掉。
ar_m_cu 发表于 2009-10-22 18:48 | 显示全部楼层
我以前用全局变量和静态变量都可以的
45707136 发表于 2009-10-22 20:12 | 显示全部楼层
同意9楼
 楼主| eric_123 发表于 2009-10-23 19:46 | 显示全部楼层
已解决,STVD的问题,单步调试时有时候变量监视有问题,全速运行时测试可以累加。升到4.1.3还是这样。
tieguanyin2008 发表于 2010-9-22 23:13 | 显示全部楼层
变量设置为全局部变量就可以
McuPlayer 发表于 2010-9-23 11:04 | 显示全部楼层
上面已经有人提醒了,用volatile来修饰变量定义
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

1

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