打印
[应用相关]

STM8 中断服务函数问题

[复制链接]
2919|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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");  
这三句屏蔽掉,试下

使用特权

评论回复
5
Brand2| | 2017-3-30 21:41 | 只看该作者
不加扫描函数,会重启吗

使用特权

评论回复
6
Soraka| | 2017-3-30 21:52 | 只看该作者
你scan函数怎么写的  又用到哪些io口了

使用特权

评论回复
7
feelhyq| | 2017-3-31 09:28 | 只看该作者
Rollo 发表于 2017-3-30 21:06
发生了中断嵌套导致栈溢出从未程序跑飞,看门狗重启

同一中断是不会被自己打断的,因为优先级相同

使用特权

评论回复
8
前功尽弃| | 2017-3-31 14:46 | 只看该作者
中断里面调用的函数改为不返回的,变量改成全局变量试试

使用特权

评论回复
9
TXQDM| | 2017-3-31 14:54 | 只看该作者
单步调试,看看是哪个地方出了错不就行啦!

使用特权

评论回复
10
10299823| | 2017-3-31 16:36 | 只看该作者
位什么要在C语言嵌套汇编语言?

使用特权

评论回复
11
10299823| | 2017-3-31 16:38 | 只看该作者
你单步调试试试程序会在哪里停止?

使用特权

评论回复
12
huanying263| | 2017-5-25 10:52 | 只看该作者
你单步调试试试程序会在哪里停止?

使用特权

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

本版积分规则

113

主题

757

帖子

3

粉丝