[应用相关] STM8 中断服务函数问题

[复制链接]
 楼主| Bjorn 发表于 2017-3-30 20:44 | 显示全部楼层 |阅读模式
问题:STM8 中断服务函数里面调用子函数 会重启
中断里面调用子函数,不能正确返回,程序跑飞而一直重启。
代码:
#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;
}


望高手赐教!
Rollo 发表于 2017-3-30 21:06 | 显示全部楼层
发生了中断嵌套导致栈溢出从未程序跑飞,看门狗重启
Rangar 发表于 2017-3-30 21:20 | 显示全部楼层
因为你进入中断后人为的改变了定时器的中断优先级为最高(比之前的定时器的优先级别更高了),这次如果你的定时时间很短,你的处理函数还没执行完,这次就会出现定时器重新嵌入到中断处理函数中,最终导致栈溢出。
Stannis 发表于 2017-3-30 21:30 | 显示全部楼层
asm("SIM");
asm("RIM");
asm("IRET");  
这三句屏蔽掉,试下
Brand2 发表于 2017-3-30 21:41 | 显示全部楼层
不加扫描函数,会重启吗
Soraka 发表于 2017-3-30 21:52 | 显示全部楼层
你scan函数怎么写的  又用到哪些io口了
feelhyq 发表于 2017-3-31 09:28 | 显示全部楼层
Rollo 发表于 2017-3-30 21:06
发生了中断嵌套导致栈溢出从未程序跑飞,看门狗重启

同一中断是不会被自己打断的,因为优先级相同
前功尽弃 发表于 2017-3-31 14:46 | 显示全部楼层
中断里面调用的函数改为不返回的,变量改成全局变量试试
TXQDM 发表于 2017-3-31 14:54 | 显示全部楼层
单步调试,看看是哪个地方出了错不就行啦!
10299823 发表于 2017-3-31 16:36 | 显示全部楼层
位什么要在C语言嵌套汇编语言?
10299823 发表于 2017-3-31 16:38 | 显示全部楼层
你单步调试试试程序会在哪里停止?
huanying263 发表于 2017-5-25 10:52 | 显示全部楼层
你单步调试试试程序会在哪里停止?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

757

帖子

3

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