熊仔
发表于 2023-9-19 13:03:05
是的,写完IE之后还会执行下一条.
tzz1983
发表于 2023-9-19 13:07:08
熊仔 发表于 2023-9-19 12:51
取地址,译码,执行
译码的时候读取下一条。根据下一条是否,写入 IE操作,来延期中断。
是的, 如果追求极限速度, 我认为可以
PUSHIE
CLR EA
POP R11
ORL A #080H
ORL IE A
进临界区2个时间, 出来三个时钟
熊仔
发表于 2023-9-19 13:07:42
所以这部分一定要用汇编写才能准确.
C估计不准确的,不然读取EA到C,或者到A,然后保存到变量。再执行EA=0。
熊仔
发表于 2023-9-19 13:13:34
pendSV中断里面,还是直接EA=0EA=1,简单粗暴,完事了
本来就不可能返回来的时候是关中断。关中断都是程序员的bug。
这里真没必要考虑嵌套
熊仔
发表于 2023-9-19 13:31:15
tzz1983 发表于 2023-9-19 13:07
是的, 如果追求极限速度, 我认为可以
PUSHIE
CLR EA
ANL A,#0X80
tzz1983
发表于 2023-9-19 14:32:17
本帖最后由 tzz1983 于 2023-9-19 14:33 编辑
熊仔 发表于 2023-9-19 13:31
ANL A,#0X80
嗯, 我经常出写错这种错.
从广泛的整体面说, 我认为方法2确实会有"堆栈寻址的不适合",这个问题, 因为编绎器我们管不住它, 谁知道它会用什么方法来实现自己的目的
只用在局部是没问题的, 就像刚才说的中断那个位置, 前后代码都可控.
只调了一个外部函数, 就算是用到栈基寻址,调用过后是用新的栈基址了, 无关了
熊仔
发表于 2023-9-19 14:58:42
PUSHIE
CLR EA
POP PSW
MOV EA,C
这样前后都2条指令,更优。
edalab
发表于 2023-9-19 15:04:24
熊仔 发表于 2023-9-19 14:58
PUSHIE
CLR EA
这样会改变PSW,会有问题
熊仔
发表于 2023-9-19 15:13:45
不会,PSW,ACC都是可以操作的。判断的时候才用到。
熊仔
发表于 2023-9-19 15:18:31
用户的指令不会中断,判断语句。
有硬件中断才会,但是中断会入栈。
如果会出错的话,那就没法调用函数了。函数里面都在操作这两个最为繁忙的寄存器