找回密码
 注册
查看: 627|回复: 4
打印 上一主题 下一主题

为什么在RH850 的EI中断函数里关闭开启中断程序跑飞?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-2 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在RH850 F1K的EI中断函数里,使用DI和EI指令关闭开启中断,程序反复进入中断多次(有时几千次,有时几万次)后异常。程序里有3个中断,一个OSTM,一个是CAN接收中断(在CAN接收中断函数里,开启关闭中断),一个是CAN发送完成中断。OSTM中断优先级最高 。
' y. K. C1 |3 i" s. l( y常常有以下三种情况:( O# X3 v% k; F% v. N+ N6 g7 e) K
1)程序从复位地址运行(不是复位),sp值异常(超出RAM地址)。
% _3 c, _0 q2 D- D2)程序运行在某一段程序中出不来,sp值异常(超出RAM地址)。$ D8 K# i* C& n" G# i" n
3)程序一直运行在中断(CAN RX)最后一条指令,原因是EIPC地址与PC地址一样。
! u1 a! }* I. w! r( i5 p请各位大侠帮忙指导一下,为什么在中断里关闭开启中断会有这样的问题。在中断函数里如何关闭中断?
( A3 o1 \7 L& j/ y. P

该用户从未签到

2#
发表于 2022-11-2 11:23 | 只看该作者
在中断里打开和关闭中断是啥操作?

该用户从未签到

3#
发表于 2022-11-2 13:28 | 只看该作者
为什么会想着在中断里面,开关中断?

该用户从未签到

4#
 楼主| 发表于 2022-11-2 13:30 | 只看该作者
补充几点:/ l3 o7 c' P6 z
1、在循坏里加__DI()和__EI(),程序正常;
- K% H( E3 x* Y! u2、在OSTM里加__DI()和__EI()也正常. f: @+ i: _3 k2 t
3、在CAN接收中断函数加__DI()和__EI(),DI和EI中间没有任何代码运行一段时间(CAN上一直有报文发送)也会跑飞。7 L* C+ Q# z3 W% s
4、将去掉CAN接收中断的_DI()和__EI(),程序一切正常。

点评

我认为在中断里面开关中断本身就不合理,也不需要。  详情 回复 发表于 2022-11-2 13:51

该用户从未签到

5#
发表于 2022-11-2 13:51 | 只看该作者
niubility 发表于 2022-11-2 13:306 w: ~: Y1 \  b3 D' u" z
补充几点:' X" c$ X3 ?& `) H
1、在循坏里加__DI()和__EI(),程序正常;9 K) x1 z/ m4 `2 [+ h- k* v
2、在OSTM里加__DI()和__EI()也正常
& q# ?* T2 B1 g' J0 X9 d; \
我认为在中断里面开关中断本身就不合理,也不需要。/ ?. ?$ Z8 K, C8 u8 \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-1 16:39 , Processed in 0.078125 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表