CosyOS
发表于 2023-9-19 15:19:21
edalab 发表于 2023-9-19 15:04
这样会改变PSW,会有问题
POP PSW对应PUSH IE,是要把入栈的IE放到PSW里,恢复EA后会再次POP PSW(对应PUSH PSW)。
tzz1983
发表于 2023-9-19 15:24:03
熊仔 发表于 2023-9-19 15:13
不会,PSW,ACC都是可以操作的。判断的时候才用到。
之前想到过,PSW关系到寄存器组, 这里用的都是DRx, 应该没有问题,暂不确定, 先搁置.
用在别的地方就没有仔细研究,我现在不知道非兼容51模式下, 会不会用到寄存器组这个概念, 你去研究吧, 哈哈
CosyOS
发表于 2023-9-19 15:25:12
1、关于中断响应的细节可以研究,但不要过分依赖,正所谓人算不如天算。我们应尽量采用100%可靠的方法,如JBC指令。
2、我也认为不会有人会在中断中关闭中断,而后不再开启,如果有也是忘了开启。然而我们不必过于纠结这一点@熊仔,
JBC原子指令要做的事情就是条件判断与执行分支不可分割。如果不是EA,换做是一个事件标志,
在任务和中断中都会查询这个事件标志来执行,如果不用JBC指令就会有出问题的机会。
3、我认为先读EA,再写EA还是可以被打断的,原因是读EA不是特殊指令,读EA之前的指令为当前指令时。
tzz1983
发表于 2023-9-19 15:32:26
手上东西出BUG, 时好时不好, 唉呀, 愁死我了, 4天了, 还没找出来, {:cry:}, 就怕这种时好时坏的东西, 要么死透了, 总归有个死的点可以找到, 这种半死不活的太愁了
熊仔
发表于 2023-9-19 15:47:56
本帖最后由 熊仔 于 2023-9-19 15:53 编辑
CosyOS 发表于 2023-9-19 15:25
1、关于中断响应的细节可以研究,但不要过分依赖,正所谓人算不如天算。我们应尽量采用100%可靠的方法,如J ...
3、我认为先读EA,再写EA还是可以被打断的,原因是读EA不是特殊指令,读EA之前的指令为当前指令时。
按照STC最新出的流程图,不会出问题。除非他们出的图有问题。
按照传统8051,肯定有问题。
当前: MOV C,EA
下一条 : CLR EA
CosyOS
发表于 2023-9-19 16:28:38
本帖最后由 CosyOS 于 2023-9-19 16:39 编辑
当前指令:MOV C, EA 的上一条指令
下一条指令:MOV C, EA
再下一条指令:CLR EA
可见,MOV C, EA 与 CLR EA 可被中断,除非 MOV C, EA 的上一条指令为特殊指令。
tzz1983
发表于 2023-9-19 16:42:31
熊仔, 断了念想了, JBC吧{:lol:}
tzz1983
发表于 2023-9-19 16:51:34
CosySO真厉害, 有空去拜访你的OS
CosyOS
发表于 2023-9-20 10:23:20
这个问题熊仔的说法也非常有道理,所以真相究竟如何坐等STC的工程师一锤定音。
所以,我的建议就是不要用拿不准的方法,而应该采用100%可靠的方法。
其实不差几个指令周期,RTOS应可靠性第一、性能第二。
熊仔
发表于 2023-9-21 12:59:18
本帖最后由 熊仔 于 2023-9-21 13:03 编辑
中段发生后能执行两条指令,如果两条都不是特殊指令,那就进入中断服务程序,分析确实能打断。
讨论:是不是只要执行中断能返回的,并且返回来肯定是开中断的,也就是退出中断前必须开中断,这种情况就没问题呢?如果能打断读到的状态是1,返回后也是1,返回后马上执行清零操作。这样分析这种情况貌似是没啥问题的。
我一直认为,中断退出前关闭中断开关的,那是程序员的bug