打印
[应用相关]

STM8 中断服务函数里面调用子函数 会重启

[复制链接]
2376|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Levenburg|  楼主 | 2017-4-13 20:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
中断里面调用子函数,不能正确返回,程序跑飞而一直重启。
代码:
#pragma vector=0x19
__interrupt void interrupt_handler_tim4(void)
{
    asm("SIM");
    TIM4->SR1 =0x00;

    Scan_Key();       //调用子函数,这句话有问题;单片机重启
    GC_Temp++;
    asm("RIM");
    asm("IRET");        
}



char  Scan_Key(void)    //这么简单的也不行
{
    char  a,b;
   return a+b;
}
沙发
Thorald| | 2017-4-13 20:41 | 只看该作者
发生了中断嵌套导致栈溢出从未程序跑飞,看门狗重启

使用特权

评论回复
板凳
yiyigirl2014| | 2017-4-13 20:47 | 只看该作者
你怎么确认是那句造成的呢?

使用特权

评论回复
地板
yiyigirl2014| | 2017-4-13 20:54 | 只看该作者
应该跟那句没有关系。

使用特权

评论回复
5
Bjorn| | 2017-4-13 20:54 | 只看该作者
乱用开关中断指令的问题
首先是因为你进入中断后人为的改变了定时器的中断优先级为最高(比之前的定时器的优先级别更高了),这次如果你的定时时间很短,你的处理函数还没执行完,这次就会出现定时器重新嵌入到中断处理函数中,最终导致栈溢出。

使用特权

评论回复
6
yiyigirl2014| | 2017-4-13 20:55 | 只看该作者
我网上找了个例子给你看看
/* -------------------------------------------------------------------
实验内容:
使用STM8的定时器T1做1S定时,并使用PD口的LED指示灯做简单指示。
----------------------------------------------------------------------
硬件连接:
将PB口的LED指示灯使能开关切换到"ON"状态。
----------------------------------------------------------------------*/

#include <STM8S207S8.h>
unsigned char i=0;

#define DISP_DDR   DDRD
#define DISP_PORT  PORTD


void Init_Tim4(void)
{
      TIM4_CR1=0x01;
      //TIM4_IER=0x00;
      TIM4_IER=0x01;
      TIM4_EGR=0x01;
      TIM4_CNTR=255;
      TIM4_ARR=255;
      TIM4_PSCR=0x07;
}

void Init_GPIO(void)
{
      PD_DDR=0xff;
      PD_CR1=0xff;
      PD_CR2=0x00;
}

void main(void)
{
      Init_GPIO();
      Init_Tim4();
      _asm("rim");
      while (1);
}

[url=home.php?mod=space&uid=1095855]@far[/url] [url=home.php?mod=space&uid=422518]@interrupt[/url] void TIM4_UPD_OVF_IRQHandler (void)
{
      i++;
      TIM4_SR=0x00;
      if(i==61)
      {
            PD_ODR=PD_ODR^0x08;
            i=0;
      }
      return;
}

使用特权

评论回复
7
Rollo| | 2017-4-13 21:20 | 只看该作者
asm("SIM"); asm("RIM");
    asm("IRET");  这三句屏蔽掉就没事了,你可以试下

使用特权

评论回复
8
Rangar| | 2017-4-13 21:29 | 只看该作者
不加扫描函数,会重启吗

使用特权

评论回复
9
Stannis| | 2017-4-13 21:44 | 只看该作者
scan函数怎么写的  用到哪些io口了

使用特权

评论回复
10
zhuomuniao110| | 2017-4-13 21:56 | 只看该作者
不加扫描是什么效果。。。是不是这样,你进入中断后要不要先关闭中断,你在按键时候又触发了下次的中断。一般进去后先关中断,清理中断,然后干活,干完活重启中断。

使用特权

评论回复
11
chenci2013| | 2017-4-14 22:36 | 只看该作者
程序跑飞使用看门狗

使用特权

评论回复
12
chenci2013| | 2017-4-14 22:38 | 只看该作者
这几个汇编程序有什么问题?

使用特权

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

本版积分规则

46

主题

180

帖子

0

粉丝