猫虎的 发表于 2026-4-14 14:28:55

中断嵌套多了会不会有问题

我有个这样的应用,芯片用的8H1K08,Timer0固定为1ms中断一次,Timer1、PWMA和PWMB这三个会随着程序参数变化,定时时间在90uS-240uS之间变动,
在定时器中断服务程序中我有16位的移位运算,同时还用了串口通信,主程序中在不停的进行着32位的乘除运算,有时候会有异常,程序会跑飞,
不知道会不会是这几个中断有那么几瞬间会来回嵌套,用于保存现场的R接触器正存着主程序中32位运算的中间变量呢,然后跳到某个中断去了,保存现场,
结果那个中断没执行完呢,又跳到另一个中断去了,再次保存现场(覆盖了老现场)

狂热主宰 发表于 2026-4-14 15:15:25

中断频繁其它线程
影响工作效率

青穗三三 发表于 2026-4-14 15:38:58

当然,必须考虑中断嵌套的问题,要不然可能会引发未知问题。可以置标志位,统一在主循环中处理。

猫虎的 发表于 2026-4-15 08:14:10

狂热主宰 发表于 2026-4-14 15:15
中断频繁其它线程
影响工作效率

影响主程序执行效率没有关系,只要不出错就行

猫虎的 发表于 2026-4-15 08:18:49

青穗三三 发表于 2026-4-14 15:38
当然,必须考虑中断嵌套的问题,要不然可能会引发未知问题。可以置标志位,统一在主循环中处理。 ...

你意思是说,中断里不让他干活,只让他置位标志位,然后在main里循环检测标志位?
这样也行,但是中断时间只有100多uS,主程序里好几个32位乘除法很费时间,
会不会出现都中断两次了,主程序还没走完一个循环{:4_167:}

青穗三三 发表于 2026-4-15 08:27:58

猫虎的 发表于 2026-4-15 08:18
你意思是说,中断里不让他干活,只让他置位标志位,然后在main里循环检测标志位?
这样也行,但是中断时 ...

需要测量下主程序循环的时间

小飞侠 发表于 2026-4-16 07:26:49

猫虎的 发表于 2026-4-15 08:18
你意思是说,中断里不让他干活,只让他置位标志位,然后在main里循环检测标志位?
这样也行,但是中断时 ...

主要是看主程序循环的运行时间,大于100us就会,小于100us就不会

猫虎的 发表于 2026-4-16 08:14:24

青穗三三 发表于 2026-4-15 08:27
需要测量下主程序循环的时间

基本不用测了,主程序里做着好多32位的运算,很慢{:4_167:},绝对超过80uS了

猫虎的 发表于 2026-4-16 08:16:05

小飞侠 发表于 2026-4-16 07:26
主要是看主程序循环的运行时间,大于100us就会,小于100us就不会

肯定大于的,8位的8H1K08,没有硬件乘除法器,干着32位乘除运算很费劲,而且我还弄了好多32位的乘除运算

Ayb_ice 发表于 2026-4-16 08:29:37

只有4个优先级,嵌套最多4层,准确应该是3层
页: [1]
查看完整版本: 中断嵌套多了会不会有问题